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?

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

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.


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


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
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.