Sie können überprüfen, warum (es ist anders), indem Sie ausführen sudo sudo -V.
Zum Beispiel unter Linux:
$ sudo sudo -V | grep PATH
Value to override user's $PATH with: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Hinweis: Bei macOS / BSD, nur laufen: sudo sudo -V.
Die obige Liste ist aufgrund des Standardsicherheitsrichtlinien-Plugins in einigen Linux-Distributionen eingeschränkt.
Dies wird weiter erläutert in man sudoers:
Wenn die secure_pathOption gesetzt ist, wird ihr Wert für die PATHUmgebungsvariable verwendet.
secure_path- Pfad, der für jeden Befehl verwendet wird, der von sudo ausgeführt wird. Wenn Sie den Leuten, die sudo ausführen, nicht vertrauen, dass sie eine vernünftige PATHUmgebungsvariable haben, können Sie diese verwenden.
Eine andere Verwendung ist, wenn Sie möchten, dass der „Stammpfad“ vom „Benutzerpfad“ getrennt ist. Benutzer in der durch die exempt_groupOption angegebenen Gruppe sind nicht betroffen secure_path. Diese Option ist standardmäßig nicht aktiviert.
Wenn dies der Fall ist, können Sie dies ändern, indem Sie sudo visudodie Konfigurationsdatei ausführen und bearbeiten und Ihren secure_path(durch getrennten :) zusätzlichen Pfad ändern oder Ihren Benutzer hinzufügen exempt_group(damit Sie nicht von den secure_pathOptionen betroffen sind ).
Oder PATHSie können Folgendes ausführen, um die temporäre Gültigkeit des Benutzers zu beenden:
sudo env PATH="$PATH" my_command
und Sie können das überprüfen, indem Sie:
sudo env PATH="$PATH" env | grep ^PATH
Siehe auch: Wie macht man sudoKonserven $PATH?
Ein weiterer Grund, warum die Umgebung anders sein könnte sudo, ist, dass env_resetin Ihrer sudoersDatei möglicherweise die Option aktiviert ist . Dadurch werden Befehle in einer neuen, minimalen Umgebung ausgeführt.
So können Sie die env_keepOption (aus Sicherheitsgründen nicht empfohlen ) verwenden, um die Umgebungsvariablen Ihres Benutzers zu erhalten:
Defaults env_reset
Defaults env_keep += "PATH PYTHONPATH"