Nome utente prima di sudo


8

Ho uno script che richiede sudo, ma lo script deve impostare i parametri in base all'utente originale, come ad esempio:

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

Se lo metto su sudo, finisco con chmod root:root, il che non aiuta.

Quindi, come posso ottenere il nome utente prima di sudo?

Risposte:


11

La variabile di ambiente SUDO_USER dovrebbe funzionare come sostituto di USER.

Dato che stai impostando la proprietà su USER: USER Suppongo che ci sia sempre un gruppo con lo stesso nome dell'utente? Una soluzione più rigorosa potrebbe essere quella di utilizzare SUDO_UID e SUDO_GID.

Due possibili soluzioni sarebbero quindi:

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

o

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

Bella risposta, con la soluzione E alcune informazioni aggiuntive.
e-soddisfa il

L'uso di UID / GID è la soluzione migliore, in quanto è possibile avere più UID con lo stesso nome utente.
Duffbeer703,

4

Puoi usare la SUDO_USERvariabile:

sudo bash -c 'echo $SUDO_USER'

Dalla pagina man sudo :

sudo utilizza le seguenti variabili di ambiente. La politica di sicurezza ha il controllo sul contenuto effettivo dell'ambiente del comando. [...]

SUDO_UID Impostato sull'ID utente dell'utente che ha invocato sudo.

SUDO_USER Impostato sul nome di accesso dell'utente che ha invocato sudo.


Ma perché sudo echo $SUDO_USERnon produce nulla?
Robert,

1

SUDO_USER può essere sovrascritto dall'utente.

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

Dovresti usare "who are I" o "logname" per ottenere lo username originale

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)

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


Dopo l'esecuzione di 'sudo su -' le variabili di ambiente non sono disponibili, ma lognamee who am iil lavoro.
RickMeasham,

Hai ragione, non è possibile fare affidamento sulla variabile d'ambiente.
cladmi,

È stato riscontrato su alcuni host che SUDO_USER non può essere sovrascritto: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER quindi potrebbe essere ancora sicuro, dovrebbe comunque verificarlo.
cladmi,

È perché il mio comando è impostato come "NOPASSWD", quindi dipende dalla configurazione del tuo sudoers tramite "NOSETENV".
cladmi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.