Installer libpam-tmpdir (TMPDIR privé par session)
libpam-tmpdir fournit pam_tmpdir.so, un module de session PAM qui crée un répertoire par utilisateur (/tmp/user/<uid>, en 0700) à l'ouverture de session et y fait pointer TMPDIR et TMP. Les utilisateurs cessent ainsi de partager un /tmp inscriptible par tous, ce qui retire le terrain des classiques courses aux liens symboliques et aux noms de fichiers prévisibles entre comptes locaux. Aucune norme ne l'impose : Pavois le porte comme bonne pratique Debian de défense en profondeur, et il ne paie vraiment que sur un hôte à plusieurs utilisateurs humains.
Vérifié sur ce qui est installé ou enregistré, paquets présents/absents, bases de comptes.
Ce que vérifie Pavois
Pavois vérifie la présence de libpam-tmpdir dans l'inventaire dpkg. C'est un contrôle d'état d'inventaire : il prouve que le module est installé, pas qu'il figure dans la pile PAM, ni qu'un processus donné respecte TMPDIR. Sur Debian, le profil pam-auth-update du paquet ajoute normalement session optional pam_tmpdir.so dans /etc/pam.d/common-session, mais une pile reconstruite à la main ou un profil désactivé ensuite passe quand même la règle, alors que chaque session continue d'utiliser le /tmp partagé. Confirmez le TMPDIR effectif sur une nouvelle connexion (voir Vérifier).
describe package('libpam-tmpdir') do
it { should be_installed }
endComment vérifier qu’elle est appliquée
Exécutez dpkg -l libpam-tmpdir et vérifiez que la colonne d'état affiche ii :
ii libpam-tmpdir 0.09+nmu1 amd64 automatically create a private tmp dir for each user
Puis prouvez qu'il est effectif : grep pam_tmpdir /etc/pam.d/common-session doit renvoyer une ligne session optional pam_tmpdir.so, et une nouvelle connexion SSH doit exposer le répertoire privé :
$ echo $TMPDIR
/tmp/user/1000
$ ls -ld /tmp/user/1000
drwx------ 2 alice alice 40 Jul 14 09:12 /tmp/user/1000
Inspecter et investiguer
Aucun journal propre. pam_tmpdir est une bibliothèque appelée dans la pile de session PAM : elle n'écrit aucun fichier et ne produit aucun événement quand elle fonctionne. Seuls ses échecs remontent, sous forme de messages PAM dans /var/log/auth.log (journalctl), par exemple quand le module ne parvient pas à créer le répertoire. Les journaux ne diront jamais si un processus a réellement utilisé le répertoire privé : les seules preuves observables sont l'environnement d'une session vivante (cat /proc/<pid>/environ) et le contenu de /tmp/user/.
Remédiation
Le plan de durcissement Pavois installe le paquet libpam-tmpdir avec le gestionnaire de paquets du système (ressource package, action install). L'activation revient au profil pam-auth-update fourni par le paquet, que Debian et Ubuntu activent à l'installation ; Pavois ne réécrit pas la pile PAM, précisément parce qu'une retouche à cet endroit est le moyen le plus rapide de verrouiller tout le monde hors de l'hôte.
Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :
| action | install |
|---|---|
| name | libpam-tmpdir |
| resource | package |
pavois harden plan localoù la cible est local, un alias SSH user@hôte, ou un conteneur , Docs
Impact & précautions
Sans lui, tous les comptes écrivent dans le même /tmp : le bit sticky empêche un utilisateur d'effacer les fichiers d'un autre, mais il n'empêche pas un utilisateur local hostile de créer à l'avance un nom de fichier prévisible, ou un lien symbolique pointant vers le fichier d'une victime, puis de laisser un programme négligent le suivre. La protection reste néanmoins partielle, et il faut le dire : seuls les processus lancés dans une session PAM héritent de TMPDIR, donc les services système, les tâches cron et tout ce que démarre systemd continuent d'utiliser /tmp, et tout programme au chemin /tmp/... codé en dur ignore purement la variable. Effets de bord à prévoir : les scripts qui supposent que TMPDIR vaut /tmp (ou qu'un fichier temporaire est visible par un autre utilisateur) cassent ; une transition sudo ou su peut transporter le TMPDIR de l'appelant dans l'environnement de la cible si env_reset ne le purge pas, ce qui ferait écrire root dans un répertoire appartenant à un utilisateur ; enfin, si /tmp est un tmpfs, les répertoires par utilisateur consomment ce même budget de taille, limité.