Script Tools

Lo script esegue un menu per scegliere l'utilizzo di alcuni script, tra cui:

  • Generazione di un ambiente LAMP
  • Generazione di un ambiente LEMP (MANCA MYSQL)
  • Generazione di un sito in un ambiente LAMP
  • Imposta i corretti permessi per un sito Wordpress
Bash
#!/bin/bash

# ==================================================
# Funzione per creare la LAMP (Linux, Apache, MySQL, PHP)
# ==================================================
crea_lamp() {
# Esci se lo script non viene eseguito come root
if [ "$EUID" -ne 0 ]; then
echo "Devi eseguire lo script come root"
exit 1
fi
# Aggiorna il sistema
apt update

# APACHE
# Verifica se Apache è già installato, se non lo è installalo
if ! [ -x "$(command -v apache2)" ]; then
    apt install apache2 -y
    # Abilita Apache nel firewall
    ufw allow in "Apache"
        # Abilita mod_rewrite
        sudo a2enmod rewrite
        sudo systemctl restart apache2
fi

# MYSQL
# Verifica se MySQL è già installato, se non lo è installalo
if ! [ -x "$(command -v mysql)" ]; then
    apt install mysql-server -y
    # Richiedi all'utente di inserire la nuova password
    read -s -p "Inserisci la password per l'utente root di MySQL: " new_password
    echo
    # Esegui il comando ALTER USER all'interno di MySQL
    mysql -u root -p -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$new_password';"
    # Esegui mysql_secure_installation con sudo utilizzando la password indicata precedentemente
    mysql_secure_installation <<EOF
    $new_password
    n
    y
    y
    y
    y
EOF
fi

# PHP
# Verifica se PHP è già installato
if [ -x "$(command -v php)" ]; then
php_version=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
echo "PHP versione $php_version già installata."
else
apt install php libapache2-mod-php php-mysql -y
php_version=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
echo "PHP versione $php_version installata."
fi

# Installa i pacchetti aggiuntivi in base alla versione di PHP
if [[ $php_version == "8.1" ]]; then
apt install php8.1-curl php8.1-xml php8.1-imagick php8.1-mbstring php8.1-zip php8.1-intl php-fdomdocument php8.1-gd php8.1-intl -y
elif [[ $php_version == "8.0" ]]; then
apt install php8.0-curl php8.0-xml php8.0-imagick php8.0-mbstring php8.0-zip php8.0-intl php-fdomdocument php8.0-gd php8.0-intl -y
elif [[ $php_version == "7.4" ]]; then
apt install php7.4-curl php7.4-xml php7.4-imagick php7.4-mbstring php7.4-zip php7.4-intl php-fdomdocument php7.4-gd php7.4-intl -y
else
echo "Versione di PHP non supportata. Installa manualmente i pacchetti aggiuntivi corrispondenti."
fi

# Da installare:
# apt install php8.1-curl php-fdomdocument php8.1-imagick php8.1-mbstring php8.1-zip php8.1-gd php8.1-intl

# HISTORY
# Rendi persistente history
if ! grep -q "HISTFILE" /etc/environment; then
echo "HISTFILE=/home/$USER/.bash_history" | sudo tee -a /etc/environment
fi

# WWW-DATA
# Ottieni l'utente che ha eseguito il comando sudo
#sudo_user=$SUDO_USER
# Aggiungi l'utente che ha eseguito il comando sudo al gruppo www-data
#usermod -a -G www-data $sudo_user && exec "$SHELL"
# Aggiungi l'utente corrente anche al gruppo www-data nel caso in cui www-data sia un gruppo primario
#usermod -a -G www-data -a $sudo_user && exec "$SHELL"
}

# ==================================================
# Funzione per creare il sito su ambiente LAMP
# ==================================================
crea_sito_lamp() {
if [ "$EUID" -ne 0 ]
then
    echo "Per favore, esegui questo script come root"
    exit
fi

echo "Inserisci il nome del dominio (esempio.com):"
read -p "Dominio: " domain

echo "Inserisci il nome del database (esempio_db):"
read -p "Nome del database: " database

echo "Inserisci le credenziali dell'utente del database (esempio_user):"
read -p "Nome utente: " db_user

echo "Inserisci la password per l'utente del database:"
read -p "Password: " db_password

echo "Inserisci la password ROOT per il database:"
read -p "Password: " db_root_password

sudo tee /etc/apache2/sites-available/$domain.conf <<EOF
<VirtualHost *:80>
    ServerName $domain
    DocumentRoot /var/www/$domain
    CustomLog /var/log/apache2/$domain-access.log combined
    ErrorLog /var/log/apache2/$domain-error.log
    <Directory /var/www/$domain>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
EOF
sudo a2ensite $domain.conf
sudo mkdir -p /var/www/$domain
sudo chown -R www-data:www-data /var/www/$domain
#sudo chmod -R 777 /var/www/$domain
sudo chmod -R g+rw /var/www/$domain
sudo service apache2 restart

# Creazione del database MariaDB
sudo mysql -uroot -p$db_root_password <<EOF
CREATE DATABASE $database;
CREATE USER '$db_user'@'localhost' IDENTIFIED BY '$db_password';
GRANT ALL PRIVILEGES ON $database.* TO '$db_user'@'localhost';
FLUSH PRIVILEGES;
EOF

echo "127.0.0.1 $domain" >> /etc/hosts
sudo systemctl restart cloudflared
echo "Virtual host e database creati con successo!"
}

# ==================================================
# Funzione per impostare i permessi
# ==================================================
imposta_permessi() {
if [ "$EUID" -ne 0 ]; then
  echo "Per favore, esegui questo script come root"
  exit
fi

echo "Inserisci il nome del dominio per cui vuoi settare i permessi (esempio.com oppure sub.esempio.com):"
read -p "Dominio: " domain

# domain=letsengim/wordpress

WP_OWNER=www-data # <-- wordpress owner
WP_GROUP=www-data # <-- wordpress group
WP_ROOT=/var/www/$domain/wordpress # <-- wordpress root directory
WS_GROUP=www-data # <-- webserver group

# reset to safe defaults
find ${WP_ROOT} -exec chown ${WP_OWNER}:${WP_GROUP} {} \;
find ${WP_ROOT} -type d -exec chmod 755 {} \;
find ${WP_ROOT} -type f -exec chmod 644 {} \;

# allow wordpress to manage wp-config.php (but prevent world access)
chgrp ${WS_GROUP} ${WP_ROOT}/wp-config.php
chmod 640 ${WP_ROOT}/wp-config.php # Impostato a 640 per limitare i permessi

# allow wordpress to manage .htaccess
touch ${WP_ROOT}/.htaccess
chgrp ${WS_GROUP} ${WP_ROOT}/.htaccess
chmod 644 ${WP_ROOT}/.htaccess # Impostato a 644 per limitare i permessi

# allow wordpress to manage wp-content
find ${WP_ROOT}/wp-content -exec chown -R ${WP_OWNER}:${WS_GROUP} {} \; # Modificato il gruppo a WS_GROUP per wp-content
find ${WP_ROOT}/wp-content -type d -exec chmod 775 {} \;
find ${WP_ROOT}/wp-content -type f -exec chmod 664 {} \;

### ESITO ###

echo "I permessi sono stati impostati correttamente"
}

# Menu principale
echo "Scegli cosa vuoi fare:"
echo "1. Creare un ambiente LAMP"
echo "2. Creare un sito su LAMP"
echo "3. Imposta i permessi"
echo "4. Uscire"

read -p "Scelta: " scelta

case $scelta in
    1)
        crea_lamp
        ;;
    2)
        crea_sito_lamp
        ;;
    3)
        imposta_permessi
        ;;
    4)
        echo "Uscita dallo script."
        exit 0
        ;;
    *)
        echo "Scelta non valida. Uscita dallo script."
        exit 1
        ;;
esac