← Toutes les règles
SOCLE-CLD-FSP-088// File ownershipmoyenneétat du système de fichiers

Vérifier le propriétaire du fichier /etc/shells

Garantit que la liste des shells de connexion valides /etc/shells appartient à root (UID 0).

Vérifié sur les métadonnées d’un chemin, mode, propriétaire, groupe, SUID/SGID.

Un PASS prouve✓ actif maintenant✓ sur disque✓ survit au rebootle verdict qualifié →
Debian 12CIS 1.1.0Debian 13CIS 1.0.0FedoraRHEL 10 / Rocky 10 / AlmaLinux 10RHEL 8 / Rocky 8 / AlmaLinux 8CIS 4.0.0RHEL 9 / Rocky 9 / AlmaLinux 9CIS 2.0.0Ubuntu 22.04CIS 3.0.0Ubuntu 24.04CIS 1.0.0Ubuntu 26.04
Un seul check, mappé sur 3 normes

Un mapping est une référence croisée vers l’endroit où chaque norme situe cette exigence, ancrée et recoupée, pas une affirmation d’équivalence. Un check réussi est une preuve vers ces références, comment le lire.

Pourquoi cette règle

Le fichier /etc/shells liste les chemins complets des shells de connexion valides. Il est consulté par des programmes comme chsh, les démons FTP et les services basés sur getusershell() pour décider si un compte a droit à un shell interactif. Si un compte non-root le possède, cet utilisateur pourrait ajouter un binaire arbitraire comme « shell » pour obtenir ou élargir un accès interactif. Définir root (UID 0) comme propriétaire protège cette liste de contrôle d'accès.

Ce que vérifie Pavois

Pavois inspecte le système de fichiers réel via la ressource InSpec file('/etc/shells') et vérifie uid == 0, protégé par only_if afin d'être ignoré si le fichier est absent. Lire le propriétaire réel de l'inode reflète l'état effectif sur le disque et détecte un chown qui permettrait à un utilisateur d'enregistrer un shell non autorisé.

only_if { file('/etc/shells').exist? }
describe file('/etc/shells') do
  its('uid') { should eq 0 }
end

Comment vérifier qu’elle est appliquée

Exécutez stat -c '%U %u %n' /etc/shells. Sortie attendue : root 0 /etc/shells. Le 0 numérique confirme la propriété par root.

Inspecter et investiguer

Surveillez le fichier avec auditctl -w /etc/shells -p wa -k shells et inspectez /var/log/audit/audit.log (grep 'key="shells"'). Les tentatives de changement de shell via chsh sont journalisées par PAM dans /var/log/auth.log / journalctl.

Remédiation

Aucune remédiation automatisée n'est fournie pour cette règle. Appliquez-la manuellement avec chown root /etc/shells (en root ou via sudo) ; le fichier doit rester en groupe root et mode 0644.

Pavois applique ceci avec son propre moteur harden, le plan ci-dessous, pas un script shell :

ownerroot
path/etc/shells
resourcefile
pavois harden plan local

où la cible est local, un alias SSH user@hôte, ou un conteneur , Docs

Impact & précautions

Un propriétaire non-root pourrait enregistrer un binaire arbitraire comme shell de connexion, élargissant l'accès interactif. Risque à l'application : nul, chown root ne change pas la liste des shells ni n'affecte les connexions existantes. Gardez le fichier lisible par tous (0644) pour que les consommateurs de getusershell() fonctionnent toujours.

Mapping des normes

NormeRéférenceTypeVersionConfiance
ANSSI BP-028R50direct2.0haute
CIS7.1.9directper OS, see the benchmark tablehaute
NISTAC-3, MP-2support800-53 Rev 5 · 800-171 Rev 2 (pinned)moyenne

Chaque référence est une référence croisée ancrée dans le benchmark amont et recoupée avec le SCAP Security Guide et ansible-lockdown, pas une affirmation d’équivalence. Direct = une exigence prescriptive au niveau de la ligne ; support = une famille de contrôle abstraite (NIST) vers laquelle le check apporte une preuve. Comment lire un mapping.

Sources & références