Advertisement
Guest User

Untitled

a guest
Dec 30th, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.86 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #############
  4. # Functions #
  5. #############
  6. function exit_usage() {
  7. echo "User manager 1.0"
  8. echo "Usage: $0 COMMAND USERNAME"
  9. echo ""
  10. echo "COMMANDS:"
  11. echo " create Create new user"
  12. echo " delete Drop user and remove all files"
  13. exit 1
  14. }
  15. function exit_err() {
  16. echo "$1"
  17. exit 1
  18. }
  19.  
  20. # Run as root, of course.
  21. if [ "$UID" -ne 0 ]
  22. then
  23. echo "Must be root to run this script."
  24. exit 1
  25. fi
  26.  
  27. # Command line sanity checks
  28. if [ -z "$1" ]; then exit_usage; fi
  29. if [ -z "$2" ]; then exit_usage; fi
  30.  
  31. #########
  32. # Setup #
  33. #########
  34. file_vhost="vhost.conf"
  35. dir_root="/srv/${2}"
  36. dir_vhost="${dir_root}/conf"
  37. dir_webroot="${dir_root}/www"
  38. dir_logs="${dir_root}/logs"
  39. dir_tmp="${dir_root}/tmp"
  40. dir_backup="${dir_root}/backup"
  41. server_name="${2}.mydomain.com"
  42. ftp_user="${2}"
  43. database_user="${2}"
  44. database_name="${2}_db"
  45. admin_user="my_admin"
  46. admin_password="Sup3rS3cr3tP@@sw0oRd!"
  47. admin_email="your@system.com"
  48. passw=`< /dev/urandom tr -dc _A-Za-z0-9 | head -c12`
  49.  
  50.  
  51. case "$1" in
  52. "create" )
  53. #ftp_password="undefined"
  54. #database_password="undefined"
  55. ftp_password=$passw
  56. database_password=$passw
  57.  
  58. # Abort if user already exists
  59. if [ id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 already exists"; fi
  60. ###############
  61. # Create user #
  62. ###############
  63. echo "Creating user ${2}..."
  64. useradd -d "/srv/$2" -m "$2" -g www-users -s /bin/bash
  65. if [ $? != 0 ]; then exit_err "Failed creating specified user"; fi
  66.  
  67. #####################
  68. # Set user password #
  69. #####################
  70. #echo "Setup the user password for ftp access."
  71. #read -s -p "FTP password for ${ftp_user}:" ftp_password
  72. echo -e "${ftp_password}\n${ftp_password}" | passwd $2
  73.  
  74. ##############################
  75. # Create directory structure #
  76. ##############################
  77. echo "Creating directory structure..."
  78. mkdir -v -p "$dir_webroot"
  79. mkdir -v -p "$dir_vhost"
  80. mkdir -v -p "$dir_logs"
  81. mkdir -v -p "$dir_tmp"
  82.  
  83. ##############################
  84. # Create virtual server file #
  85. ##############################
  86. echo "Setting up virtual hosts file in ${dir_vhost}/${file_vhost}..."
  87. echo "<VirtualHost *:80>
  88. ServerName ${server_name}
  89. ServerAlias *.${server_name}
  90. DocumentRoot ${dir_webroot}
  91. AssignUserID $2 www-users
  92. php_admin_value open_basedir ${dir_root}/:/home/henk/bitbucket/
  93. php_admin_value upload_tmp_dir ${dir_tmp}
  94. ErrorLog ${dir_logs}/error.log
  95. CustomLog ${dir_logs}/access.log combined
  96. <Directory "${dir_webroot}/">
  97. Require all granted
  98. AllowOverride All
  99. Options +FollowSymLinks +Includes -MultiViews +ExecCGI
  100. </Directory>
  101. </VirtualHost>" > "${dir_vhost}/${file_vhost}"
  102.  
  103. #####################
  104. # Setup permissions #
  105. #####################
  106. echo "Setting up file permissions..."
  107. chown -R ${2}:www-users "${dir_root}"
  108. chmod 555 "${dir_root}"
  109.  
  110. ##################
  111. # Setup database #
  112. ##################
  113. echo "We now need the mysql ROOT password to setup the database."
  114. read -s -p "Mysql root password: " mysql_root_password
  115. echo ""
  116. echo "New mysql user will be created with username '${database_user}'"
  117. #read -s -p "New mysql password: " database_password
  118. echo "Setting up database..."
  119. echo "
  120. CREATE DATABASE \`${database_name}\`;
  121. USE \`${database_name}\`;
  122. CREATE USER '${database_user}'@'localhost' IDENTIFIED BY '${database_password}';
  123. GRANT ALL PRIVILEGES ON \`${database_name}\`.* TO '${database_user}'@'localhost';
  124. FLUSH PRIVILEGES;
  125. " | mysql -uroot -p"${mysql_root_password}"
  126.  
  127. ###################
  128. # Restart apache2 #
  129. ###################
  130. service apache2 restart
  131.  
  132. #######################
  133. # Finished installing #
  134. #######################
  135. echo ""
  136. echo "New server created."
  137. echo "Server name: ${server_name}"
  138. echo "FTP username: ${ftp_user}"
  139. echo "FTP password: ${ftp_password}"
  140. echo "Database user: ${database_user}"
  141. echo "Database password: ${database_password}"
  142. echo "Database name: ${database_name}"
  143. echo ""
  144.  
  145. read -p "Install Wordpress Latest [y/N]? " -n 1 -r
  146. echo
  147. if [[ $REPLY =~ ^[Yy]$ ]]
  148. then
  149. cd "/srv/"${ftp_user}"/www/"
  150. su ${ftp_user} -c "wp core download --locale=nl_NL"
  151. su ${ftp_user} -c "wp core config --dbname=$database_name --dbuser=$database_user --dbpass=$database_password"
  152. su ${ftp_user} -c "wp db create"
  153. 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"
  154. echo ""
  155. echo "New WP setup."
  156. echo "Admin user: ${admin_user}"
  157. echo "FTP username: ${admin_password}"
  158. echo ""
  159. fi
  160. exit 0;
  161. ;;
  162. "delete" )
  163. echo "Deleting user $2 and all settings."
  164. echo "We need the mysql ROOT password to setup the database."
  165. read -s -p "Mysql root password: " mysql_root_password
  166.  
  167. ##########################
  168. # Drop database, db user #
  169. ##########################
  170. echo "Delete database setup..."
  171. echo "
  172. DROP DATABASE \`${2}_db\`;
  173. DROP USER '${2}'@'localhost';
  174. FLUSH PRIVILEGES;
  175. " | mysql -uroot -p"${mysql_root_password}"
  176.  
  177. ################
  178. # Delete files #
  179. ################
  180. echo "Deleting files..."
  181. rm -rv "/srv/$2/conf" "/srv/$2/logs" "/srv/$2/www" "/srv/$2/tmp"
  182. rm "/srv/$2/.bash_logout" "/srv/$2/.bashrc" "/srv/$2/.profile"
  183. rmdir "/srv/$2"
  184.  
  185. ###############
  186. # Delete user #
  187. ###############
  188. echo "Deleting user..."
  189. if [ ! id -u $2 >/dev/null 2>&1 ]; then exit_err "User $2 does not exist" ; fi
  190. # Delete user
  191. userdel "$2"
  192.  
  193. echo "Done deleting user. If any warnings were shown, be sure to manually check if cleanup was successful."
  194.  
  195. ;;
  196. "backup" )
  197. echo "Preparing backup of user $2"
  198.  
  199. ################
  200. # Collect info #
  201. ################
  202. database_password="undefined"
  203. read -s -p "Mysql ROOT password: " database_password
  204.  
  205. mkdir -v -p "$dir_backup"
  206. chown -v "${2}:www-users" "${dir_backup}"
  207. archive_sql="${dir_backup}/$(date +%Y-%m-%d).sql.gz"
  208. archive_www="${dir_backup}/$(date +%Y-%m-%d).tar.gz"
  209.  
  210. ###################
  211. # Backup database #
  212. ###################
  213. echo "Backing up database..."
  214. mysqldump -uroot -p"${database_password}" "${database_name}" | gzip > "${archive_sql}"
  215. if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
  216. chown "${ftp_user}:www-users" "${archive_sql}" &&
  217. chmod 644 "${archive_sql}"
  218. if [ $? != 0 ]; then exit_err "Error while backing up the database"; fi
  219.  
  220. ##################
  221. # Backup wwwdocs #
  222. ##################
  223. echo "Backing up files..."
  224. tar --directory "${dir_webroot}" --create --file "${archive_www}" .
  225. if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
  226. chown "${ftp_user}:www-users" "${archive_www}" &&
  227. chmod 644 "${archive_www}"
  228. if [ $? != 0 ]; then exit_err "Error while backing up the files"; fi
  229.  
  230. echo "==============="
  231. echo "== All done! =="
  232. echo "==============="
  233.  
  234. ;;
  235. * )
  236. exit_usage;
  237. ;;
  238. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement