|
|
|
@ -0,0 +1,149 @@
|
|
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
# Vérifier si le script est exécuté en root
|
|
|
|
|
if [[ $EUID -ne 0 ]]; then
|
|
|
|
|
echo "Ce script doit être exécuté en tant que root."
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
### Fonction pour mettre à jour le système
|
|
|
|
|
update_system() {
|
|
|
|
|
echo "Mise à jour du système..."
|
|
|
|
|
apt update && apt upgrade -y && sudo apt autoremove -y && command -v flatpak >/dev/null && flatpak update -y
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### Fonction pour installer sudo s'il n'est pas déjà présent
|
|
|
|
|
install_sudo() {
|
|
|
|
|
if command -v sudo &>/dev/null; then
|
|
|
|
|
echo "Sudo est déjà installé."
|
|
|
|
|
else
|
|
|
|
|
echo "Installation de sudo..."
|
|
|
|
|
apt install -y sudo
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### Fonction pour ajouter un utilisateur administrateur
|
|
|
|
|
add_admin_user() {
|
|
|
|
|
# Vérifier s'il existe déjà un utilisateur autre que root
|
|
|
|
|
EXISTING_USER=$(awk -F: '$3 >= 1000 && $3 < 60000 {print $1; exit}' /etc/passwd)
|
|
|
|
|
|
|
|
|
|
if [[ -n "$EXISTING_USER" ]]; then
|
|
|
|
|
echo "Un utilisateur ($EXISTING_USER) existe déjà sur le système."
|
|
|
|
|
read -p "Voulez-vous ajouter un autre utilisateur administrateur ? (o/N) " ADD_NEW_USER
|
|
|
|
|
if [[ ! "$ADD_NEW_USER" =~ ^[Oo]$ ]]; then
|
|
|
|
|
echo "Aucun nouvel utilisateur ajouté."
|
|
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
read -p "Entrez le nom du nouvel utilisateur : " NEW_USER
|
|
|
|
|
|
|
|
|
|
# Vérifier si l'utilisateur existe déjà
|
|
|
|
|
if id "$NEW_USER" &>/dev/null; then
|
|
|
|
|
echo "L'utilisateur $NEW_USER existe déjà."
|
|
|
|
|
else
|
|
|
|
|
adduser "$NEW_USER"
|
|
|
|
|
echo "Utilisateur $NEW_USER créé."
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Vérifier si l'utilisateur est dans le groupe sudo
|
|
|
|
|
if groups "$NEW_USER" | grep -q "\bsudo\b"; then
|
|
|
|
|
echo "$NEW_USER est déjà dans le groupe sudo."
|
|
|
|
|
else
|
|
|
|
|
usermod -aG sudo "$NEW_USER"
|
|
|
|
|
echo "$NEW_USER ajouté au groupe sudo."
|
|
|
|
|
fi
|
|
|
|
|
# Vérifier si les permissions sudo sont déjà définies
|
|
|
|
|
if [ -f "/etc/sudoers.d/$NEW_USER" ]; then
|
|
|
|
|
echo "Les permissions sudo sont déjà configurées pour $NEW_USER."
|
|
|
|
|
else
|
|
|
|
|
echo "$NEW_USER ALL=(ALL) NOPASSWD:ALL" > "/etc/sudoers.d/$NEW_USER"
|
|
|
|
|
chmod 0440 "/etc/sudoers.d/$NEW_USER"
|
|
|
|
|
echo "Configuration sudo appliquée pour $NEW_USER."
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Demander si on veut ajouter une clé SSH
|
|
|
|
|
read -p "Voulez-vous ajouter une clé SSH pour $NEW_USER ? (o/N) " ADD_SSH
|
|
|
|
|
if [[ "$ADD_SSH" =~ ^[Oo]$ ]]; then
|
|
|
|
|
SSH_DIR="/home/$NEW_USER/.ssh"
|
|
|
|
|
AUTH_KEYS="$SSH_DIR/authorized_keys"
|
|
|
|
|
|
|
|
|
|
# Créer le dossier .ssh s'il n'existe pas
|
|
|
|
|
if [ ! -d "$SSH_DIR" ]; then
|
|
|
|
|
mkdir -p "$SSH_DIR"
|
|
|
|
|
chown "$NEW_USER:$NEW_USER" "$SSH_DIR"
|
|
|
|
|
chmod 700 "$SSH_DIR"
|
|
|
|
|
echo "Dossier .ssh créé pour $NEW_USER."
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
read -p "Collez la clé publique SSH : " SSH_KEY
|
|
|
|
|
|
|
|
|
|
# Vérifier si la clé est déjà présente
|
|
|
|
|
if grep -qxF "$SSH_KEY" "$AUTH_KEYS" 2>/dev/null; then
|
|
|
|
|
echo "Cette clé SSH est déjà ajoutée."
|
|
|
|
|
else
|
|
|
|
|
echo "$SSH_KEY" >> "$AUTH_KEYS"
|
|
|
|
|
chown "$NEW_USER:$NEW_USER" "$AUTH_KEYS"
|
|
|
|
|
chmod 600 "$AUTH_KEYS"
|
|
|
|
|
echo "Clé SSH ajoutée pour $NEW_USER."
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "Aucune clé SSH ajoutée."
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### Fonction pour configurer SSH de manière sécurisée
|
|
|
|
|
configure_ssh() {
|
|
|
|
|
if grep -q "^PermitRootLogin no" /etc/ssh/sshd_config; then
|
|
|
|
|
echo "La connexion root SSH est déjà désactivée."
|
|
|
|
|
else
|
|
|
|
|
echo "Désactivation de la connexion root via SSH..."
|
|
|
|
|
sed -i 's/^#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
|
|
|
|
|
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
|
|
|
|
|
systemctl restart ssh
|
|
|
|
|
echo "Sécurisation SSH appliquée."
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### Fonction pour installer et configurer Fail2Ban
|
|
|
|
|
install_fail2ban() {
|
|
|
|
|
if dpkg -l | grep -q "^ii fail2ban"; then
|
|
|
|
|
echo "Fail2Ban est déjà installé."
|
|
|
|
|
else
|
|
|
|
|
echo "Installation de Fail2Ban..."
|
|
|
|
|
apt install -y fail2ban
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### Fonction pour configurer les locales en français UTF-8
|
|
|
|
|
configure_locales() {
|
|
|
|
|
echo "Configuration des locales en français UTF-8..."
|
|
|
|
|
apt install -y locales
|
|
|
|
|
|
|
|
|
|
# Vérifier si fr_FR.UTF-8 est déjà activé
|
|
|
|
|
if locale -a | grep -q "fr_FR.utf8"; then
|
|
|
|
|
echo "Les locales en fr_FR.UTF-8 sont déjà activées."
|
|
|
|
|
else
|
|
|
|
|
sed -i 's/# fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/' /etc/locale.gen
|
|
|
|
|
locale-gen
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Appliquer les variables locales si nécessaire
|
|
|
|
|
if grep -q "LANG=fr_FR.UTF-8" /etc/default/locale; then
|
|
|
|
|
echo "Les variables locales sont déjà configurées."
|
|
|
|
|
else
|
|
|
|
|
update-locale LANG=fr_FR.UTF-8 LANGUAGE=fr_FR.UTF-8 LC_ALL=fr_FR.UTF-8
|
|
|
|
|
echo "Variables locales mises à jour."
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
### SECTION PRINCIPALE : Activer/Désactiver les options ici
|
|
|
|
|
update_system
|
|
|
|
|
install_sudo
|
|
|
|
|
add_admin_user
|
|
|
|
|
configure_ssh
|
|
|
|
|
install_fail2ban
|
|
|
|
|
configure_locales
|
|
|
|
|
|
|
|
|
|
echo "Installation et configuration de base terminées."
|
|
|
|
|
echo "Vous pouvez maintenant vous connecter avec l'utilisateur : $NEW_USER"
|