Comment empêcher un utilisateur de se connecter, tout en autorisant «su - user» sous Linux?

93

Comment autorisez-vous un utilisateur à se connecter à l'aide de " su - utilisateur " tout en l'empêchant de se connecter à l'aide de SSH?

J'ai essayé de définir le shell sur /bin/falsemais le quand je l'essaie sune fonctionne pas.

Existe-t-il plusieurs façons de n'autoriser que les connexions par su?

Est-ce que SSH est AllowUserla voie à suivre? (comment ferais-je si c'est la voie à suivre)

NoozNooz42
la source

Réponses:

113

Vous pouvez utiliser AllowUsers / AllowGroups si seuls quelques utilisateurs / groupes sont autorisés à se connecter via ssh ou DenyUsers / DenyGroups si seuls quelques utilisateurs / groupes ne sont pas autorisés à se connecter. Notez que cela ne limite que la connexion via ssh, d'autres méthodes 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)

Florian Diesch
la source
merci beaucoup à tous. Je ne m'attendais pas à plus de 2 votes positifs pour ma question :) J'aime beaucoup la construction "su-s ..." et la console / ftp est un bon point. J'étais vraiment après quelque chose comme "su-s".
NoozNooz42
3
L'astuce de su-s est d'or. Je l'utilise tout le temps pour les comptes système pour lesquels je dois tester des autorisations, par exemple, apache, personne, etc. Je fais habituellement su - user -s / bin / bash. L'argument facultatif - peut être utilisé pour créer un environnement similaire à celui auquel l'utilisateur s'attendait s'il était connecté directement.
dmourati
2
Si vous avez besoin de charger des variables d’environnement (par exemple, depuis / etc / profile), un tiret supplémentaire le fera:su - -s /bin/bash user
Leons
13

Si vous voulez toujours que su fonctionne, vous pouvez utiliser sudo -u [username]ou transmettre -s /bin/bashà su en tant que shell temporaire. Ils font tous les deux la même chose en l’absence de shell /etc/passwd.

Lok
la source
7

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

astrostl
la source
l'utilisateur a-t-il besoin d'un shell valide pour exécuter su? Je suis à peu près sûr que vous êtes toujours dans le même shell original après que vous ayez assigné un autre utilisateur ... vous ne vous connectez pas réellement en tant qu'autre utilisateur ... Donc, définir simplement le shell sur / dev / null pourrait fonctionner ainsi que.
Brian Postow
Oui, il a toujours besoin d'un shell valide: [root @ localhost ~] # su daemon Ce compte n'est pas disponible pour le moment. [root @ localhost ~] # su - daemon Ce compte n'est pas disponible pour le moment. (Système RHEL, le shell du démon est / sbin / nologin)
astrostl Le
3

Dans sshd_config, ajoutez une ligne DenyUser [username]

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

Chris S
la source
1
Cela devrait être DenyUsers, avec un 's'.
David G
2

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

abz
la source
1

comme d'autres l'ont dit;

DenyUser usernameou DenyGroup groupnamein sshd_configempêcherait la connexion clé / mot de passe via ssh.

Bien que je fasse habituellement quelque AllowGroup sshchose dans ce sens et que j'ajoute explicitement les personnes qui ont besoin d'un accès ssh à ce groupe.

alors, vous pouvez faire ce que les autres ont dit: passwd -d usernameeffacer 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 usernamepour "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 positif.

cpbills
la source
1
En fait, ssh vous permettra de vous connecter en utilisant l’authentification par clé même lorsque le mot de passe du compte est verrouillé.
Richard Holloway
1

Comme je l'ai mentionné dans un commentaire, je pense que vous pouvez toujours créer 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 toujours pouvoir continuer à utiliser cet utilisateur ... mais toute tentative de connexion de quelque manière que ce soit vous fera quitter ...

Brian Postow
la source
1

éditez / etc / shadow en ajoutant! au début du hash 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. Par conséquent, personne ne peut utiliser l’utilisateur root pour se connecter ou se connecter au système, les utilisateurs sudo peuvent toujours s’exécuter en tant qu’utilisateur root.

snic.io
la source
0

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

# passwd -d myuser
François Feugeas
la source
0

En supposant que vous ne vouliez que su utilisateur à partir du compte root, et désactivez 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’a conseillé), mais le compte expire également . Vous ne pouvez pas vous connecter à un compte arrivé à expiration, par exemple avec des clés SSH. Vous pouvez toujours su user, bien qu'il affiche un avis que le compte a expiré.

artfulrobot
la source
0

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 certaines exigences.

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

su - userUn mot de passe sera requis pour l'utilisateur s'il est exécuté par un utilisateur autre que root. Cependant, sudo -u user -ine nécessite pas de mot de passe pour l'utilisateur.

BillThor
la source