Ottieni la variabile di ambiente di un altro utente [chiuso]


23

C'è un modo per vedere la variabile d'ambiente di un altro utente? Voglio farlo come root, quindi immagino che i permessi non saranno un problema.

Per l'utente stesso, utilizzo echo $PATHo set | grep PATH(o setquando non ricordo il nome della variabile). Quale sarebbe un'istruzione simile per un altro utente?

Per quello che vale, sono su Ubuntu Server 13.04.


4
Gli utenti non hanno variabili d'ambiente, i processi lo fanno. È comune che i processi eseguiti da un utente non abbiano tutti lo stesso ambiente. Che problema stai cercando di risolvere?
Gilles 'SO- smetti di essere malvagio' il

@Gilles ad esempio, voglio sapere quale cartella MAIL ha un utente. Potrei accedere come quell'utente, quindi fare echo $MAIL, ma ho pensato che potrebbe esserci un collegamento.

3
Ciò non definisce ancora la domanda in modo utile (e ad esempio la risposta che hai accettato può o meno funzionare a seconda di molti fattori). Stai cercando la posizione della casella di posta predefinita? Stai cercando la posizione in cui l'utente riceve effettivamente la sua posta locale (che potrebbe essere diversa e potrebbe non esistere, se l'utente ha un .forward)? Gli utenti spesso impostano alcune variabili nei loro .profileo in altri file di configurazione e non c'è modo di enumerarli in modo affidabile. Ancora una volta, quale problema stai cercando di risolvere?
Gilles 'SO- smetti di essere malvagio' il

Risposte:


20

Un'altra opzione è usare env. Esegui come root:

sudo -Hiu $user env | grep $var

Per esempio

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon

1
Quando accedo come root ed eseguo questo comando per il mio nome utente standard, ottengo HOME=/root. Questa è la home directory di root, ma è non è la mia home directory standard. Se si desidera conoscere l'ambiente che un determinato utente otterrebbe quando accede, è necessario eseguire gli script di avvio della shell di accesso di questo particolare utente (e ricordare che la sua shell di accesso potrebbe essere diversa dalla shell di accesso).
Uwe,

@Uwe su quale sistema? Funziona bene per me. Vuoi dire che accedi come rootdal gestore degli accessi? Funziona bene se passo a un tty e accedo come root.
terdon

Sono su una macchina Debian. Eseguo il login, apro un xterm, corro env | grep HOMEe ottengo HOME=/home/uwe; Eseguo sue poi ancora una volta env | grep HOMEe ottengo HOME=/root, quindi corro sudo -u uwe env | grep HOMEe ancora ottengo HOME=/root.
Uwe,

@uwe strano. Sono anche su una macchina Debian (LMDE), ho fatto esattamente lo stesso processo che hai descritto (anche usato al xtermposto del mio solito terminale) e ho ottenuto il risultato atteso.
terdon

Secondo il manuale, sudoimposta la variabile HOME solo se -Hè presente l' opzione o se /etc/sudoersè impostata la voce corrispondente . Sembra che i nostri file sudoers siano diversi. Ad ogni modo, è probabilmente una buona idea usare -Hqui, e forse anche -i.
Uwe,

2

Per un utente, puoi fare così:

su - <username> -c '. ~/.profile; echo $PATH'

Elenco $ PATH di tutti gli utenti:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil Staps

. ~/.profileè quindi un trucco che imparo dalla mia persona preferita, Peteris Krumins. Ha spiegato il trucco qui . Forse più tardi la versione bash ha avuto la costruzione con l'opzione NON_INTERACTIVE_LOGIN_SHELLS.


Grazie! Perché $PATHfunziona anche senza la . ~/.profile; parte - a cosa serve?

@CamilStaps Cosa intendi con "funziona"? Sì, ottieni un valore $PATHanche senza approvvigionamento ~/.profile, ma quasi certamente non è quello che desideri (= il valore che questo utente vedrebbe al momento dell'accesso). Anche il sourcing ~/.profilenon è completamente affidabile, poiché l'utente potrebbe utilizzare una shell il cui file di avvio è diverso da ~/.profile.
Uwe,

@Uwe ho ottenuto lo stesso risultato senza, ma immagino che sia solo una coincidenza.

Stai assumendo che l'utente non stia usando csh.
Glenn Jackman,

@CamilStaps La prima domanda è se quel particolare utente modifica il suo PERCORSO nel suo ~/.profile. Ma in ogni caso, il comportamento di sudopuò essere configurato abbastanza in /etc/sudoers(vedi la mia discussione con terdon), quindi quando i nostri sistemi si comportano in modo diverso, ciò è probabilmente causato da differenze nei file di configurazione.
Uwe,

0

dalla radice puoi su -all'utente e quindi grep la variabile d'ambiente che vuoi vedere:

su - <username> -c 'echo $PATH'


per qualche motivo questo non funziona per me, anche se il comando viene eseguito come un altro utente. Ho finito per usare "env", quindi runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2per me funziona bene. Se non sei root, devi aggiungere il prefisso al comando sudo.
Andrei-Niculae Petre,
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.