#!
/bin/bash
# SCRIPT: securite.sh - Apply comprehensive security policies
# Must be run as root
if [[ $EUID -ne 0 ]]; then
echo "Error: This script must be run as root." >&2
exit 1
fi
# Log file
rapport="/var/log/rapport_securite.txt"
# Ensure log file is writable
touch "$rapport" 2>/dev/null || {
echo "Error: Cannot write to $rapport. Check permissions." >&2
exit 1
}
# Initialize log file
echo "==============================" > "$rapport"
echo "RAPPORT DE SÉCURITÉ - $(date)" >> "$rapport"
echo "==============================" >> "$rapport"
echo "🔐 Application des politiques de sécurité..."
# 1. Install and enable AppArmor
echo "➡️ Installation et activation d'AppArmor..." | tee -a "$rapport"
apt update && apt install -y apparmor apparmor-profiles
systemctl enable apparmor >/dev/null 2>&1
systemctl start apparmor >/dev/null 2>&1
aa-enforce /etc/apparmor.d/* 2>/dev/null
echo "✅ AppArmor activé et appliqué." >> "$rapport"
# 2. Secure SSH
echo "➡️ Sécurisation du service SSH..." | tee -a "$rapport"
apt install -y openssh-server
sed -i 's/^#*PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#*Port .*/Port 2222/' /etc/ssh/sshd_config
if ! grep -q '^UseDNS no' /etc/ssh/sshd_config; then
echo 'UseDNS no' >> /etc/ssh/sshd_config
fi
systemctl restart sshd >/dev/null 2>&1
systemctl enable sshd >/dev/null 2>&1
echo "✅ SSH configuré : root interdit, port 2222." >> "$rapport"
# 3. Configure UFW firewall
echo "➡️ Configuration du pare-feu UFW..." | tee -a "$rapport"
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp
ufw --force enable
echo "✅ UFW configuré avec règles par défaut et port SSH ouvert." >> "$rapport"
# 4. Apply secure umask
echo "➡️ Application du umask de sécurité (umask 077)..." | tee -a "$rapport"
if ! grep -q "umask 077" /etc/profile; then
echo "umask 077" >> /etc/profile
fi
echo "✅ umask 077 appliqué." >> "$rapport"
# 5. Create secure group directory
echo "➡️ Création d'un répertoire partagé pour un groupe..." | tee -a "$rapport"
groupadd -f groupe # Create group if it doesn't exist
useradd -m -s /bin/bash -G groupe chef_de_groupe 2>/dev/null || true
mkdir -p /partage/repertoire_du_groupe
chown chef_de_groupe:groupe /partage/repertoire_du_groupe
chmod g+s /partage/repertoire_du_groupe
chmod 750 /partage/repertoire_du_groupe
echo "✅ Répertoire partagé /partage/repertoire_du_groupe créé et sécurisé." >>
"$rapport"
# 6. Set password policy (INACTIVE=30)
echo "➡️ Configuration de l'inactivité maximale des comptes utilisateurs (30
jours)..." | tee -a "$rapport"
if ! grep -q '^INACTIVE=30' /etc/default/useradd; then
sed -i 's/^INACTIVE.*/INACTIVE=30/' /etc/default/useradd || echo "INACTIVE=30"
>> /etc/default/useradd
fi
echo "✅ Comptes inactifs verrouillés après 30 jours." >> "$rapport"
# 7. Create secure backup directory
echo "➡️ Création du dossier de backup..." | tee -a "$rapport"
mkdir -p /backup
chown root:root /backup
chmod 700 /backup
echo "✅ Répertoire /backup créé avec permissions strictes." >> "$rapport"
# 8. Schedule automatic backup with rsync
echo "➡️ Mise en place de la sauvegarde quotidienne avec rsync..." | tee -a
"$rapport"
(crontab -l 2>/dev/null; echo "0 2 * * * rsync -av --delete /home /backup") |
crontab -
echo "✅ Tâche crontab ajoutée pour sauvegarde quotidienne à 2h." >> "$rapport"
# 9. Install and configure Fail2Ban
echo "➡️ Installation et configuration de Fail2Ban..." | tee -a "$rapport"
apt install -y fail2ban
cat > /etc/fail2ban/jail.local <<EOF
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m
EOF
systemctl enable fail2ban >/dev/null 2>&1
systemctl restart fail2ban >/dev/null 2>&1
echo "✅ Fail2Ban installé et configuré pour SSH." >> "$rapport"
# 10. Configure PAM for account lockout
echo "➡️ Configuration du verrouillage PAM..." | tee -a "$rapport"
if ! grep -q 'pam_tally2.so' /etc/pam.d/common-auth; then
echo 'auth required pam_tally2.so onerr=fail deny=5 unlock_time=900' >>
/etc/pam.d/common-auth
fi
echo "✅ PAM verrouillage après 5 échecs activé." >> "$rapport"
# Finalize report
cat >> "$rapport" <<EOF
- 🔐 AppArmor en mode enforcement
- 🔒 Port SSH personnalisé (2222), login root désactivé
- 🔐 Politique Fail2Ban active (3 essais, 1h de ban)
- 🔒 Répertoires de groupe sécurisés avec setgid
- 🔁 Sauvegarde automatique de /home chaque nuit
- 🕒 Comptes inactifs verrouillés après 30 jours
- 🔐 Verrouillage PAM après 5 tentatives échouées
- 🔐 umask de sécurité appliqué globalement
✅ Rapport généré avec succès dans : $rapport
EOF
echo "✅ Security policies applied. Report generated at $rapport."