76 votes

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

J'ai souvent entendu dire qu'il était recommandé de désactiver un compte utilisateur en définissant son Shell à /bin/false . Mais, sur mes systèmes Linux existants, je constate qu'un grand nombre de comptes existants (tous des comptes de service) ont un Shell de /sbin/nologin à la place.

Je vois dans la page de manuel que /sbin/nologin imprime un message à l'utilisateur indiquant que le compte est désactivé, puis quitte. Vraisemblablement /bin/false n'imprimerait rien.

Je vois aussi que /sbin/nologin est répertorié dans /etc/shells alors que /bin/false ne l'est pas.

La page du manuel indique que FTP désactivera l'accès pour les utilisateurs avec un Shell. no répertorié dans /etc/shells et implique que d'autres programmes peuvent faire de même. Est-ce que cela signifie que quelqu'un pourrait se connecter par FTP avec un compte qui a /sbin/nologin comme son Shell ?

Quelle est la différence ici ? Lequel de ces éléments dois-je utiliser pour désactiver un compte utilisateur, et dans quelles circonstances ? Quels sont les autres effets d'une inscription dans /etc/shells ont ?

77voto

Falcon Momot Points 24815

/bin/false est un programme utilitaire, compagnon de /bin/true qui est utile dans un certain sens abstrait pour s'assurer qu'unix est complet en termes de fonctionnalités. Cependant, des objectifs émergents pour ces programmes ont été trouvés ; considérez l'instruction BASH /some/program || /bin/true qui donnera toujours la valeur booléenne "vrai" ( $? = 0 ), quel que soit le retour de /some/program .

Une utilisation émergente de /bin/false comme vous l'avez identifié, est un Shell nul pour les utilisateurs non autorisés à se connecter. Dans ce cas, le système se comportera exactement comme si le Shell avait échoué à s'exécuter.

POSIX (mais je peux me tromper et il se peut que ce soit le SUS) contraint ces deux commandes à ne rien faire d'autre que de retourner la valeur booléenne appropriée.

/sbin/nologin est un utilitaire BSD qui a un comportement similaire à celui de /bin/false (renvoie le booléen false), mais imprime aussi la sortie, comme /bin/false est interdit de faire. Ceci est censé aider l'utilisateur à comprendre ce qui s'est passé, bien qu'en pratique, de nombreux émulateurs de terminaux se ferment simplement lorsque le Shell se termine, rendant de toute façon le message quasiment illisible dans certains cas.

Il y a peu d'intérêt à énumérer /sbin/nologin en /etc/shells . L'effet standard de /etc/shells est de lister les programmes autorisés à être utilisés avec chsh lorsque les utilisateurs modifient leur propre Shell (et il n'y a aucune raison crédible de modifier son propre Shell pour /sbin/nologin ). Le superutilisateur peut changer le Shell de n'importe qui en n'importe quoi. Cependant, vous pouvez vouloir lister les deux /sbin/nologin y /bin/false en /etc/rsh qui interdira aux utilisateurs disposant de ces shells de modifier leur Shell à l'aide de chsh dans le cas malheureux où ils obtiennent un Shell.

Les démons FTP peuvent interdire l'accès aux utilisateurs dont le Shell ne figure pas dans /etc/shells, ou ils peuvent utiliser toute autre logique qu'ils souhaitent. L'exécution de FTP est à éviter dans tous les cas car sftp (qui offre une fonctionnalité similaire) est similaire mais sécurisé. Certains sites utilisent /sbin/nologin pour désactiver l'accès à Shell tout en autorisant l'accès à sftp en le mettant en /etc/shells . Cela peut ouvrir une porte dérobée si l'utilisateur est autorisé à créer des cronjobs.

Dans les deux cas, scp ne fonctionnera pas avec un Shell invalide. scponly peut être utilisé comme un Shell dans ce cas.

En outre, le choix de Shell affecte le fonctionnement de su - (AKA su -l ). En particulier, la sortie de /sbin/nologin sera imprimé sur stdout s'il s'agit du Shell ; ce qui ne peut être le cas avec /bin/false . Dans les deux cas, les commandes exécutées avec su -cl échouera.

Enfin, la réponse :

Pour désactiver un compte, ne dépendez d'aucun d'entre eux, mais définissez le Shell sur /sbin/nologin à des fins d'information (sauf si /sbin/nologin est en /etc/shells à ce moment-là, vous devez utiliser /bin/false ce qui ne devrait pas être le cas). Au lieu de cela, définissez le champ du mot de passe dans /etc/passwd a ! qui est garanti par crypt pour être valide pour aucun mot de passe. Envisagez de définir le hachage dans /etc/shadow de la même manière pour éviter les bugs. passwd -l le fera pour vous.

Une troisième façon de désactiver un compte est de définir le champ de la date d'expiration du compte sur une date ancienne (ex. usermod --expiredate 1 ). Cela empêchera les connexions dans le cas où votre configuration permet aux utilisateurs de s'authentifier contre leur compte unix sans mot de passe et que le service qu'ils utilisent ne nécessite pas de Shell.

13voto

Jacob Points 9074

Après avoir fait quelques recherches à ce sujet, la méthode que vous utilisez dépend de ce que vous avez à verrouiller . Si un utilisateur se connecte avec ce paramètre sur le Shell, il obtiendra un message affiché à l'effet de This account is currently unavailable. Notez que vous pouvez changer cela en créant le fichier /etc/nologin.txt au moins sur les dérivés de RHEL.

Comme vous le savez /bin/false n'est pas un Shell. La façon dont il fonctionne est qu'il retourne false qui se déconnecte immédiatement après la sortie du binaire. Notez que /bin/true permettrait d'obtenir le même effet.

En ce qui concerne votre question sur le FTP : Oui, vous avez raison de dire que le fait d'avoir le Shell réglé sur /sbin/nologin permettra aux utilisateurs de se connecter au FTP tout en /bin/false o /bin/true empêchera complètement l'utilisateur de se connecter à tout service.

Par conséquent, /bin/false o /bin/true est le meilleur moyen d'empêcher un utilisateur de se connecter à n'importe quel service, alors que /sbin/nologin permettra toujours aux utilisateurs de se connecter à des services autres que SSH ou la console locale tout en indiquant à l'utilisateur que le compte est inactif et qu'il est préférable de l'utiliser lorsque seuls SSH/la console locale doivent être verrouillés.

3voto

Isuru Gunawardana Points 101

Hum, est-ce que quelqu'un essayez pour prouver que /bin/false empêcherait l'accès FTP ?

J'ai juste changé le Shell de mon utilisateur en /bin/false, et j'ai pu me connecter par FTP sans problème.

J'utilise /dev/null pour complètement verrouiller l'utilisateur (sauf pour le courrier électronique, il peut toujours utiliser POP3).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X