Warum funktioniert sudo den PFAD ändern?
Dies ist die PATH
variable ohne sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Dies ist die PATH
variable mit sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Soweit ich das beurteilen kann, sudo
soll lassen PATH
unberührt. Was ist Los? Wie kann ich das ändern? (Das ist unter Ubuntu 8.04).
UPDATE: soweit ich das sehen kann, keines der Skripte als root gestartet ändern PATH
in keiner Weise.
Vom man sudo
:
Verhindern Befehl spoofing, sudo
Kontrolle. ` " und `" (beide bezeichnen
aktuelle Verzeichnis) zuletzt bei der Suche
für ein Befehl im PFAD des Benutzers (wenn
eine oder beide sind im WEG). Hinweis,
jedoch, dass Sie den tatsächlichen PFAD
die environment-variable wird nicht geändert
und unverändert verabschiedet werden, um das Programm
sudo ausführt.
- Macht root alles, das PATH setzt in .bashrc? Dies ist unter der Annahme, dass, da Sie auf Linux, sh ist wirklich bash.
- unix.stackexchange.com/questions/83191/... || unix.stackexchange.com/questions/8646/... || superuser.com/questions/98686/passing-path-through-sudo
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist
eine lästige Funktioneine Funktion, sudo auf vielen Distributionen.Arbeiten, um dieses "problem" auf ubuntu ich tun
Folgendes in meine ~/.bashrc
Beachten Sie die oben genannten arbeiten für Befehle, die nicht zurückgesetzt-die $PATH selbst.
Aber `su' setzt es in $PATH, also müssen Sie -p zu sagen, es nicht zu. I. E.:
Den Fall, dass jemand anderes läuft über diese und will einfach alle deaktivieren path-variable ändern für alle Benutzer.
Zugriff auf Ihre sudoers-Datei mit dem Befehl:
visudo
. Sollten Sie die folgende Zeile irgendwo:die Sie sollten, fügen Sie den folgenden in der nächsten Zeile
secure_path ist standardmäßig aktiviert. Diese option gibt an, was zu machen, $PFAD, wenn sudoing. Das Ausrufezeichen deaktiviert die Funktion.
Defaults env_keep = "PATH"
PATH
ist eine Umgebungsvariable, und als solche ist die Standardeinstellung zurücksetzen, indem Sie sudo.Benötigen Sie spezielle Berechtigungen gestattet sein, dies zu tun.
Vom
man sudo
Ein Beispiel für die Verwendung:
update
So brauchen kann, um zu überprüfen, dass dies ist/wird nicht kompiliert.
Es ist standardmäßig in Gentoo
Sieht aus wie dieser bug gibt es schon seit einer Weile! Hier sind einige Fehler verweisen, die Sie vielleicht nützlich finden (und eventuell abonnieren möchten /vote oben, hint, hint...):
Debian bug #85123 ("sudo: SECURE_PATH kann immer noch nicht außer Kraft gesetzt werden") (von 2001!)
Nennen Sie Sie, so etwas wie dies in Ihrer sudoers-Datei:
aber wenn ich das mache, dass in Ubuntu 8.10 zumindest, es gibt mir diese Fehlermeldung:
Ubuntu bug #50797 ("sudo gebaut --mit-sicherer-Weg ist problematisch")
Ubuntu bug #192651 ("sudo Pfad wird immer zurückgesetzt")
Ubuntu bug #226595 ("unmöglich zu behalten/geben Sie den PFAD")
Diese schien für mich arbeiten,
nimmt die nicht-sudo
PATH
Ich denke, es ist in der Tat wünschenswert, sudo zurücksetzen PFAD: sonst ein Angreifer mit manipulierten Ihrem Benutzer-Konto könnte backdoored Versionen von allen Arten von Werkzeugen, die auf Ihrem Nutzer-PFAD, und Sie würde hingerichtet werden, wenn Sie sudo benutzen.
(natürlich mit sudo zurücksetzen der PFAD ist nicht eine komplette Lösung, um diese Art von Problemen, aber es hilft)
Dies ist in der Tat, was passiert, wenn Sie
in /etc/sudoers ohne Verwendung
exempt_group
oderenv_keep
.Dies ist auch praktisch, denn Sie können Verzeichnisse hinzufügen, die sind nur nützlich für root (wie
/sbin
und/usr/sbin
), um das sudo Weg, ohne das hinzufügen von Ihnen zu Ihrer Benutzer-Pfade. Geben Sie den Pfad verwendet werden sudo:Arbeitet jetzt mit sudo aus den karmic-repositories. Details von meine Konfiguration:
Es ist wunderbar, endlich haben dies gelöst, ohne einen hack.
Kommentiere einfach "Defaults env_reset" in /etc/sudoers
Nur Bearbeiten
env_keep
im/etc/sudoers
Es sieht wie folgt aus:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Fügen Sie einfach WEG am Ende, also nach der änderung würde es so Aussehen:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Schließen Sie das terminal und öffnen es erneut.
Secure_path ist dein Freund, aber wenn Sie wollen, befreit sich von secure_path nur tun
Append
Wenn Sie wollen, zu befreien eine Reihe von Benutzern erstellen Sie eine Gruppe, fügen Sie alle Benutzer, und verwenden Sie diese als Ihre exempt_group. man 5 sudoers für mehr.
die empfohlene Lösung in den Kommentaren auf der OpenSUSE-Distribution schlägt vor zu ändern:
zu:
dann vermutlich, um kommentieren Sie die folgende Zeile, die nicht mehr gebraucht:
Kommentar " sowohl für "Standard-env_reset" und "Standard-secure_path ..." in /etc/sudores-Datei funktioniert bei mir
Sie können auch verschieben Sie die Datei im sudoers-Verzeichnis verwendet :
Äh, es ist nicht wirklich ein test, wenn Sie nicht etwas hinzufügen, um Ihr Pfad:
Den PFAD wird zurückgesetzt, wenn mit su oder sudo, durch die definition von ENV_SUPATH, und ENV_PATH definiert in /etc/login.defs
$PATH ist eine Umgebungsvariable und es bedeutet, dass der Wert $PATH können sich für einen anderen Benutzer.
Wenn Sie tun loggen Sie sich in Ihr system dann Ihr Profil-Einstellung entscheiden, den Wert der $PATH.
Nun, werfen wir einen Blick:-
Angenommen, dass diese Werte von $PATH für verschiedene Benutzer. Nun, wenn Sie die Ausführung eines Befehls mit sudo dann in der eigentlichen Bedeutung root Benutzer ausgeführt wird, der Befehl .
Können Sie bestätigen, dass durch die Ausführung dieser Befehle im terminal :-
Dies ist der Grund. Ich denke, Ihr klar zu Ihnen.