Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #############
- # Functions #
- #############
- function exit_usage() {
- echo "User manager 1.0"
- echo "Usage: $0 COMMAND USERNAME"
- echo ""
- echo "COMMANDS:"
- echo " create Create new user"
- echo " delete Drop user and remove all files"
- exit 1
- }
- function exit_err() {
- echo "$1"
- exit 1
- }
- # Run as root, of course.
- if [ "$UID" -ne 0 ]
- then
- echo "Must be root to run this script."
- exit 1
- fi
- # Command line sanity checks
- if [ -z "$1" ]; then exit_usage; fi
- if [ -z "$2" ]; then exit_usage; fi
- #########
- # Setup #
- #########
- file_vhost="vhost.conf"
- dir_root="/srv/${2}"
- dir_vhost="${dir_root}/conf"
- dir_webroot="${dir_root}/www"
- dir_logs="${dir_root}/logs"
- dir_tmp="${dir_root}/tmp"
- dir_backup="${dir_root}/backup"
- server_name="${2}.mydomain.com"
- ftp_user="${2}"
- database_user="${2}"
- database_name="${2}_db"
- admin_user="my_admin"
- admin_password="Sup3rS3cr3tP@@sw0oRd!"
- admin_email="your@system.com"
- passw=`< /dev/urandom tr -dc _A-Za-z0-9 | head -c12`
- case "$1" in
- "create" )
- #ftp_password="undefined"
- #database_password="undefined"
- ftp_password=$passw
- database_password=$passw
- # Abort if user already exists
- if [ id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 already exists"; fi
- ###############
- # Create user #
- ###############
- echo "Creating user ${2}..."
- useradd -d "/srv/$2" -m "$2" -g www-users -s /bin/bash
- if [ $? != 0 ]; then exit_err "Failed creating specified user"; fi
- #####################
- # Set user password #
- #####################
- #echo "Setup the user password for ftp access."
- #read -s -p "FTP password for ${ftp_user}:" ftp_password
- echo -e "${ftp_password}\n${ftp_password}" | passwd $2
- ##############################
- # Create directory structure #
- ##############################
- echo "Creating directory structure..."
- mkdir -v -p "$dir_webroot"
- mkdir -v -p "$dir_vhost"
- mkdir -v -p "$dir_logs"
- mkdir -v -p "$dir_tmp"
- ##############################
- # Create virtual server file #
- ##############################
- echo "Setting up virtual hosts file in ${dir_vhost}/${file_vhost}..."
- echo "<VirtualHost *:80>
- ServerName ${server_name}
- ServerAlias *.${server_name}
- DocumentRoot ${dir_webroot}
- AssignUserID $2 www-users
- php_admin_value open_basedir ${dir_root}/:/home/henk/bitbucket/
- php_admin_value upload_tmp_dir ${dir_tmp}
- ErrorLog ${dir_logs}/error.log
- CustomLog ${dir_logs}/access.log combined
- <Directory "${dir_webroot}/">
- Require all granted
- AllowOverride All
- Options +FollowSymLinks +Includes -MultiViews +ExecCGI
- </Directory>
- </VirtualHost>" > "${dir_vhost}/${file_vhost}"
- #####################
- # Setup permissions #
- #####################
- echo "Setting up file permissions..."
- chown -R ${2}:www-users "${dir_root}"
- chmod 555 "${dir_root}"
- ##################
- # Setup database #
- ##################
- echo "We now need the mysql ROOT password to setup the database."
- read -s -p "Mysql root password: " mysql_root_password
- echo ""
- echo "New mysql user will be created with username '${database_user}'"
- #read -s -p "New mysql password: " database_password
- echo "Setting up database..."
- echo "
- CREATE DATABASE \`${database_name}\`;
- USE \`${database_name}\`;
- CREATE USER '${database_user}'@'localhost' IDENTIFIED BY '${database_password}';
- GRANT ALL PRIVILEGES ON \`${database_name}\`.* TO '${database_user}'@'localhost';
- FLUSH PRIVILEGES;
- " | mysql -uroot -p"${mysql_root_password}"
- ###################
- # Restart apache2 #
- ###################
- service apache2 restart
- #######################
- # Finished installing #
- #######################
- echo ""
- echo "New server created."
- echo "Server name: ${server_name}"
- echo "FTP username: ${ftp_user}"
- echo "FTP password: ${ftp_password}"
- echo "Database user: ${database_user}"
- echo "Database password: ${database_password}"
- echo "Database name: ${database_name}"
- echo ""
- read -p "Install Wordpress Latest [y/N]? " -n 1 -r
- echo
- if [[ $REPLY =~ ^[Yy]$ ]]
- then
- cd "/srv/"${ftp_user}"/www/"
- su ${ftp_user} -c "wp core download --locale=nl_NL"
- su ${ftp_user} -c "wp core config --dbname=$database_name --dbuser=$database_user --dbpass=$database_password"
- su ${ftp_user} -c "wp db create"
- su ${ftp_user} -c "wp core install --url=$server_name --title=$ftp_user --admin_user=$admin_user --admin_password=$admin_password --admin_email=$admin_email"
- echo ""
- echo "New WP setup."
- echo "Admin user: ${admin_user}"
- echo "FTP username: ${admin_password}"
- echo ""
- fi
- exit 0;
- ;;
- "delete" )
- echo "Deleting user $2 and all settings."
- echo "We need the mysql ROOT password to setup the database."
- read -s -p "Mysql root password: " mysql_root_password
- ##########################
- # Drop database, db user #
- ##########################
- echo "Delete database setup..."
- echo "
- DROP DATABASE \`${2}_db\`;
- DROP USER '${2}'@'localhost';
- FLUSH PRIVILEGES;
- " | mysql -uroot -p"${mysql_root_password}"
- ################
- # Delete files #
- ################
- echo "Deleting files..."
- rm -rv "/srv/$2/conf" "/srv/$2/logs" "/srv/$2/www" "/srv/$2/tmp"
- rm "/srv/$2/.bash_logout" "/srv/$2/.bashrc" "/srv/$2/.profile"
- rmdir "/srv/$2"
- ###############
- # Delete user #
- ###############
- echo "Deleting user..."
- if [ ! id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 does not exist" ; fi
- # Delete user
- userdel "$2"
- echo "Done deleting user. If any warnings were shown, be sure to manually check if cleanup was successful."
- ;;
- "backup" )
- echo "Preparing backup of user $2"
- ################
- # Collect info #
- ################
- database_password="undefined"
- read -s -p "Mysql ROOT password: " database_password
- mkdir -v -p "$dir_backup"
- chown -v "${2}:www-users" "${dir_backup}"
- archive_sql="${dir_backup}/$(date +%Y-%m-%d).sql.gz"
- archive_www="${dir_backup}/$(date +%Y-%m-%d).tar.gz"
- ###################
- # Backup database #
- ###################
- echo "Backing up database..."
- mysqldump -uroot -p"${database_password}" "${database_name}" | gzip > "${archive_sql}"
- if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
- chown "${ftp_user}:www-users" "${archive_sql}" &&
- chmod 644 "${archive_sql}"
- if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
- ##################
- # Backup wwwdocs #
- ##################
- echo "Backing up files..."
- tar --directory "${dir_webroot}" --create --file "${archive_www}" .
- if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
- chown "${ftp_user}:www-users" "${archive_www}" &&
- chmod 644 "${archive_www}"
- if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
- echo "==============="
- echo "== All done! =="
- echo "==============="
- ;;
- * )
- exit_usage;
- ;;
- esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement