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.
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
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 pam
en 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.
Vous modifiez le /etc/passwd
fichier et changez le shell des utilisateurs de /bin/bash
, ou /bin/sh
à /sbin/nologin
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.
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
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:
/etc/shadow
(avec *
ou !!
au champ approprié)/etc/passwd
(par exemple. /sbin/nologin
au champ approprié)/etc/passwd
(par exemple. /
au champ approprié)