web-dev-qa-db-fra.com

Quelle est la différence entre / sbin / nologin et / bin / false

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
185
xenoterracide

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.

212
Mark McKinstry

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.)

29
Mikel

/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.

14
penguin359

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

3
shellter

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.

3
jsbillings

Ils pourraient être le même programme, mais ils ont des significations différentes. Le nom du programme dit tout.

  • / bin/false est destiné à renvoyer une valeur fausse. Il est exécuté en tant que programme.
  • / bin/nologin est destiné à indiquer à l'utilisateur qu'aucune connexion n'est autorisée pour un compte. (Il est utilisé un shell de connexion.)
1
BillThor