web-dev-qa-db-fra.com

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

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

Comment verrouiller ces comptes d'utilisateurs afin que ces "utilisateurs" n'aient pas de Shell et ne puissent pas se connecter? Nous voulons empêcher la possibilité que quelqu'un puisse se connecter en tant que l'un de ces comptes d'utilisateurs.

64
Suman

Vous pouvez utiliser la commande usermod 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
69
jordanm

La modification du 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 que votre système fournit aux utilisateurs Unix, et peuvent toujours être autorisés à effectuer certaines actions, même s'ils n'exécutent probablement pas directement des commandes arbitraires.

Changer le shell en /bin/false ou /usr/sbin/nologin les empêchera uniquement 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 ...), affectez donc autorisation pour certains services uniquement.

Pour ssh par exemple, cela leur permet toujours de faire une redirection de port.

passwd -l désactivera l'authentification par mot de passe, mais l'utilisateur pourra toujours être autorisé à utiliser d'autres méthodes d'authentification (comme authorized_keys avec ssh).

Avec pam sous Linux au moins, vous pouvez utiliser le pam_shells module pour restreindre l'authentification ou l'autorisation aux utilisateurs avec un Shell autorisé (ceux mentionnés dans /etc/shells). Pour ssh, vous voudrez le faire au niveau de l'autorisation (account) comme pour l'authentification sshd utilise pamen plus = vers d'autres méthodes d'authentification (comme authorized_keys), ou vous pouvez le faire avec sshd_config directives dans /etc/ssh/sshd_config (comme AllowUsers et ses amis).

Attention cependant, l'ajout de certaines restrictions dans l'autorisation globale de pam empêchera potentiellement l'exécution de travaux cron en tant que ces utilisateurs.

22
Stéphane Chazelas

Vous modifiez le /etc/passwd fichier et changez le shell des utilisateurs de /bin/bash, ou /bin/sh à /sbin/nologin

4
Mark Cohen

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

Notez également dans la page man pour passwd pour 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.
4
mdpc

Vous pouvez utiliser la commande chsh:

~# chsh myuser

Entrez les nouveaux détails du Shell lorsque demandé:

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

Ou version plus courte:

~# chsh myuser -s /bin/nologin
2
Let'sTalk

Pour empêcher l'utilisateur de se connecter et même l'authentification sur ssh qui permet la redirection de port (comme décrit ici Stephane), je modifie l'utilisateur pour qu'il soit similaire à l'utilisateur nobody du système:

  • authentification de mot de passe bloquée dans /etc/shadow (avec * ou !! au champ approprié)
  • shell désactivé dans /etc/passwd (par exemple. /sbin/nologin au champ approprié)
  • répertoire personnel en lecture seule dans /etc/passwd (par exemple. / au champ approprié)
1
keypress