Wie bringe ich sudo -u $ user dazu, die Benutzer env zu verwenden?

19

Es scheint, als sudowürde sudo -u $userdie Umgebung von root immer noch benutzt, wenn man das Programm herunterlädt . Wie kann ich sudodie Benutzerumgebung nutzen? als spezieller hinweis haben nicht alle benutzer, bei denen ich dies verwenden werde, login shells.

Xenoterracid
quelle
Definieren Sie "Umgebung". # whoami => root # sudo -u user whoami => user
Alex
1
@alex I Abbildung sudo -u userist analog zum su userUmschalten des Env in Su, das Sie verwenden müssensu - user
Xenoterracide
Aber was meinst du mit "der Umgebung des Benutzers", wenn der Benutzer keine Login-Shell hat?
Thomas Themel
@Thomas-Benutzer können Programme ausführen, auch wenn sie keine Shell verwenden können ... Ich glaube, -usie ignorieren auch Gruppen ... Ich habe etwas von root aus versucht (mit sudo -u down) und es hat anscheinend funktioniert, anscheinend nicht für den Benutzer. .. also muss ich sicherstellen, dass ich Befehle auf eine Art und Weise ausführe, die alle Einschränkungen und Umweltprobleme mit sich bringt.
Xenoterracide

Antworten:

21

Versuchen sudo -i -u $user

gerald@book:~$ env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -u ubuntu env |grep HOME
HOME=/home/gerald
gerald@book:~$ sudo -i -u ubuntu env |grep HOME
HOME=/home/ubuntu
Gerald Schneider
quelle
funktioniert leider nicht, wenn sie keine Shell in /etc/passwd:( haben, aber ich schätze ...
Xenoterracide
Auf der Manpage sieht es so aus, -Eals wäre dies diejenige, die die Umgebung schützt, dh alle Umgebungsvariablen usw. sind vorhanden, obwohl sie immer noch nicht festgelegt sind PATHund LD_LIBRARY_PATHfür den aufrufenden Benutzer gelten.
Shahbaz
1
$SUDO_USERkann verwendet werden
Rahul Patil
4

man sudoerson Debian erwähnt eine andere Möglichkeit. Sie sind sich nicht sicher, welchen Weg Sie einschlagen möchten, aber Ihre Frage klingt so, als hätten Sie die env_resetOption /etc/sudoers- das Gegenteil ist im Grunde die env_keepListe. Um das richtige zu setzen HOME, können Sie die -HOption verwenden, um sudodirekt oder, erneut in sudoers, mit der always_set_homeOption.

Alternativ können Sie auch env_fileeine genaue Umgebung angeben, die Sie übergeben möchten. Ich halte es jedoch für das Beste, wenn Sie sich die env_*Optionen von ansehen man sudoers, denn Sie /etc/sudoerskontrollieren alles und darauf sollten Sie sich konzentrieren.

Hier ist ein Teil des Kontexts, in dem ich env_resetin meiner sudoersDatei verwende:

Defaults        !lecture
Defaults        env_reset
Defaults        syslog=auth
Defaults        log_year
0xC0000022L
quelle
1

Beim Sudo werden Umgebungsvariablen nicht beibehalten.

In meinem Fall verwende ich hier-Dokument .

Sie legen Ihre Handlungen beispielsweise my_script.shin Ihr HIER-DOKUMENT:

su -u some_user <<EOF
./my_script.sh
EOF

Sie sollten Variablen nicht direkt hier einfügen, da sie von Ihrem aktuellen Benutzer interpretiert würden.

su -u some_user <<EOF
./my_script.sh $MY_VAR
EOF

Wenn $MY_VARfür den Benutzer, der das Skript ausführt, nicht festgelegt ist, wird es nicht festgelegt.

Ihre Variable muss in Ihren Skripten aufgerufen werden, oder Sie müssen sie mit Escapezeichen versehen \.

Z.B.

su -u some_user <<EOF
./my_script.sh \$MY_VAR
EOF

Hier $MY_VARwird some_userkontextuellen Wert haben.

Juaniyyoo
quelle
Gute Antwort. Eine kleine Korrektur: Es sollte su - some_userstatt su -u some_user.
Rudolfbyker