web-dev-qa-db-fra.com

Comment empêcher un utilisateur de se connecter, mais autoriser "su - user" sous Linux?

Comment autoriser un utilisateur à se connecter en utilisant "su -tilisateur "mais empêcher l'utilisateur de se connecter en utilisant SSH?

J'ai essayé de définir le shell sur /bin/false mais quand j'essaye de su ça ne marche pas.

Existe-t-il plusieurs façons d'autoriser uniquement les connexions par su?

Est-ce que AllowUser de SSH est la voie à suivre? (comment pourrais-je faire cela si c'est la voie à suivre)

94
NoozNooz42

Vous pouvez utiliser AllowUsers/AllowGroups si vous ne disposez que de quelques utilisateurs/groupes autorisés à se connecter via ssh ou DenyUsers/DenyGroups si vous avez seulement quelques utilisateurs/groupes qui sont pas autorisés à se connecter. Notez que cela restreint uniquement la connexion via ssh, d'autres modes de connexion (console, ftp, ...) sont toujours possibles. Vous devez ajouter ces options à votre fichier / etc/ssh/sshd_config pour la plupart des installations ssh.

Si vous avez défini le shell de connexion sur / bin/false vous pouvez utiliser su -s /bin/bash user (remplacez / bin/bash par le shell de votre choix)

114
Florian Diesch

Si vous voulez toujours que su fonctionne, vous pouvez utiliser Sudo -u [username] ou passer -s /bin/bash à su comme un shell temporaire. Ils font tous les deux la même chose en l'absence d'un Shell dans /etc/passwd.

13
Loke

Si un compte n'a pas de mot de passe (passwd -d username), il ne peut pas se connecter de manière interactive (console, SSH, etc.). S'ils ont un Shell valide, s fonctionnera toujours. Notez le "interactivement", cependant; si quelqu'un décide de configurer une paire de clés SSH pour le compte, cela fonctionnera!

7
astrostl

Dans sshd_config ajoutez une ligne DenyUser [username]

Notez que cela n'empêchera pas cet utilisateur de se connecter via la console.

3
Chris S

En plus de ce qui a été mentionné ci-dessus (désactiver et/ou ne pas définir le mot de passe utilisateur), le module pam_access (consulter la page de manuel sur pam_access et access.conf) peut être utilisé pour contrôler l'accès à la connexion.

2
abz

éditez/etc/shadow en ajoutant! au début du hachage du mot de passe.

username:!<hash>:#####:#:#####:#:::

Lors de la sécurisation d'une nouvelle installation, c'est la première chose que je fais après l'installation de Sudo, afin que personne ne puisse utiliser l'utilisateur root pour se connecter ou ssh dans le système, les utilisateurs Sudo peuvent toujours s'exécuter en tant qu'utilisateur root.

1
snic.io

comme d'autres l'ont dit;

DenyUser username ou DenyGroup groupname dans sshd_config empêcherait la connexion par paire de clés/mot de passe via ssh.

bien que je fasse habituellement quelque chose comme AllowGroup ssh ou quelque chose dans ce sens, et ajoutez explicitement les personnes qui ont besoin d'un accès ssh à ce groupe.

alors, vous pouvez faire comme d'autres l'ont dit: passwd -d username pour masquer le mot de passe des utilisateurs, afin qu'ils ne puissent pas se connecter à la console, ou d'une autre manière. ou mieux encore passwd -l username pour "verrouiller" le compte. il est possible que ssh refuse l'accès à un compte verrouillé, même avec des clés, mais je ne suis pas sûr.

1
cpbills

Comme je l'ai mentionné dans un commentaire, je pense que vous pouvez toujours ouvrir un compte avec un shell non valide. Donc, si vous définissez le shell de l'utilisateur sur/dev/null ou quel que soit le shell de bin, vous devriez pouvoir continuer à utiliser cet utilisateur ... mais toute tentative de connexion de quelque manière que ce soit vous fermera le dos ...

1
Brian Postow

Ne spécifiez pas de mot de passe pour l'utilisateur non autorisé à se connecter ou à le supprimer.

# passwd -d myuser
0

En supposant que vous ne souhaitiez utiliser que l'utilisateur du compte root et désactiver tous les autres accès:

Utilisez ceci (exécuté en tant que root):

usermod -e 1 -L user

Cela désactive la connexion par mot de passe (comme de nombreuses autres réponses l'ont conseillé), mais cela expire également le compte. Vous ne pouvez pas vous connecter à un compte expiré, par exemple avec des clés SSH. Vous pouvez toujours su user, bien qu'il affiche un avis d'expiration du compte.

0
artfulrobot

Savoir quel mécanisme est le meilleur dépend des exigences. Si vous connaissez les exigences, vous pouvez choisir le mécanisme approprié. Toutes les réponses ci-dessus sont valables pour un ensemble d'exigences.

Voulez-vous uniquement restreindre l'accès SSH? Avez-vous besoin d'un accès aux méthodes mail ou ssh? L'accès est-il uniquement à partir de la racine?

su - user nécessitera un mot de passe pour l'utilisateur s'il est exécuté par un utilisateur autre que root. Cependant, Sudo -u user -i ne nécessite pas de mot de passe pour l'utilisateur.

0
BillThor