Created
March 6, 2020 10:11
-
-
Save prochor666/16600224b298903261821eb0894c54b2 to your computer and use it in GitHub Desktop.
Create web host, MySQL db, user, ftp and jail user in Debian Buster
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Sanatorium web host creator for Debian 10 Buster | |
# prochor, 2020 | |
# [email protected] | |
clear | |
# Create new website | |
echo -e "\e[38;5;14m|------------------------------------------- \e[0m" | |
echo -e "\e[38;5;14m| Sanatorium web host creator for Debian 10 Buster \e[0m" | |
echo -e "\e[38;5;14m|------------------------------------------- \e[0m" | |
echo -e "\e[38;5;14m| \e[0m" | |
echo -e "\e[38;5;14m| * Apache 2 host \e[0m" | |
echo -e "\e[38;5;14m| * MySQL 5 database and user \e[0m" | |
echo -e "\e[38;5;14m| * Vsftpd user \e[0m" | |
echo -e "\e[38;5;14m| \e[0m" | |
echo -e "\e[38;5;14m| [email protected] \e[0m" | |
echo -e "\e[38;5;14m|------------------------------------------- \e[0m" | |
echo -e " " | |
AUTOX=$1 | |
DOMAIN=$2 | |
USERNAME=$3 | |
PASSWORD=$4 | |
EMAIL=$5 | |
# Domain | |
if [ "$AUTOX" != "auto" ]; then | |
read -p "Type valid domain name: " DOMAIN | |
fi | |
S1=${#DOMAIN} | |
if [[ $S1 -lt 3 ]]; then | |
echo -e " " | |
echo -e "\e[91mError in domain name, exiting \e[0m" | |
echo -e " " | |
exit 0 | |
fi | |
# User | |
if [ "$AUTOX" != "auto" ]; then | |
read -p "Type username (min 3 characters): " USERNAME | |
fi | |
S2=${#USERNAME} | |
if [[ $S2 -lt 3 ]]; then | |
echo -e " " | |
echo -e "\e[91mError in username, exiting \e[0m" | |
echo -e " " | |
exit 0 | |
fi | |
# Password | |
if [ "$AUTOX" != "auto" ]; then | |
read -p "Type user password (min 4 characters): " PASSWORD | |
fi | |
S3=${#PASSWORD} | |
if [[ $S3 -lt 4 ]]; then | |
echo -e " " | |
echo -e "\e[91mPassword error, exiting \e[0m" | |
echo -e " " | |
exit 0 | |
fi | |
if [ "$AUTOX" != "auto" ]; then | |
read -p "Type valid email: " EMAIL | |
fi | |
S4=${#EMAIL} | |
if [[ $S4 -lt 4 ]]; then | |
echo -e " " | |
echo -e "\e[91mEmail not set, exiting \e[0m" | |
echo -e " " | |
exit 0 | |
fi | |
echo -e " " | |
echo -e " " | |
echo -e "\e[93mSetting up host task \e[0m" | |
echo -e " " | |
echo -e "Domain host: \e[38;5;14m${DOMAIN,,} \e[0m" | |
echo -e "Username: \e[38;5;14m$USERNAME \e[0m" | |
echo -e "Email: \e[38;5;14m$EMAIL \e[0m" | |
echo -e "Password: \e[38;5;14m******* \e[0m" | |
echo -e " " | |
# OS | |
echo -e "\e[38;5;14m - System user - \e[0m" | |
echo -e " " | |
USEREXISTS=false | |
getent passwd $USERNAME > /dev/null 2>&1 && USEREXISTS=true | |
if $USEREXISTS; then | |
echo -e " " | |
echo -e "\e[91mError, user $USERNAME $USEREXISTS already exists, exiting \e[0m" | |
echo -e " " | |
exit 0 | |
fi | |
useradd -s "/bin/bash" -m -d "/var/www/${DOMAIN,,}" -p $(openssl passwd -1 $PASSWORD) $USERNAME | |
usermod $USERNAME -g www-data | |
usermod $USERNAME -s /bin/false | |
#FTP | |
echo -e "\e[38;5;14m - FTP user and jail - \e[0m" | |
echo -e " " | |
echo "local_root=/var/www/${DOMAIN,,} | |
dirlist_enable=YES | |
download_enable=YES | |
write_enable=YES | |
" > /etc/vsftpd-users/$USERNAME | |
systemctl restart vsftpd | |
#MySQL | |
echo -e "\e[38;5;14m - MySQL user and database - \e[0m" | |
echo -e " " | |
# replace "-" with "_" for database username | |
MAINDB=${USERNAME//[^a-zA-Z0-9]/_} | |
SQLSTR=${MAINDB:0:10} | |
# If /root/.my.cnf exists then it won't ask for root password | |
if [ -f "/root/.my.cnf" ]; then | |
MYSQL=`which mysql` | |
Q1="CREATE DATABASE IF NOT EXISTS $SQLSTR COLLATE 'utf8_general_ci';" | |
Q2="GRANT USAGE ON $SQLSTR.* TO '$SQLSTR'@'localhost' IDENTIFIED BY '$PASSWORD';" | |
Q3="GRANT ALL PRIVILEGES ON $SQLSTR.* TO '$SQLSTR'@'localhost' WITH GRANT OPTION;" | |
Q4="FLUSH PRIVILEGES;" | |
SQL="${Q1}${Q2}${Q3}${Q4}" | |
$MYSQL -e "$SQL" | |
fi | |
# Apache 2 | |
echo -e "\e[38;5;14m - Apache virtual host - \e[0m" | |
echo -e " " | |
echo " | |
<VirtualHost ${DOMAIN,,}:80> | |
ServerName ${DOMAIN,,} | |
ServerAdmin $EMAIL | |
DocumentRoot /var/www/${DOMAIN,,}/web | |
ErrorLog /var/www/${DOMAIN,,}/log/error.log | |
CustomLog /var/www/${DOMAIN,,}/log/access.log combined | |
<Directory \"/var/www/${DOMAIN,,}/web\"> | |
Options FollowSymLinks MultiViews | |
AllowOverride All | |
Require all granted | |
</Directory> | |
<IfModule mpm_itk_module> | |
AssignUserId $USERNAME www-data | |
</IfModule> | |
ServerAlias *.${DOMAIN,,} | |
#RewriteEngine on | |
#RewriteCond %{SERVER_NAME} =${DOMAIN,,} [OR] | |
#RewriteCond %{SERVER_NAME} =*.${DOMAIN,,} | |
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] | |
</VirtualHost> | |
" > "/etc/apache2/sites-available/${DOMAIN,,}.conf" | |
a2ensite ${DOMAIN,,} | |
mkdir /var/www/${DOMAIN,,}/log | |
mkdir /var/www/${DOMAIN,,}/web | |
echo "<?php phpinfo(); ?>" > /var/www/${DOMAIN,,}/web/index.php | |
chown $USERNAME:www-data /var/www/${DOMAIN,,}/log | |
chown $USERNAME:www-data /var/www/${DOMAIN,,}/web | |
chown $USERNAME:www-data /var/www/${DOMAIN,,}/web/index.php | |
chown root:root /var/www/${DOMAIN,,} | |
systemctl restart apache2 | |
# Dump | |
echo "{\"email\":\"$EMAIL\",\"domain\":\"${DOMAIN,,}\",\"username\":\"$USERNAME\",\"db\":\"$SQLSTR\",\"dbuser\":\"$SQLSTR\",\"password\":\"$PASSWORD\"}" > host-task-${DOMAIN,,}.json | |
echo -e "\e[38;5;14mDone \e[0m" | |
# SSL | |
echo -e "\e[38;5;14m - SSL certificate and Apache virtual host modify - \e[0m" | |
echo -e " " | |
certbot --authenticator webroot --webroot-path /var/www/${DOMAIN,,}/web --installer apache -d ${DOMAIN,,} -m $EMAIL | |
#certbot --apache -n -d ${DOMAIN,,} -m $EMAIL --keep-until-expiring --agree-tos | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment