какиой мне нужен был функционал:
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) отдельный скрипт удаления сайта