Nom d'utilisateur avant sudo


8

J'ai reçu un script nécessitant sudo, mais le script doit définir des paramètres en fonction de l'utilisateur d'origine, tels que:

chown "${USER}:${USER}" dir

Si je le place sous sudo, je me retrouve avec chmod root:root, ce qui n'aide pas.

Alors, comment puis-je obtenir le nom d'utilisateur avant sudo?

Réponses:


11

La variable d'environnement SUDO_USER devrait fonctionner en remplacement de USER.

Puisque vous définissez la propriété sur USER: USER Je suppose qu'il y a toujours un groupe avec le même nom que l'utilisateur? Une solution plus stricte pourrait sinon consister à utiliser SUDO_UID et SUDO_GID.

Deux solutions possibles seraient alors:

chown "${SUDO_USER}:${SUDO_USER}" dir

ou

chown "${SUDO_UID}:${SUDO_GID}" dir

Belle réponse, avec la solution ET quelques infos supplémentaires.
— e-satis

L'utilisation de l'UID / GID est la meilleure solution, car il est possible d'avoir plusieurs UID avec le même nom d'utilisateur.
— duffbeer703

4

Vous pouvez utiliser la SUDO_USERvariable:

sudo bash -c 'echo $SUDO_USER'

Depuis la page de manuel sudo :

sudo utilise les variables d'environnement suivantes. La politique de sécurité contrôle le contenu réel de l'environnement de la commande. [...]

SUDO_UID Définissez l'ID utilisateur de l'utilisateur qui a appelé sudo.

SUDO_USER Définissez le nom de connexion de l'utilisateur qui a appelé sudo.


Mais pourquoi sudo echo $SUDO_USERne produit rien?
— Robert

1

SUDO_USER peut être écrasé par l'utilisateur.

 $ SUDO_USER='lala' sudo SUDO_USER='test' printenv | grep USER
 USER=root
 SUDO_USER=test
 USERNAME=root

Vous devez utiliser «qui suis-je» ou «nom du journal» pour obtenir le nom d'utilisateur d'origine

toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' logname             
toto
toto:~$ SUDO_USER='lala' sudo SUDO_USER='test' who am i
toto   pts/4        Jan 23 15:13 (:0.0)

Venant de /programming/4598001/how-do-you-find-the-original-user-through-multiple-sudo-and-su-commands


Après avoir exécuté Sudo su - "les variables d' environnement ne sont pas disponibles, mais lognameet le who am itravail.
— RickMeasham

Vous avez raison, il n'est pas possible de s'appuyer sur une variable d'environnement.
— cladmi

Trouvé sur un hôte que SUDO_USER ne peut pas être écrasé: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER il peut donc toujours être sûr, devrait toujours vérifier cela.
— cladmi

C'est parce que ma commande est définie comme "NOPASSWD", donc cela dépend de la configuration de votre sudoers via "NOSETENV".
— cladmi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.