какиой мне нужен был функционал:
1. указываем только имя пользователя (пароль генерирует сам скрипт)
2. скрипт должен создать такого пользователя в системе с домашней директорией (ругаться - если существует такой юзверь).
3. у него в домашней директории (доступной по FTP) создать поддиректории htdocs - для сайта и logs - для логов апача.
4. создать базу данных - такуюже как и имя пользователя. завести MySQL пользователя с таким же именем и таким же паролем как и на FTP
5. добавить в апач виртуальных хость ИМЯ_ПОЛЬЗОВАТЕЛЯ.mysite.com - для доступа к сайту извне
6. должен уметь удалять все что надобавлял - если захотим пользователя удалить
#!/bin/bash ######################### SETUP ############################################################ IP_ADDRESS="127.0.0.1" HOST_NAME="localhost" MYSQL_PASS="MYSQL_ROOT_PASSWORD_HERE" ############################################################################################ APACHE2_DIR="/etc/apache2" APACHE2_SAVL_DIR="$APACHE2_DIR/sites-available" APACHE2_SENBL_DIR="$APACHE2_DIR/sites-enabled" UID_ROOT=0 if [ "$UID" -ne "$UID_ROOT" ]; then echo "$0 - Requires root privileges" exit 1 fi function is_file(){ local f="$1" [[ -f "$f" ]] && return 0 || return 1 } function is_dir(){ local d="$1" [[ -d "$d" ]] && return 0 || return 1 } function is_exits(){ local check="$1" if (is_file "$check") then return 0 fi if (is_dir "$check") then return 0 fi return 1 #false } function is_user(){ local check_user="$1"; grep "$check_user:" /etc/passwd >/dev/null if [ $? -ne 0 ]; then #echo "NOT HAVE USER" return 1 else #echo "HAVE USER" return 0 fi } #function create_user_website(){ # cat <<eof >> outfile.txt #Text file content #EOF #} function generate_pass(){ CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()-_=+\\|/" LENGTH="8" while [ "${n:=1}" -le "$LENGTH" ] ; do PASSWORD="$PASSWORD${CHARS:$(($RANDOM%${#CHARS})):1}" let n+=1 done echo $PASSWORD } function is_yes(){ #TODO - add check 3-rd parameter for set default ansver (if press enter) while true do echo -n "Yes or No[Y/n]:" read x if [ -z "$x" ] then return 0; #defaul answer: Yes fi case "$x" in y |Y |yes |Д |д |да ) return 0;; n |N |no |Н |н |нет ) return 1;; # * ) ; # asc again esac done } function is_installed(){ # local I=`dpkg -s $1 | grep "Status"` local out=`dpkg --status $1 | grep Status:` #echo "$out" if [ -n "$out" ] then echo $1" installed" return 0 else echo $1" not installed" return 1 fi } function is_running(){ local result="$(ps -A|grep $1|wc -l)" if [[ $result -eq 0 ]]; then return 1 else return 0 fi } function create_user(){ local login="$1" local password="$2" `useradd -m -s /bin/bash $login` #set password echo -e "$password\n$password\n" | passwd $login >> /dev/null } function delete_user(){ local login=$1 `userdel -r $login` # remove virtual host rm $APACHE2_DIR/sites-enabled/$USER_NAME rm $APACHE2_DIR/sites-available/$USER_NAME # remove database mysql -uroot -p${MYSQL_PASS} --execute="drop database ${USER_NAME};" # remove user mysql -uroot -p${MYSQL_PASS} --execute="DROP USER '${USER_NAME}'@'localhost';" } #echo "paremeters count: $#" if [ $# -lt 1 ]; then # >= echo "USAGE: sudo add_new_user.sh <user_name> [delete]" echo " - add system user <user_name>, create user folder, create virtual host.${HOST_NAME}, create mysql" echo " user and database named <user_name>" echo " - delete - for remove user from system (system user and user folder, apache virtual host and mysql user and database)" exit; fi; USER_NAME=$1 if [ $# -eq 2 ]; then if [ "$2" == "delete" ]; then echo "delete user \"$1\"" delete_user $USER_NAME else echo "unknown parameter $2" fi exit; fi; echo -n "Check user name $USER_NAME: " if( is_user "$USER_NAME" )then echo "ERROR: Already exits" exit; else echo "OK" fi echo -n "Check Apache2: " if(is_dir "$APACHE2") then echo "not found directory $APACHE2_DIR" echo "Apache not installed?" exit; else echo "OK" fi #check installing mysql #is_installed apache2 #is_installed php5 #is_installed mysql-server #is_running mysqld echo -n "Check MySQL status: " if(is_running mysqld)then echo "OK [Running]"; else echo "Error: need start mysql daemon!" exit fi USER_PASSWORD="$(generate_pass)" echo "-----------------------------------" echo "User name : $USER_NAME" echo "User password: $USER_PASSWORD" echo "-----------------------------------" echo -n "Continue? " if(! is_yes) then exit; fi echo "--- create user ---" create_user "$USER_NAME" "$USER_PASSWORD" echo "--- create web site ---" `mkdir /home/$USER_NAME/htdocs` `mkdir /home/$USER_NAME/logs` #in future save log for current user `chown $USER_NAME:$USER_NAME /home/$USER_NAME/htdocs` virual_host_data=" <virtualhost *:80> ServerName ${USER_NAME}.${HOST_NAME} ServerAlias www.${USER_NAME}.${HOST_NAME} ServerAdmin webmaster@${USER_NAME}.${HOST_NAME} DocumentRoot /home/${USER_NAME}/htdocs <directory /home/${USER_NAME}/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /home/${USER_NAME}/cgi-bin/ <directory "/home/${USER_NAME}/cgi-bin"> AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /home/${USER_NAME}/logs/${USER_NAME}.${HOST_NAME}.error.log LogLevel warn CustomLog /home/${USER_NAME}/logs/${USER_NAME}.${HOST_NAME}.access.log combined </VirtualHost> " touch ${APACHE2_DIR}/sites-available/${USER_NAME} echo "$virual_host_data" >> ${APACHE2_DIR}/sites-available/${USER_NAME} #add link `ln -s ${APACHE2_DIR}/sites-available/${USER_NAME} ${APACHE2_DIR}/sites-enabled/${USER_NAME}` #create default html touch /home/${USER_NAME}/htdocs/index.html echo " ${USER_NAME} It's Working!
" >> /home/${USER_NAME}/htdocs/index.html #add in hosts #echo "${IP_ADDRESS} ${USER_NAME}.${HOST_NAME}" >> /etc/hosts echo "--- create database and mysql user ---" mysql -uroot -p${MYSQL_PASS} --execute="create database ${USER_NAME};" mysql -uroot -p${MYSQL_PASS} --execute="GRANT ALL PRIVILEGES ON ${USER_NAME}.* TO '${USER_NAME}'@'localhost' IDENTIFIED by '${USER_PASSWORD}' WITH GRANT OPTION;" echo "--- show hosting information ---" #display information echo "*****************************************" echo "* Web Site: ${USER_NAME}.${HOST_NAME}" echo "* user: ${USER_NAME}" echo "* password: ${USER_PASSWORD}" echo "*" echo "* Server: ${IP_ADDRESS}" echo "* ftp user: ${USER_NAME}" echo "* ftp password: ${USER_PASSWORD}" echo "*" echo "* mysql server: ${IP_ADDRESS}" echo "* mysql db_name: ${USER_NAME}" echo "* mysql user: ${USER_NAME}" echo "* mysql password: ${USER_PASSWORD}" echo "*****************************************"
Спасибо!! Очень полезный скрипт
ОтветитьУдалитьОчень полезная статься
ОтветитьУдалитьНо мне пришлось скрипт немного переделывать под себя
1) Сайты должны храниться в /home/user_name/site.ru
2) В связи с первым пунктом пришлось добавить название в параметры название сайта
3) отдельный скрипт удаления сайта