Umgebungsvariable eines anderen Benutzers abrufen [closed]


23

Gibt es eine Möglichkeit, die Umgebungsvariable eines anderen Benutzers anzuzeigen? Ich möchte das als root machen, damit Berechtigungen wohl kein Problem darstellen.

Für den Benutzer selbst verwende ich echo $PATHoder set | grep PATH(oder setwenn ich mich nicht an den Variablennamen erinnere). Was wäre eine ähnliche Anweisung für einen anderen Benutzer?

Für das, was es wert ist, bin ich auf Ubuntu Server 13.04.


4
Benutzer haben keine Umgebungsvariablen, Prozesse schon. Es ist üblich, dass die von einem Benutzer ausgeführten Prozesse nicht alle dieselbe Umgebung haben. Welches Problem versuchen Sie zu lösen?
Gilles 'SO- hör auf böse zu sein'

@ Gilles zum Beispiel möchte ich wissen, welchen MAIL-Ordner ein Benutzer hat. Ich könnte mich dann als dieser Benutzer anmelden echo $MAIL, aber ich dachte, es könnte eine Verknüpfung geben.

3
Das definiert die Frage immer noch nicht sinnvoll (und zum Beispiel kann die von Ihnen akzeptierte Antwort in Abhängigkeit von vielen Faktoren funktionieren oder auch nicht). Suchen Sie nach dem Standardspeicherort für Postfächer? Suchen Sie nach dem Ort, an dem der Benutzer seine lokale E-Mail tatsächlich erhält (was möglicherweise anders ist und nicht existiert, wenn der Benutzer eine hat .forward)? Benutzer legen häufig einige Variablen in ihren .profileoder anderen Konfigurationsdateien fest, und es gibt keine Möglichkeit, sie alle zuverlässig aufzulisten. Nochmals, welches Problem versuchen Sie zu lösen?
Gilles 'SO- hör auf böse zu sein'

Antworten:


20

Eine andere Option ist zu verwenden env. Führen Sie dies aus als root:

sudo -Hiu $user env | grep $var

Beispielsweise

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

1
Wenn ich mich als root anmelde und diesen Befehl für meinen Standardbenutzernamen ausführe, erhalte ich HOME=/root. Das ist das Home-Verzeichnis von root, aber nicht mein Standard-Home-Verzeichnis. Wenn Sie wissen möchten, welche Umgebung ein bestimmter Benutzer bei der Anmeldung erhalten würde, müssen Sie die Startskripts der Anmeldeshell dieses bestimmten Benutzers ausführen (und beachten, dass sich seine Anmeldeshell möglicherweise von Ihrer Anmeldeshell unterscheidet).
Uwe

@Uwe auf welchem ​​System? Es funktioniert gut für mich. Meinen Sie damit, dass Sie sich rootüber den Login-Manager anmelden? Es funktioniert gut, wenn ich zu einem tty gehe und mich als anmelde root.
Terdon

Ich bin auf einer Debian-Maschine. Ich melde mich als uwe an, öffne ein xterm, laufe env | grep HOMEund hole HOME=/home/uwe; Ich führe suund env | grep HOMEbekomme dann noch einmal HOME=/root, dann laufe sudo -u uwe env | grep HOMEund bekomme ich noch HOME=/root.
Uwe

@uwe seltsam. Ich bin auch auf einem Debian-Rechner (LMDE), habe genau den von Ihnen beschriebenen Vorgang ausgeführt (sogar xtermanstelle meines normalen Terminals verwendet) und erhalte das erwartete Ergebnis.
Terdon

sudoSetzt laut Handbuch die Variable HOME nur, wenn die -HOption vorhanden ist oder der entsprechende Eintrag in /etc/sudoersgesetzt ist. Unsere sudoers-Dateien scheinen sich zu unterscheiden. Auf jeden Fall ist es wahrscheinlich eine gute Idee, sie -Hhier und möglicherweise auch zu verwenden -i.
Uwe

2

Für einen Benutzer können Sie folgendermaßen vorgehen:

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

Liste $ PATH aller Benutzer:

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

@Camil Staps

. ~/.profileist also ein Trick, den ich von meinem Lieblingsmenschen Peteris Krumins lerne. Er erklärte den Trick hier . Vielleicht hatte die spätere Bash-Version das Bauen mit Option NON_INTERACTIVE_LOGIN_SHELLS.


Vielen Dank! Denn $PATHes funktioniert auch ohne das . ~/.profile; Teil - wofür ist es?

@CamilStaps Was meinst du mit "es funktioniert"? Ja, Sie erhalten einen Wert für, $PATHauch ohne Sourcing ~/.profile, aber es ist mit ziemlicher Sicherheit nicht der Wert, den Sie möchten (= der Wert, den dieser Benutzer sehen würde, wenn er sich anmeldet). Selbst die Beschaffung ~/.profileist nicht vollständig zuverlässig, da der Benutzer möglicherweise eine Shell verwendet, deren Startdatei sich von der unterscheidet ~/.profile.
Uwe

@Uwe Ich habe die gleiche Ausgabe ohne, aber ich denke, das ist dann nur ein Zufall.

Sie gehen davon aus, dass der Benutzer csh nicht verwendet.
Glenn Jackman

@CamilStaps Die erste Frage ist, ob dieser bestimmte Benutzer seinen PATH in seinem ~/.profileüberhaupt ändert . Aber auf jeden Fall kann das Verhalten von sudoin ziemlich viel konfiguriert werden /etc/sudoers(siehe meine Diskussion mit terdon). Wenn sich unsere Systeme also anders verhalten, liegt das wahrscheinlich an Unterschieden in den Konfigurationsdateien.
Uwe

0

Vom root können Sie su -zum Benutzer und dann zur Umgebungsvariablen greifen, die Sie sehen möchten:

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


Aus irgendeinem Grund funktioniert dies bei mir nicht, auch wenn der Befehl als anderer Benutzer ausgeführt wird. Am Ende habe ich "env" verwendet, so dass runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2für mich etwas in Ordnung ist. Wenn Sie nicht root sind, müssen Sie dem Befehl das Präfix "" voranstellen sudo.
Andrei-Niculae Petre
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.