Ce script Bash permet d’automatiser plusieurs tâches essentielles pour la configuration et la sécurisation d’un serveur Linux. Il s'assure que l'utilisateur exécutant le script est root, met en place une configuration réseau statique, régénère les certificats SSH, modifie les mots de passe des utilisateurs spécifiés et effectue un nettoyage du système avant de le redémarrer.
/etc/network/interfaces et /etc/resolv.confTéléchargez et exécutez le script avec les commandes suivantes :
chmod +x confserv.sh sudo ./confserv.sh
Suivez les instructions fournies par le script pour entrer les informations réseau et autres configurations requises. À la fin, le système redémarrera automatiquement.
Le script s'assure qu'il est exécuté en tant que root avant de poursuivre.
if [ "$EUID" -ne 0 ]; then echo "Ce script doit être exécuté en tant que root." exit 1 fi
Une fonction validate_ip() permet de s’assurer que les entrées de l’utilisateur sont bien des adresses IP valides.
validate_ip() { local ip=$1 local IFS=. local -a octets=($ip) if [[ ${#octets[@]} -ne 4 ]]; then return 1 fi for octet in "${octets[@]}"; do if ! [[ "$octet" =~ ^[0-9]+$ ]]; then return 1 fi if ((octet < 0 || octet > 255)); then return 1 fi done return 0 }
Le script supprime et recrée les certificats SSH pour renforcer la sécurité.
systemctl stop ssh rm -f /etc/ssh/ssh_host_* ssh-keygen -A systemctl restart ssh
L'utilisateur doit fournir une adresse IP, un masque de sous-réseau, une passerelle et des serveurs DNS.
Le fichier /etc/network/interfaces est mis à jour en conséquence.
cat > /etc/network/interfaces <<EOF auto $NET_INTERFACE iface $NET_INTERFACE inet static address $IP_ADDR netmask $NETMASK gateway $GATEWAY dns-nameservers $DNS1 $DNS2 $DNS3 dns-search $DOMAIN EOF
Le nouveau nom de la machine est défini dans /etc/hostname.
echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME"
Le script demande un nouveau mot de passe pour les utilisateurs root et npoirier.
echo "$user:$PASS1" | chpasswd
Tous les logs et fichiers temporaires sont supprimés avant le redémarrage du serveur.
rm -rf /var/log/* rm -rf /var/cache/apt/* reboot
#!/bin/bash # Vérifier si le script est exécuté en tant que root if [ "$EUID" -ne 0 ]; then echo "Ce script doit être exécuté en tant que root." exit 1 fi # Fonction pour valider une adresse IP validate_ip() { local ip=$1 local IFS=. local -a octets=($ip) if [[ ${#octets[@]} -ne 4 ]]; then return 1 fi for octet in "${octets[@]}"; do if ! [[ "$octet" =~ ^[0-9]+$ ]]; then return 1 fi if ((octet < 0 || octet > 255)); then return 1 fi done return 0 } # Régénération des certificats SSH echo "Régénération des certificats SSH..." systemctl stop ssh rm -f /etc/ssh/ssh_host_* ssh-keygen -A systemctl restart ssh # Liste des interfaces réseau echo "Liste des interfaces réseau disponibles:" ip -o link show | awk -F': ' '{print $2}' read -p "Choisissez une interface réseau: " NET_INTERFACE # Configuration réseau echo "Configuration des paramètres réseau en mode fixe" while true; do read -p "Adresse IP: " IP_ADDR if validate_ip "$IP_ADDR"; then break; fi echo "Adresse IP invalide, veuillez entrer une adresse valide (ex: 192.168.1.100)." done while true; do read -p "Masque de sous-réseau: " NETMASK if validate_ip "$NETMASK"; then break; fi echo "Masque de sous-réseau invalide, veuillez entrer une valeur correcte (ex: 255.255.255.0)." done while true; do read -p "Passerelle: " GATEWAY if validate_ip "$GATEWAY"; then break; fi echo "Passerelle invalide, veuillez entrer une adresse valide (ex: 192.168.1.1)." done read -p "Domaine: " DOMAIN while true; do read -p "Serveur DNS 1: " DNS1 if validate_ip "$DNS1"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 8.8.8.8)." done while true; do read -p "Serveur DNS 2: " DNS2 if validate_ip "$DNS2"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 8.8.4.4)." done while true; do read -p "Serveur DNS 3: " DNS3 if validate_ip "$DNS3"; then break; fi echo "Serveur DNS invalide, veuillez entrer une adresse valide (ex: 1.1.1.1)." done cat > /etc/network/interfaces <<EOF auto $NET_INTERFACE iface $NET_INTERFACE inet static address $IP_ADDR netmask $NETMASK gateway $GATEWAY dns-nameservers $DNS1 $DNS2 $DNS3 dns-search $DOMAIN EOF echo -e "nameserver $DNS1\nnameserver $DNS2\nnameserver $DNS3" > /etc/resolv.conf # Demande du nouveau nom d'hôte read -p "Nouveau nom de la machine: " NEW_HOSTNAME echo "$NEW_HOSTNAME" > /etc/hostname hostnamectl set-hostname "$NEW_HOSTNAME" # Modification des mots de passe echo "Modification des mots de passe" for user in root npoirier; do while true; do read -s -p "Nouveau mot de passe pour $user: " PASS1 echo read -s -p "Confirmez le mot de passe pour $user: " PASS2 echo if [ "$PASS1" == "$PASS2" ]; then echo "$user:$PASS1" | chpasswd break else echo "Les mots de passe ne correspondent pas. Veuillez réessayer." fi done done # Proposition de suppression du script read -p "Voulez-vous supprimer ce script après exécution ? (o/n): " DELETE_SCRIPT if [[ "$DELETE_SCRIPT" =~ ^[Oo]$ ]]; then rm -- "$0" fi # Nettoyage du système echo "Nettoyage du système..." history -c find /home -name .bash_history -type f -exec rm -f {} \; rm -f /root/.bash_history rm -rf /tmp/* rm -rf /var/tmp/* rm -rf /var/log/* rm -rf /var/cache/apt/* # Redémarrage du système echo "Redémarrage du système en cours..." sleep 3 reboot