Techniquement, à moins que pam
ne soit configuré pour vérifier votre shell avec pam_shells
aucun de ces éléments ne peut réellement empêcher votre connexion, si vous n'êtes pas sur le Shell. Sur mon système, ils sont même de tailles différentes, donc je pense qu'ils font vraiment quelque chose. Alors quelle est la différence? pourquoi existent-ils tous les deux? Pourquoi devrais-je utiliser l'un sur l'autre?
-rwxr-xr-x 1 root root 21K Feb 4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar 2 14:59 /sbin/nologin
Quand /sbin/nologin
est défini comme Shell, si l'utilisateur avec ce Shell se connecte, il recevra un message poli disant "Ce compte n'est pas disponible actuellement." Ce message peut être modifié avec le fichier /etc/nologin.txt
.
/bin/false
est juste un binaire qui se ferme immédiatement, renvoyant false, quand il est appelé, donc quand quelqu'un qui a false
comme Shell se connecte, il est immédiatement déconnecté quand false
se ferme. Définition du shell sur /bin/true
a le même effet de ne pas permettre à quelqu'un de se connecter mais false
est probablement utilisé comme convention sur true
car il est bien mieux de transmettre le concept que la personne n'a pas de Shell.
En regardant la page de manuel de nologin
, il est dit qu'elle a été créée en 4.4 BSD (début des années 1990) donc elle est apparue longtemps après la création de false
. L'utilisation de false
en tant que shell n'est probablement qu'une convention reportée des premiers jours d'UNIX.
nologin
est l'option la plus conviviale, avec un message personnalisable donné à l'utilisateur essayant de se connecter, donc vous voudriez théoriquement l'utiliser; mais nologin
et false
auront le même résultat final si quelqu'un n'a pas de shell et ne peut pas ssh.
Certains serveurs FTP vous autorisent à accéder FTP uniquement si vous disposez d'un shell valide. /sbin/nologin
est considéré comme un shell valide, tandis que /bin/false
n'est pas.
(Je pense que "valide" signifie que son état de sortie est 0, mais /etc/shells
peut également y entrer, cela dépend probablement du système, du logiciel FTP et de votre configuration.)
/bin/false
est une commande système qui est utilisée chaque fois que vous devez passer une commande à un programme qui ne doit rien faire de plus que quitter avec une erreur. C'est le compagnon de /bin/true
. Les deux sont des utilitaires POSIX très anciens et standard et ne produisent aucun résultat par définition. true est parfois utilisé pour un script Shell qui devrait boucler indéfiniment, comme:
while true; do
...
# Waste time
if [ $wasted_time -gt 100000 ]; then
exit 0
fi
...
done
/usr/sbin/nologin
est spécialement conçu pour remplacer un shell et produit une sortie se plaignant que vous ne pouvez pas vous connecter. Avant son existence, il était courant d'utiliser /bin/false
pour les utilisateurs fictifs, mais cela peut prêter à confusion car l'utilisateur ne sait pas pourquoi ils sont lancés.
Sur ma machine, nologin
affiche toujours le même message, en anglais, en ignorant les arguments. /bin/false
répond à --version
et --help
dans la langue indiquée par $LC_CTYPE
. Outre ces différences cosmétiques, elles ont le même effet.
Côté utilisation, nologin
est mieux s'il est utilisé pour le compte d'une personne réelle qui parle anglais. Côté sécurité, il n'y a pas de différence.
/ bin/false seule tâche consiste à quitter avec un code de sortie différent de zéro.
Essayez-le en ligne de commande:
$:> /bin/false
$:> echo $?
1
$:>
Certaines institutions utilisent/bin/false dans le champ Shell du fichier de mots de passe. Si l'utilisateur essaie de se connecter, le shell est/bin/false, donc ils sont fermés immédiatement
Sous linux, /sbin/nologin
provient du projet til-linux , tandis que /bin/false
fait partie de GNU Coreutils . Ils remplissent différents rôles, et nologin a la possibilité d'imprimer un message pour les personnes qui l'ont comme Shell qui se connectent. Les commandes Linux viennent de BSD, où elles semblent avoir une longue histoire d'être différentes. Le FreeBSD false
renvoie simplement 1 , tandis que le nologin
vérifie qu'il est bien exécuté sur un TTY et envoie un message à syslog lors des tentatives de connexion. Les versions linux sont un peu plus compliquées (false
faisant toutes sortes de choses amusantes avec l'internationalisation pour la sortie de --help, je suppose) mais fonctionnent essentiellement de la même manière.
Ils pourraient être le même programme, mais ils ont des significations différentes. Le nom du programme dit tout.