Créer une session invité sans historique

Méthode 1 : avec l’interface graphique de Linux

session invite sans historique

Méthode 2 : avec un script

#!/bin/bash

USER="invite"
HOME_DIR="/home/$USER"
SKEL_DIR="/etc/skel-invite"
RESET_SCRIPT="/usr/local/bin/reset-invite.sh"
SERVICE_FILE="/etc/systemd/system/reset-invite.service"

echo "🔧 Création de l'utilisateur '$USER'..."
if id "$USER" &>/dev/null; then
echo "✅ Utilisateur déjà existant"
else
sudo adduser --disabled-password --gecos "" "$USER"
fi

echo "🔒 Interdiction du terminal pour '$USER'"
sudo usermod -s /usr/sbin/nologin "$USER"

echo "📁 Création de la structure modèle de réinitialisation"
sudo rm -rf "$SKEL_DIR"
sudo cp -r "$HOME_DIR" "$SKEL_DIR"
sudo chown -R root:root "$SKEL_DIR"

echo "🧼 Nettoyage du menu (Firefox + LibreOffice + Fichiers uniquement)"
sudo mkdir -p "$SKEL_DIR/.local/share/applications"
sudo cp /usr/share/applications/firefox.desktop "$SKEL_DIR/.local/share/applications/"
sudo cp /usr/share/applications/libreoffice-*.desktop "$SKEL_DIR/.local/share/applications/"
sudo cp /usr/share/applications/nemo.desktop "$SKEL_DIR/.local/share/applications/"

echo "🔧 Installation de bubblewrap pour isoler Nemo"
sudo apt update && sudo apt install -y bubblewrap

echo "📦 Création du lanceur Nemo sécurisé"
sudo tee /usr/local/bin/nemo-safe.sh > /dev/null <<'EOF'
#!/bin/bash
bwrap \
--ro-bind /usr /usr \
--ro-bind /bin /bin \
--ro-bind /lib /lib \
--ro-bind /lib64 /lib64 \
--bind /home/invite /home/invite \
--bind /media /media \
--dev /dev \
--proc /proc \
--tmpfs /tmp \
--unshare-user --unshare-pid --unshare-net \
--setenv HOME /home/invite \
--setenv DISPLAY "$DISPLAY" \
--setenv XAUTHORITY "$XAUTHORITY" \
nemo
EOF

sudo chmod +x /usr/local/bin/nemo-safe.sh

echo "📝 Modification du raccourci Nemo pour utiliser le lanceur sécurisé"
sudo sed -i 's|^Exec=.*|Exec=/usr/local/bin/nemo-safe.sh|' "$SKEL_DIR/.local/share/applications/nemo.desktop"
sudo sed -i 's|^NoDisplay=.*|NoDisplay=false|' "$SKEL_DIR/.local/share/applications/nemo.desktop"

echo "🛠️ Création du script de réinitialisation de session"
sudo tee "$RESET_SCRIPT" > /dev/null <<EOF
#!/bin/bash
USER="$USER"
HOME_DIR="/home/\$USER"
SKEL_DIR="$SKEL_DIR"

if who | grep -q "^\$USER "; then
echo "\$(date): \$USER est connecté, réinitialisation annulée." >> /var/log/reset-invite.log
exit 1
fi

echo "\$(date): Réinitialisation de /home/\$USER..." >> /var/log/reset-invite.log
rm -rf "\$HOME_DIR"
cp -r "\$SKEL_DIR" "\$HOME_DIR"
chown -R "\$USER:\$USER" "\$HOME_DIR"
EOF

sudo chmod +x "$RESET_SCRIPT"

echo "🧩 Création du service systemd de réinitialisation"
sudo tee "$SERVICE_FILE" > /dev/null <<EOF
[Unit]
Description=Réinitialisation du home de l'utilisateur invite
After=multi-user.target

[Service]
Type=oneshot
ExecStart=$RESET_SCRIPT

[Install]
WantedBy=multi-user.target
EOF

echo "🚀 Activation du service systemd"
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable reset-invite.service

echo ""
echo "✅ CONFIGURATION TERMINÉE"
echo "➡️ L'utilisateur 'invite' est restreint à Firefox, LibreOffice et un gestionnaire de fichiers isolé."
echo "♻️ Son /home est restauré à chaque redémarrage."
chmod +x setup-session-invite.sh
sudo ./setup-session-invite.sh