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 es PATH
unberührt bleiben. Was ist los? Wie ändere ich das? (Dies ist unter Ubuntu 8.04).
UPDATE: Soweit ich sehen kann, wurde keines der Skripte PATH
in irgendeiner Weise als Root-Änderung gestartet .
Von man sudo
:
Um das Spoofing von Befehlen zu verhindern, überprüft sudo zuletzt ``. '' Und `` '' (beide bezeichnen das aktuelle Verzeichnis), wenn im PATH des Benutzers nach einem Befehl gesucht wird (wenn sich einer oder beide im PATH befinden). Beachten Sie jedoch, dass die tatsächliche Umgebungsvariable PATH nicht geändert und unverändert an das von sudo ausgeführte Programm übergeben wird.
path
environment-variables
sudo
Michiel de Mare
quelle
quelle
Antworten:
Das ist
eine nervige Funktionein Merkmal von sudo auf vielen Distributionen.Um dieses "Problem" auf Ubuntu zu umgehen, gehe ich in meinem ~ / .bashrc wie folgt vor
Beachten Sie, dass das oben Gesagte für Befehle funktioniert, die $ PATH selbst nicht zurücksetzen. `Su 'setzt jedoch $ PATH zurück, sodass Sie -p verwenden müssen, um anzuweisen, dass dies nicht der Fall ist. IE:
quelle
Für den Fall, dass jemand anderes dies tut und einfach alle Pfadvariablenänderungen für alle Benutzer deaktivieren möchte.
Greifen Sie mit dem folgenden Befehl auf Ihre sudoers-Datei zu :
visudo
. Sie sollten irgendwo die folgende Zeile sehen:In der nächsten Zeile sollten Sie Folgendes hinzufügen
Der sichere Pfad ist standardmäßig aktiviert. Diese Option gibt an, was beim Sudoing $ PATH machen soll. Das Ausrufezeichen deaktiviert die Funktion.
quelle
Defaults env_keep = "PATH"
PATH
ist eine Umgebungsvariable und wird daher standardmäßig von sudo zurückgesetzt.Sie benötigen spezielle Berechtigungen, um dies zu tun.
Von
man sudo
Ein Anwendungsbeispiel:
aktualisieren
Möglicherweise muss also überprüft werden, ob dies kompiliert ist / nicht.
Es ist standardmäßig in Gentoo
quelle
Sieht so aus, als ob es diesen Fehler schon eine ganze Weile gibt! Hier sind einige Fehlerreferenzen, die Sie möglicherweise hilfreich finden (und die Sie abonnieren / abstimmen möchten, Hinweis, Hinweis ...):
Debian-Fehler # 85123 ("sudo: SECURE_PATH kann immer noch nicht überschrieben werden") (ab 2001!)
Sie erwähnen, dass Sie so etwas in Ihre Sudoers-Datei aufnehmen:
aber wenn ich das zumindest in Ubuntu 8.10 mache, gibt es mir diesen Fehler:
Ubuntu-Fehler # 50797 ("Sudo mit --with-Secure-Path ist problematisch")
Ubuntu-Fehler # 192651 ("Sudo-Pfad wird immer zurückgesetzt")
Ubuntu-Fehler # 226595 ("PATH kann nicht beibehalten / angegeben werden")
quelle
Das schien für mich zu funktionieren
das nimmt das Nicht-Sudo auf
PATH
quelle
Ich denke, es ist in der Tat wünschenswert, dass sudo den PATH zurücksetzt: Andernfalls könnte ein Angreifer, der Ihr Benutzerkonto kompromittiert hat, Backdoor-Versionen aller Arten von Tools auf den PATH Ihrer Benutzer setzen, die bei Verwendung von sudo ausgeführt werden.
(Natürlich ist das Zurücksetzen des Pfads durch sudo keine vollständige Lösung für diese Art von Problemen, aber es hilft)
Dies ist in der Tat, was passiert, wenn Sie verwenden
in / etc / sudoers ohne
exempt_group
oderenv_keep
.Dies ist auch praktisch, da Sie dem sudo-Pfad Verzeichnisse hinzufügen können, die nur für root (wie
/sbin
und/usr/sbin
) nützlich sind, ohne sie den Pfaden Ihrer Benutzer hinzuzufügen. So geben Sie den von sudo zu verwendenden Pfad an:quelle
Funktioniert jetzt mit Sudo aus den karmischen Repositories. Details aus meiner Konfiguration:
Es ist wunderbar, dies endlich ohne Hack lösen zu können.
quelle
quelle
Kommentieren Sie einfach "Defaults env_reset" in / etc / sudoers aus
quelle
Nur bearbeiten
env_keep
in/etc/sudoers
Es sieht ungefähr so 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 am Ende einfach PATH hinzu, damit es nach der Änderung folgendermaßen aussieht:
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 Sie es erneut.
quelle
Secure_path ist dein Freund, aber wenn du dich von Secure_path befreien willst, tu es einfach
Und anhängen
Wenn Sie eine Gruppe von Benutzern ausnehmen möchten, erstellen Sie eine Gruppe, fügen Sie alle Benutzer hinzu und verwenden Sie diese als Ihre Ausnahmegruppe. Mann 5 Sudoers für mehr.
quelle
Die empfohlene Lösung in den Kommentaren zur OpenSUSE-Distribution schlägt vor, Folgendes zu ändern:
zu:
und dann vermutlich, um die folgende Zeile zu kommentieren, die nicht benötigt wird:
quelle
Das Auskommentieren von "Standard-env_reset" und "Standard-sicherer_Pfad ..." in der Datei / etc / sudores funktioniert für mich
quelle
Sie können Ihre Datei auch in ein von sudoers verwendetes Verzeichnis verschieben:
quelle
Ähm, es ist nicht wirklich ein Test, wenn Sie Ihrem Pfad nichts hinzufügen:
quelle
Der PATH wird bei Verwendung von su oder sudo durch die Definition von ENV_SUPATH und ENV_PATH zurückgesetzt, die in /etc/login.defs definiert sind
quelle
$ PATH ist eine Umgebungsvariable und bedeutet, dass der Wert von $ PATH für andere Benutzer unterschiedlich sein kann.
Wenn Sie sich bei Ihrem System anmelden, entscheidet Ihre Profileinstellung über den Wert von $ PATH .
Schauen wir uns jetzt Folgendes an: -
Angenommen, dies sind die Werte von $ PATH für verschiedene Benutzer. Wenn Sie nun einen Befehl mit sudo ausführen, führt der Root- Benutzer diesen Befehl tatsächlich aus.
Sie können dies bestätigen, indem Sie die folgenden Befehle auf dem Terminal ausführen: -
Das ist der Grund. Ich denke es ist dir klar.
quelle