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


170

Techniquement, si rien pamn'est configuré pour vérifier votre shell, pam_shellsaucun de ceux-ci ne peut réellement empêcher votre connexion, si vous n'êtes pas sur le shell. Sur mon système, ils ont même des tailles différentes, alors je suppose qu'ils font réellement quelque chose. Alors quelle est la différence? Pourquoi les deux existent-ils? 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


Le chemin /bin/falsedoit exister partout mais pas /sbin/nologin: '/ sbin / nologin': Aucun fichier ni répertoire de ce type. Avez-vous une idée de pourquoi c'est à la /usr/sbin/nologinplace de /sbin/nologinDebian et Ubuntu?
baptx

4
Je suis curieux de savoir pourquoi / bin / false prend 21k de code pour renvoyer un code de retour "1"! (et / sbin / nologin ne prend que 4,7k)
Mark Stewart


1
@nxnev Yeah n'a pas pensé aux frais généraux d'ELF. Et depuis mon époque IBM, il y avait un programme IEFBR14 qui était une simple instruction d'assemblage à code unique: BR 14 - Branchement pour enregistrer 14, qui mettrait fin au programme avec le code de retour défini sur tout ce qui était dans le registre 14!
Mark Stewart

Réponses:


198

Quand /sbin/nologinest défini en tant que shell, si un utilisateur avec ce shell se connecte, il recevra un message poli indiquant «Ce compte n'est pas disponible pour le moment». Ce message peut être changé avec le fichier /etc/nologin.txt.

/bin/falseest juste un fichier binaire qui se termine immédiatement, en retournant false, quand il est appelé. Ainsi, quand quelqu'un qui a un falseshell se connecte, il est immédiatement déconnecté quand il falsequitte. Définir le shell /bin/truea le même effet de ne pas permettre à quelqu'un de se connecter, mais falseest probablement utilisé comme convention truecar il est beaucoup plus efficace de véhiculer le concept selon lequel une personne n'a pas de shell.

En regardant la nologinpage « homme s, il dit qu'il a été créé en 4.4 BSD (début des années 1990) il est venu longtemps après falsesa création. L'utilisation de falseshell en tant que shell n'est probablement qu'une convention héritée des débuts d'UNIX.

nologinest l’option la plus conviviale, avec un message personnalisable donné à l’utilisateur essayant de se connecter; vous voudriez donc théoriquement l’utiliser; mais les deux nologinet falseauront le même résultat final: quelqu'un qui n'a pas de shell et ne peut pas entrer.


10
/usr/sbin/nologinpour les distributions basées sur Debian.
Diemo

3
L'implémentation BSD au moins enregistre également les tentatives de connexion à syslog, comme indiqué dans opensource.apple.com/source/system_cmds/system_cmds-735/… , alors que / bin / false ne consignera rien
Sergiy Kolodyazhnyy

28

Certains serveurs FTP ne vous autoriseront l'accès FTP que si vous avez un shell valide. /sbin/nologinest considéré comme une coquille valide, alors que /bin/falsenon.

(Je pense que "valide" signifie que son état de sortie est 0, mais /etc/shellspeut aussi y entrer, cela dépend probablement du système, du logiciel FTP et de votre configuration.)


1
oui, cela fait probablement partie du programme ftp utilisant pam et pam utilisant pam_shells qui, comme vous l'avez dit, vérifie /etc/shells. Juste une supposition ... Je peux me tromper.
Xenoterracide

4
Je viens de vérifier à la fois Ubuntu 8.04 et 14.04. La commande nologin se termine avec le statut 1 similaire à false et aucune des expressions true, false ou nologin n'est incluse dans / etc / shells. Si tel était le cas, un utilisateur pourrait utiliser chsh pour sélectionner un tel shell et se verrouiller hors de son compte.
penguin359

12

/bin/falseest une commande système qui est utilisée chaque fois que vous devez passer une commande à un programme qui ne devrait rien faire d’autre que quitter avec une erreur. C'est le compagnon de /bin/true. Tous 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 être bouclé indéfiniment, comme:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinest spécialement conçu pour remplacer un shell et produit une sortie en se plaignant de l'impossibilité de se connecter. Avant d’exister, il était courant d’utiliser /bin/falsedes utilisateurs factices, mais cela pouvait prêter à confusion car l’utilisateur ne savait pas pourquoi il était renvoyé.


4
Il convient de noter que /bin/trueet /bin/falsene sont pas toujours ce que vous obtiendrez dans un script shell. Dans zsh trueet falsesont intégrés, où bashutilise les /bin/*versions
xenoterracide

4

Sur ma machine, nologinaffiche toujours le même message, en anglais, en ignorant les arguments. /bin/falserépond à --versionet --helpdans la langue indiquée par $LC_CTYPE. Autres que ces différences cosmétiques, ils ont le même effet.

Sur le plan de la convivialité, il nologinvaut mieux s’il est utilisé pour le compte d’une personne réelle qui parle anglais. Du point de vue de la sécurité, il n'y a pas de différence.


4
semble être peut false- être plus pour les comptes système qui n’ont pas d’utilisateur réel et nologinpour les comptes désactivés.
Xenoterracide

1
Quel est votre système d'exploitation? La nologinversion Centos ne prend aucun argument, mais peut lire le message /etc/nologin.txt.
Alexander Gonchiy

3

Le seul travail / bin / false consiste à quitter avec un code de sortie non nul.

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 on les quitte immédiatement


2

Sur Linux, /sbin/nologinvient du projet util-linux , alors qu'il /bin/falsefait partie de GNU Coreutils . Elles remplissent des rôles différents et nologin a la possibilité d’imprimer un message à l’intention de ceux qui en ont le shell qui se connecte. Les commandes linux proviennent de BSD, où elles semblent avoir une longue histoire d’être différentes. FreeBSD falseretourne simplement 1 , pendant que le nologinvérificateur s’assure qu’il fonctionne sur un téléscripteur et envoie un message à syslog lors des tentatives de connexion. Les versions de Linux sont un peu plus compliquées ( falsefaire toutes sortes de choses amusantes avec l’internationalisation pour la sortie de --help, je suppose) mais fonctionnent essentiellement de la même manière.


1

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 false. Il est exécuté comme 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.)

-4

Les deux font plus ou moins le même travail mais /bin/falsesont utiles pour les utilisateurs non privilégiés. D'autre part, /sbin/nologinest pour les utilisateurs privilégiés.


4
Oh, comment es-tu arrivé à cette conclusion?
fpmurphy

Il a probablement examiné /etc/passwd. Je viens tout juste de jeter un coup d'œil sur /etc/passwdun tronçon Debian fraîchement installé. Sur cette zone, presque tous les comptes système (identificateurs d'utilisateur <1000) ont un /usr/sbin/nologinshell, à quelques exceptions près. Veuillez noter que je ne suis pas d'accord avec la réponse de @ pythondetective. Je ne fais que spéculer sur ce qui l’aurait conduit à cette conclusion. Mon commentaire est un peu en retard, cependant.
Binarus

non! shell de connexion par défaut n'est pas la même chose que les privilèges.
MUY Belgique

"détective" pas
terrible
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.