web-dev-qa-db-fra.com

Autoriser l'utilisateur1 à "su - utilisateur2" sans mot de passe

Je dois autoriser l'utilisateur martin à passer à l'utilisateur martin-test sans mot de passe

su - martin-test

Je pense que cela peut être configuré dans /etc/pam.d/su. Il y a déjà quelques lignes dans ce fichier qui peuvent être décommentées. Cependant, je n'aime pas l'idée d'ajouter l'utilisateur martin au groupe wheel. Je ne veux pas accorder à martin plus de privilèges que de pouvoir passer à martin-test. Je ne veux pas non plus utiliser Sudo.

Quelle serait la meilleure façon de le faire, tout en gardant les privilèges de l'utilisateur martin minimes?

55
Martin Vegter

Ajoutez les lignes suivantes sous le pam_rootok.so ligne dans votre /etc/pam.d/su:

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

Ces lignes effectuent des vérifications à l'aide de pam_succeed_if.so module. Voir aussi syntaxe du fichier de configuration Linux-PAM pour en savoir plus sur les lignes auth.

  • La première ligne vérifie si l'utilisateur cible est martin-test. S'il ne se passe rien (success=ignore) et nous pouvons continuer sur la ligne suivante pour vérifier l'utilisateur actuel . Si ce n'est pas le cas, la ligne suivante sera ignorée (default=1) et nous pouvons continuer sur les lignes suivantes avec les étapes d'authentification habituelles.
  • La deuxième ligne vérifie si l'utilisateur actuel est martin ou non, si c'est le cas, le système considère le processus d'authentification comme réussi et renvoie (sufficient), si ce n'est pas le cas, rien ne se passe et nous continuer sur les lignes suivantes avec les étapes d'authentification habituelles.

Vous pouvez également restreindre su à un groupe, ici le groupe allowedpeople peut su sans mot de passe:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople
66
GnP

Si vous ne voulez pas changer de groupe ou utiliser Sudo, utilisez un module pam appelé pam_exec pour exécuter des scripts externes dans une étape pam.

Ajoutez une ligne dans votre /etc/pam.d/su après le pam_rootok.so ligne:

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script a les autorisations 755 (rwxr-xr-x) et le contenu suivant:

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

Donc, ce script se termine avec succès si su:

  • est appelé dans le cadre de l'authentification,
  • l'utilisateur appelant est martin et
  • l'utilisateur à authentifier est martin-test.

Voir:

martin@Host:~$ su - martin-test
martin-test@Host:~$ exit
martin@Host:~$ su - otheruser
Password: ****
otheruser@Host:~$ 
13
chaos

Cela pourrait être le meilleur moyen possible.

su n'est pas censé faire cela - Sudo l'est.

Ouvrir/etc/sudoers.d/custom Et écrivez ce qui suit:

user-a ALL=(user-b:user-b) NOPASSWD:ALL

Cela signifie: chaque fois que l'utilisateur-a exécute Sudo -u user-b, Laissez-le partir sans demander le mot de passe.

ne autre façon

youruserid ALL = (username) NOPASSWD: ALL

avec visudo puis Sudo -u username bash est comme su - username

2
champion-runner

Si vous n'avez pas accès au compte root, mais que vous avez le mot de passe de l'utilisateur que vous souhaitez utiliser pour exécuter une commande, vous pouvez procéder comme suit.

  • Cela vous demandera le mot de passe du toto: su - toto -c whoami
  • Ce ne sera pas le cas: ssh toto @ localhost whoami

Installez simplement votre clé publique dans les_touches_autorisées de toto

0
Patrick