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?

e-satis
la source

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
andol
la source
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.

Kyle Brandt
la source
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

cladmi
la source
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