Es hängt stark davon ab, wie Sie Ihr Programm mit sudo
oder 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
, $HOME
kann die Schale liest anders .bashrc
, .profile
und 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 $PATH
und infolgedessen kann ein Skript einen Befehl ausführen, z. B. /home/$USER/bin
in dem Pfad, der von root erwartet wird.
Sie können das Programm unter ausführen, sudo -i
als su -
wären Sie als root mit angemeldet , aber Sie können ein anderes Verhalten haben, wenn Sie es mit sudo MyCommand
oder 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. sudo
versucht, 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.