#!/bin/bash
set -e

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage: $0 <nom_utilisateur> <clé_publique_ssh>"
    exit 1
fi

NEWUSER="$1"
PUBKEY="$2"

adduser --disabled-password --gecos "" "$NEWUSER"
usermod -aG sudo "$NEWUSER"

# Mot de passe uniquement pour confirmer les commandes sudo en local.
# SSH reste strictement par clé (PasswordAuthentication no plus bas).
SUDO_PASSWORD=$(openssl rand -base64 24)
echo "$NEWUSER:$SUDO_PASSWORD" | chpasswd

mkdir -p "/home/$NEWUSER/.ssh"
echo "$PUBKEY" > "/home/$NEWUSER/.ssh/authorized_keys"
chown -R "$NEWUSER:$NEWUSER" "/home/$NEWUSER/.ssh"
chmod 700 "/home/$NEWUSER/.ssh"
chmod 600 "/home/$NEWUSER/.ssh/authorized_keys"

apt update
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw limit OpenSSH
ufw --force enable

sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/^#\?UseDNS.*/UseDNS no/' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd

# Évite un délai de connexion de ~2 min sur certains conteneurs (Jelastic/LXC)
# où pam_systemd attend en vain une réponse D-Bus de systemd-logind.
sed -i 's/^session\s*optional\s*pam_systemd.so/# &/' /etc/pam.d/common-session

echo "Setup terminé pour l'utilisateur $NEWUSER."
echo "Mot de passe sudo (à noter maintenant, jamais réaffiché) : $SUDO_PASSWORD"
echo "Teste une connexion SSH par clé avant de fermer cette session."

# Fin