J'ai souvent entendu dire qu'il était recommandé de désactiver un compte d'utilisateur en définissant son shell sur /bin/false
. Mais, sur mes systèmes Linux existants, je constate qu’un grand nombre de comptes existants (tous des comptes de service) ont à la place un shell /sbin/nologin
.
La page de manuel /sbin/nologin
affiche un message indiquant à l'utilisateur que le compte est désactivé, puis se ferme. Vraisemblablement /bin/false
n'imprimerais rien.
Je vois aussi que cela /sbin/nologin
est répertorié dans /etc/shells
, alors que /bin/false
non.
La page de manuel indique que FTP désactivera l’accès des utilisateurs dont le shell n’est pas répertorié /etc/shells
et implique que d’autres programmes peuvent faire de même. Est-ce que cela signifie que quelqu'un pourrait utiliser FTP avec un compte qui a /sbin/nologin
pour shell?
Quelle est la différence ici? Lequel de ces devrais-je utiliser pour désactiver un compte d'utilisateur et dans quelles circonstances? Quels sont les autres effets d'une liste dans /etc/shells
?
Réponses:
/bin/false
est un programme utilitaire, associé à/bin/true
, qui est utile dans un sens abstrait pour s'assurer que Unix est complet. Cependant, des objectifs émergents pour ces programmes ont été trouvés; considérons l'instruction BASH/some/program || /bin/true
, qui sera toujours booléenne-évaluer comme vraie ($? = 0
), peu importe le retour de/some/program
./bin/false
Comme vous l'avez indiqué, une utilisation émergente correspond à un shell null pour les utilisateurs non autorisés à se connecter. Dans ce cas, le système se comportera exactement comme si l'exécution du shell avait échoué.POSIX (bien que je puisse me tromper et qu'il se peut que le SUS) contraigne ces deux commandes à ne rien faire d’autre que de renvoyer la valeur booléenne appropriée.
/sbin/nologin
est un utilitaire BSD qui a un comportement similaire à/bin/false
(renvoie boolean false), mais affiche également la sortie, comme il/bin/false
est interdit de le faire. Ceci est supposé aider l'utilisateur à comprendre ce qui s'est passé, bien qu'en pratique, de nombreux émulateurs de terminal se ferment simplement lorsque le shell se termine, rendant le message presque illisible dans certains cas.Il y a peu de but à la liste
/sbin/nologin
en/etc/shells
. L’effet standard de/etc/shells
est de répertorier les programmes pouvant être utiliséschsh
lorsque les utilisateurs changent leur propre shell (et il n’existe aucune raison valable de changer votre propre shell en/sbin/nologin
). Le superutilisateur peut changer la coquille de n'importe qui. Cependant, vous voudrez peut-être lister les deux/sbin/nologin
et/bin/false
in/etc/rsh
, ce qui empêchera les utilisateurs de ces shells de changer de shell en utilisant,chsh
dans le cas malheureux, l'obtention d'un shell.Les démons FTP peuvent interdire l'accès aux utilisateurs dont le shell n'est pas dans / etc / shells, ou utiliser toute autre logique de leur choix. L'exécution de FTP est à éviter dans tous les cas car
sftp
(qui offre une fonctionnalité similaire) est similaire mais sécurisée. Certains sites utilisent/sbin/nologin
pour désactiver l' accès au shell tout en permettant un accès sftp en le mettant dans/etc/shells
. Cela peut ouvrir une porte dérobée si l'utilisateur est autorisé à créer des tâches cron.Dans les deux cas,
scp
ne fonctionnera pas avec un shell non valide.scponly
peut être utilisé comme un shell dans ce cas.De plus, le choix du shell affecte le fonctionnement de
su -
(AKAsu -l
). En particulier, la sortie de/sbin/nologin
sera imprimée sur stdout s'il s'agit de la coque; cela ne peut pas être le cas avec/bin/false
. Dans les deux cas, les commandes exécutées avecsu -cl
vont échouer.Enfin, la réponse:
Pour désactiver un compte, ne dépendez d’aucun d’eux, mais définissez le shell sur
/sbin/nologin
à des fins d’information (à moins qu’il ne/sbin/nologin
soit entré/etc/shells
, vous devez alors utiliser/bin/false
ce qui ne devrait pas être le cas). Au lieu de cela, définissez le champ de mot de passe/etc/passwd
pour!
, qui est garanti parcrypt
être valable pour aucun mot de passe. Envisagez de définir le hachage de/etc/shadow
la même manière pour éviter les bugs.passwd -l
fera cela pour vous.Un troisième moyen de désactiver un compte consiste à définir le champ de date d'expiration du compte sur une date ancienne (par exemple
usermod --expiredate 1
). Cela empêchera les connexions si votre configuration permet aux utilisateurs de s'authentifier auprès de leur compte unix sans mot de passe et si le service utilisé ne nécessite pas de shell.la source
titantools
paquet:noshell
. Ce pseudo-shell fournit des fonctionnalités d'audit. La journalisation sur syslog tente d'utiliser des comptes avecnoshell
son shell, tout en interdisant l'accès./bin/false
comme shell de connexion pour les personnes qui ne devraient pas se connecter.Après avoir fait quelques recherches à ce sujet, la méthode que vous utilisez dépend de ce que vous devez verrouiller. Si un utilisateur se connecte avec cet ensemble sur le shell, un message s'affichera indiquant
This account is currently unavailable.
que vous pouvez le modifier en créant le fichier/etc/nologin.txt
au moins sur les dérivés RHEL.Comme vous le savez, ce
/bin/false
n’est pas une coquille. Leur façon de fonctionner est qu’elle renvoie false qui se déconnecte immédiatement après la sortie du fichier binaire. Notez que cela/bin/true
produirait le même effet.En ce qui concerne votre question FTP: Oui, vous avez raison dans ce que la coquille ayant mis à
/sbin/nologin
permettra aux utilisateurs de se connecter à FTP tout/bin/false
ou/bin/true
empêche complètement l'utilisateur de se connecter à tout service.Par conséquent,
/bin/false
ou/bin/true
est préférable d'empêcher un utilisateur de se connecter à un service, tout/sbin/nologin
va encore permettre aux utilisateurs de se connecter à des services autres que SSH ou console locale tout en fournissant des informations à l'utilisateur que le compte est inactif et est le plus utilisé lorsque que SSH / local la console doit être verrouillée.la source
Euh, est-ce que quelqu'un a essayé de prouver que / bin / false interdirait l'accès FTP?
Je viens de changer le shell de mon utilisateur en / bin / false et je pouvais utiliser le protocole FTP.
Je / dev / null pour complètement verrouiller l'utilisateur (bien, sauf courrier électronique, ils peuvent encore POP3).
la source
/etc/shells
? Comment votre serveur FTP est-il configuré?