Désactiver le shell utilisateur pour des raisons de sécurité

58

Nous avons créé plusieurs comptes d'utilisateurs pour les tâches automatisées nécessitant des autorisations détaillées, telles que le transfert de fichiers entre systèmes, la surveillance, etc.

Comment verrouiller ces comptes d'utilisateurs pour que ces "utilisateurs" n'aient pas de shell et ne puissent pas se connecter? Nous voulons éviter la possibilité que quelqu'un puisse entrer SSH dans l'un de ces comptes d'utilisateur.

Suman
la source

Réponses:

63

Vous pouvez utiliser la usermodcommande pour modifier le shell de connexion d'un utilisateur.

usermod -s /sbin/nologin myuser

ou

usermod -s /usr/sbin/nologin myuser

Si votre système d'exploitation ne fournit pas / sbin / nologin, vous pouvez définir le shell sur une commande NOOP telle que / bin / false:

usermod -s /bin/false myuser
Jordan
la source
1
/bin/falsesemble plus commun que /bin/true.
jw013
@ jw013 Je mets à jour ma réponse, mais les deux devraient fonctionner correctement.
Jordanie
1
Notez que sur Debians, nologinse trouve actuellement à/usr/sbin/nologin
xebeche
C’était ma première idée. Malheureusement, l’utilisation "valide" de certains comptes d’utilisateur est désactivée lors de la configurationnologin
Javier
2
@ jw013 En fait , j'ai /usr/local/bin/maybequi /dev/urandomchoisit ly entre ces deux. Je devrais peut-être l'utiliser: D
hegez
21

Changer le shell de connexion n'empêche pas nécessairement les utilisateurs de s'authentifier (sauf dans certains services qui vérifient si le shell de l'utilisateur est mentionné dans /etc/shells).

Les utilisateurs peuvent toujours être en mesure de s’authentifier auprès des divers services fournis par votre système aux utilisateurs d’Unix et peuvent toujours être autorisés à effectuer certaines actions, sans toutefois exécuter directement des commandes arbitraires.

Changer le shell pour /bin/falseou /usr/sbin/nologinseulement l'empêcher d'exécuter des commandes sur les services qui peuvent être utilisés pour exécuter des commandes (connexion à la console, ssh, telnet, rlogin, rexec, etc.) n'affectent l' autorisation que pour certains services.

Par sshexemple, cela leur permet toujours d'effectuer un transfert de port.

passwd -ldésactive l'authentification par mot de passe, mais l'utilisateur peut toujours être autorisé à utiliser d'autres méthodes d'authentification (comme authorized_keysavec ssh).

Sous pamLinux au moins, vous pouvez utiliser le pam_shellsmodule pour restreindre l'authentification ou l'autorisation aux utilisateurs disposant d'un shell autorisé (ceux mentionnés dans /etc/shells). En effet ssh, vous voudrez le faire au niveau autorisation ( account) comme pour l’ sshdutilisation de l’ authentification pam en plus d’autres méthodes d’authentification (comme authorized_keys), ou vous pouvez le faire avec des sshd_configdirectives dans /etc/ssh/sshd_config(comme AllowUserset amis).

Attention, l'ajout de certaines restrictions à l'autorisation globale de pam peut potentiellement empêcher l'exécution de crontâches en tant qu'utilisateurs.

Stéphane Chazelas
la source
Je vous remercie. Ensuite, que recommanderiez-vous compte tenu du schéma suivant: Je dois créer un utilisateur qui doit accéder à son dossier personnel via sftp ou sshfs, mais il ne doit pas pouvoir se connecter avec un shell. Est-ce que c'est possible ? Je suis tombé comme si les modules PAM étaient peut-être la solution mais je ne comprenais pas tout:|
Stéphane
@Stphane vous pouvez jeter un oeil à rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha
4

Vous éditez le /etc/passwdfichier et changez le shell des utilisateurs depuis /bin/bashou /bin/shvers/sbin/nologin

Mark Cohen
la source
8
La réponse est correcte, mais l'édition manuelle / etc / passwd ne devrait jamais être recommandée.
jordanm
3
Pourquoi? C’est quelque chose que nous faisons depuis aussi longtemps que je suis un administrateur système professionnel. (environ 20 ans maintenant) En fait, toutes les distributions linux / unix n’ont pas d’outils pour modifier / etc / passwd ou / etc / group .. Sauf si vous utilisez quelque chose comme Yast ou Smit, qui sont des outils qui cachent les paramètres et écrasent eux il n'y a pas de mal à l'édition de main
Mark Cohen
6
Il est beaucoup plus facile de commettre une erreur "casse la connexion de tout le monde" en édition manuelle, plutôt que par un seul utilisateur.
Jordanie
2
@jordanm: il y a vipwce qui empêche ce genre d'erreur.
eudoxos
4

Tout d'abord, désactivez le mot de passe en utilisant passwd -l username.

Notez également dans la manpage passwdpour l'option -l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.
mdpc
la source
1
Cela peut ne pas être souhaitable. Ils peuvent avoir besoin d'un mot de passe sur leur compte système pour accéder à un courrier électronique, par exemple.
Jordanie
1
Certains systèmes de messagerie permettent d'utiliser leurs propres mécanismes de mot de passe. J'utilise Dovecot et Exim avec un mot de passe d'adresse e-mail uniquement. Cela permet d'utiliser la messagerie Web sur des serveurs pour lesquels je n'utiliserais pas mon mot de passe système. Les domaines de messagerie virtuels nécessitent leur propre mot de passe car ils ne sont pas couplés au système de mot de passe des serveurs.
BillThor
2

Vous pouvez utiliser la commande chsh:

~# chsh myuser

Entrez les nouveaux détails du shell à la demande:

Login Shell [/bin/sh]: /bin/nologin

Ou version plus courte:

~# chsh myuser -s /bin/nologin
Parlons
la source
0

Pour empêcher l'utilisateur de se connecter et même de s'authentifier sur ssh, ce qui active le transfert de port (comme décrit ici, Stéphane), modifie l'utilisateur pour qu'il soit similaire à l' nobodyutilisateur du système :

  • authentification de mot de passe bloquée dans /etc/shadow(avec *ou !!dans le champ approprié)
  • shell désactivé dedans /etc/passwd(par exemple /sbin/nologinau champ approprié)
  • répertoire de départ en lecture seule /etc/passwd(par exemple, /dans le champ approprié)
appuyez sur la touche
la source