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 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 }
endComment 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 :
| owner | root |
|---|---|
| path | /etc/shells |
| resource | file |
pavois harden plan localoù 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
| Norme | Référence | Type | Version | Confiance |
|---|---|---|---|---|
| ANSSI BP-028 | R50 | direct | 2.0 | haute |
| CIS | 7.1.9 | direct | per OS, see the benchmark table | haute |
| NIST | AC-3, MP-2 | support | 800-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.