Benutzername vor sudo

8

Ich habe ein Skript, das sudo erfordert, aber das Skript muss Parameter entsprechend dem ursprünglichen Benutzer festlegen, wie z.

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

Wenn ich es unter sudo setze, lande ich einfach bei chmod root:root, was nicht hilft.

Wie kann ich den Benutzernamen vor sudo erhalten?

e-satis
quelle

Antworten:

11

Die Umgebungsvariable SUDO_USER sollte als Ersatz für USER dienen.

Da Sie den Besitz auf USER: USER setzen, gehe ich davon aus, dass es immer eine Gruppe mit demselben Namen wie der Benutzer gibt. Eine strengere Lösung könnte andernfalls die Verwendung von SUDO_UID und SUDO_GID sein.

Zwei mögliche Lösungen wären dann:

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

oder

chown "${SUDO_UID}:${SUDO_GID}" dir
andol
quelle
Schöne Antwort, mit der Lösung UND einigen zusätzlichen Infos.
E-Satis
Die Verwendung der UID / GID ist die beste Lösung, da mehrere UIDs mit demselben Benutzernamen verwendet werden können.
Duffbeer703
4

Sie können die SUDO_USERVariable verwenden:

sudo bash -c 'echo $SUDO_USER'

Von der Sudo- Manpage:

sudo verwendet die folgenden Umgebungsvariablen. Die Sicherheitsrichtlinie hat die Kontrolle über den tatsächlichen Inhalt der Befehlsumgebung. [...]

SUDO_UID Stellen Sie die Benutzer-ID des Benutzers ein, der sudo aufgerufen hat.

SUDO_USER Stellen Sie den Anmeldenamen des Benutzers ein, der sudo aufgerufen hat.

Kyle Brandt
quelle
Aber warum sudo echo $SUDO_USERgibt nichts aus?
Robert
1

SUDO_USER kann vom Benutzer überschrieben werden.

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

Sie sollten 'who am i' oder 'logname' verwenden, um den ursprünglichen Benutzernamen zu erhalten

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)

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

cladmi
quelle
Nach dem Ausführen von ‚sudo su -‘ sind die Umgebungsvariablen nicht verfügbar, aber lognameund who am iArbeit.
RickMeasham
Sie haben Recht, es ist nicht möglich, sich auf Umgebungsvariablen zu verlassen.
Cladmi
Auf einem Host wurde festgestellt, dass SUDO_USER nicht überschrieben werden kann: sudo: sorry, you are not allowed to set the following environment variables: SUDO_USER Es ist also möglicherweise immer noch sicher, sollte dies dennoch überprüfen.
Cladmi
Das liegt daran, dass mein Befehl auf "NOPASSWD" eingestellt ist. Dies hängt also von der Konfiguration Ihres Sudoers über "NOSETENV" ab.
Cladmi