Es hängt stark davon ab, wie Sie Ihr Programm mit sudooder aufrufen su.
ZB auf dem System, auf dem ich gerade bin:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Wobei [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Umgebungsvariablen werden für 1 und 5 zurückgesetzt, entnommen aus $ USER in 2,3,4.
So einen Skript oder ein Programm , das mit einer anderen Option gestartet wird , kann sehen , anders $PATH, $HOMEkann die Schale liest anders .bashrc, .profileund Umgebungsvariablen. Es liest die mit dem verknüpfte Datei $HOME. Jeder Benutzer kann seine Umgebung auf unterschiedliche Weise ändern (Variablen $PATH, .bashrc, .profile, .bash_profile, alias ...). Insbesondere kann ein Benutzer eine andere Reihenfolge der Verzeichnisse in seinem Verzeichnis haben $PATHund infolgedessen kann ein Skript einen Befehl ausführen, z. B. /home/$USER/binin dem Pfad, der von root erwartet wird.
Sie können das Programm unter ausführen, sudo -ials su -wären Sie als root mit angemeldet , aber Sie können ein anderes Verhalten haben, wenn Sie es mit sudo MyCommandoder mit ausführen su -c MyCommand.
Von man su:
Im Beschreibungsteil:
Die aktuelle Umgebung wird an die neue Shell übergeben . Der Wert von $ PATH wird zurückgesetzt auf / bin: / usr / bin für normale Benutzer oder / sbin: / bin: / usr / sbin: / usr / bin für den Superuser
...
In den Optionen Teil:
- , -l , --login
Eine Umgebung bereitstellen , die der vom Benutzer erwarteten Umgebung ähnelt, wenn der Benutzer direkt angemeldet ist .
Vom Menschen sudo
-i , --login Führt
die vom Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmeldeshell aus. Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Befehl angegeben wird, wird er über die Option -c der Shell zur Ausführung an die Shell übergeben. Wird kein Befehl angegeben, wird eine interaktive Shell ausgeführt. sudoversucht, in das Ausgangsverzeichnis dieses Benutzers zu wechseln, bevor die Shell ausgeführt wird. Der Befehl wird in einer Umgebung ausgeführt, die der Umgebung ähnelt, die ein Benutzer beim Anmelden erhalten würde . Der Abschnitt Befehlsumgebung im Handbuch sudoers (5) dokumentiert, wie sich die Option -i auf die Umgebung auswirkt, in der ein Befehl ausgeführt wird, wenn die sudoers-Richtlinie verwendet wird.