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

51

Je dois autoriser l'utilisateur martinà changer d'utilisateur martin-testsans 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 un utilisateur martinà un groupe wheel. Je ne veux pas donner martinplus de privilèges que de pouvoir changer martin-test. Je ne veux pas non plus utiliser sudo.

Quelle serait la meilleure façon de le faire, tout en limitant les privilèges d’utilisateur martin?

Martin Vegter
la source
2
C'est plus facile à faire avec, sudopar exemple sudo -u martin-test -i. Y a-t-il une raison pour laquelle vous demandez spécifiquement su?
Jordanie
Je ne veux pas installer sudouniquement pour cette raison (je ne l'utilise pas normalement sudoet je ne l'aime pas particulièrement). Et je pense que l’utilisation pamest plus propre et plus transparente.
Martin Vegter
3
@MartinVegter Comme vous pouvez le constater à partir de la réponse au script, le faire via un mécanisme de type pam est très moche. Vraiment c'est exactement ce qui sudoétait destiné. En plus de ne pas l'utiliser normalement, quelles sont les objections?
Patrick
1
Si une solution propre est possible avec pam, je préférerais cela plus sudo. Si sudoest la seule possibilité, c'est très bien aussi. Mes objections sudosont principalement idéologiques: je n'aime pas l'idée de gestion administrative par l'utilisateur sudo foo. Lorsque j'ai besoin de faire de l'administration, je me connecte en tant que root. Sinon, je me connecte en tant qu'utilisateur. Ces deux rôles distincts ne doivent pas être mélangés. De plus, j'ai déjà une paminfrastructure installée. Je ne veux pas installer un autre setuidprogramme qui peut éventuellement introduire des bugs de sécurité.
Martin Vegter
5
@MartinVegter Vous n'avez pas à faire sudo foopour des commandes spécifiques. Sudo a sudo -squi va lancer un shell. sudo est un utilitaire très courant, ce qui signifie que sa sécurité a été minutieusement vérifiée, bien plus que ne le sera une supercherie de pam. Je dirais également que l’obtention d’un shell root pour les tâches est beaucoup plus précaire que le lancement de commandes spécifiques. Lorsque vous lancez un shell, vous lancez tout en tant que root. Si l'une de ces choses (comme un simple ls) comporte une vulnérabilité de sécurité, vous venez d'ouvrir une faille de sécurité.
Patrick

Réponses:

61

Ajoutez les lignes suivantes juste en dessous de la pam_rootok.soligne 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 contrôles à l'aide du pam_succeed_if.somodule. Voir aussi la syntaxe du fichier de configuration Linux-PAM pour en savoir plus sur les authlignes.

  • La première ligne vérifie si l' utilisateur cible est martin-test. Si c'est le cas, rien ne se passe ( success=ignore) et nous continuons 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 continuerons sur les lignes suivantes avec les étapes d'authentification habituelles.
  • La deuxième ligne vérifie si l'utilisateur actuel est martin. Si tel est le cas, le système considère que le processus d'authentification a abouti et renvoie ( sufficient). Sinon, rien ne se passe et nous continuons sur les lignes suivantes avec les étapes d’authentification habituelles.

Vous pouvez également limiter suà un groupe, le groupe allowedpeoplepeut ici susans mot de passe:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople
GnP
la source
1
Si vous souhaitez autoriser s'ils appartiennent à un certain groupe: autorisation suffisante pam_succeed_if.so utilisateur ingroup GROUP
shrimpwagon
@gnp Super merci !! Travailler sur iCinga avec nrpe, doit exécuter une commande en tant qu’utilisateur différent !! Beaucoup aidé !!!!!! Merci!!!!!
Saravanakumar
@GnP S'il vous plaît aidez-moi sur askubuntu.com/questions/821793/…
Nullpointer
Il serait bien d’ajouter des informations sur la manière d’appliquer les modifications.
Kyslik
@ Kyslik que voulez-vous dire? La
procédure à suivre
12

Si vous ne souhaitez pas modifier les groupes ou les utiliser sudo, utilisez un module pam appelé pam_execpour exécuter des scripts externes dans une étape pam.

Ajouter une ligne dans votre /etc/pam.d/suaprès la pam_rootok.soligne:

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

/path/to/script a les permissions 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 existe avec succès si su:

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

Voir:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 
le chaos
la source
1
pam_access peut être utilisé pour fournir des fonctionnalités similaires, sans recourir à un script. (c'est ce que pam_access a été créé)
jsbillings
1
@jsbillings Souhaitez-vous que (avec quelques détails) une autre réponse?
Hauke ​​Laging
1
Comment aurais-je besoin de modifier mon /etc/pam.d/suutilisation en fonction de pam_accessma situation?
Martin Vegter
3
@ jsbillings En fait, pam_accessje ne peux pas faire ça. Lorsque supasse dans la pile de pam, c'est l'utilisateur que vous changez de utilisateur, et non l'utilisateur à partir duquel vous changez d'utilisateur. Donc, si vous ajoutez une règle telle que + : martin : ALL, elle permettra à quiconque de passer à martin . Même si vous changez martinpour martin-test, cela laissera tout le monde le faire. Vous devez analyser à la fois l’utilisateur dont vous venez et l’utilisateur auquel vous passez. Vraiment, c’est exactement ce qu’il sudofaut ...
Patrick
0

Si vous n'avez pas accès au compte root, mais 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: ssh toto @ localhost whoami

Il suffit d’installer votre clé publique dans la catégorie allowed_keys of toto

Patrick
la source
Réponse réfléchie .. Cependant, la commande que quelqu'un souhaite exécuter est déjà présente sur la machine. Donc, il est inutile de ssh'ing sur le même serveur.
Raja Anbazhagan
-1

Ma solution simple est:

sudo login -f martin-test

Si vous voulez éviter le sudo à tout prix, je pense qu'il devrait être possible de le mettre dans un script:

  1. appartenant à root et avec les privilèges root (en utilisant le drapeau setuid )
  2. exécutable par tout le monde, même sans sudo.

Cependant, je ne peux pas comprendre le chown rootet chmod +s ToTest.shbits, pour que cela fonctionne réellement:

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

Je cours toujours en tant qu'utilisateur normal, comme le dit l'écho. Et il faut toujours un mot de passe sudo. Si cela fonctionnait en tant que root, on pourrait supprimer sudola dernière ligne ...

Frank Nocke
la source
L'indicateur setuid sur un script shell (ou sur un autre script) ne fonctionnera pas sous Linux et pour de bonnes raisons. Notez que le script ci-dessus avec un drapeau suid actif constituerait immédiatement un piège: il engage bash via "env" (assez contre-productif, car si vous supposez que vous ne savez pas où se bashtrouve, pourquoi supposez-vous que vous savez où envest ou existe-t-il même?). Mais à la fin, vous ne savez pas ce que bashce sera exactement. Il pourrait provenir du répertoire de l'utilisateur appelant et avoir été compilé une minute plus tôt à partir de son code source. Vous voyez où je vais? Ou l'utilisateur peut remplacer whoami...
David Tonhofer
Mon cerveau est actuellement trop éloigné de ces problèmes pour pouvoir le comprendre pleinement, mais je le remercie toujours pour les explications détaillées.
Frank Nocke le