su und sudo erlauben es, Befehle oder Shell mit einem anderen Benutzer auszuführen. Abhängig davon, wie sie aufgerufen werden, können sich die Umgebungsvariablen ändern, was zu unterschiedlichen Befehlsergebnissen führt.
Sowohl „su“ als auch „sudo“ ermöglichen es, Befehle im Namen anderer Benutzer auszuführen. Die Verwendung von su impliziert die Kenntnis des „anderen“ Benutzerkennworts, außer wenn es von root aufgerufen wird. Es gibt nicht viel Kontrolle darüber, was der Benutzer tun kann, wenn der Zugriff gewährt wird, gibt es keine Einschränkung.
In sudo gibt es eine feine Kontrolle darüber, was der Benutzer tun kann, welche Befehle ausgeführt werden können. Das Passwort des „anderen“ Benutzers muss nicht bekannt sein. Die Berechtigungen werden in einer Konfigurationsdatei festgelegt.
Hinweis :Die Verwendung von sudo su [USER] sollte vermieden werden, da es zwei Sicherheitskontextänderungen verwendet. Es wird empfohlen, sudo -u [USER] zu verwenden.
su – einen Befehl mit Ersatzbenutzer und Gruppen-ID ausführen
Aus der Manpage:
su allows to run commands with substitute user and group ID. When called without arguments su defaults to running an interactive shell as root. For backward compatibility su defaults to not change the current direc‐ tory and to only set the environment variables HOME and SHELL (plus USER and LOGNAME if the target user is not root). It is recommended to always use the --login option (instead it's shortcut -) to avoid side effects caused by mixing environments.
Beispiel:
# su opc -c 'echo $PATH' /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# su - opc -c 'echo $PATH' /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/opc/.local/bin:/home/opc/bin
In „su opc“ sind die zum Ausführen des Befehls verwendeten Umgebungsvariablen die ursprünglichen, in diesem Fall die Benutzer-Root-Umgebung. Wird der Befehl mit „– “ oder „–anmelden ” ist die Umgebung der Benutzer „opc“, mit Ausnahme von „TERM“.
Wie auf der Handbuchseite erklärt:
-, -l, --login Starts the shell as login shell with an environment similar to a real login: o clears all environment variables except for TERM o initializes the environment variables HOME, SHELL, USER, LOGNAME, PATH o changes to the target user's home directory o sets argv[0] of the shell to '-' in order to make the shell a login shell
sudo – einen Befehl als anderer Benutzer ausführen
Aus der Manpage:
sudo allows a permitted user to execute a command as the superuser or another user, as specified by the security policy. The invoking user's real (not effective) user ID is used to determine the user name with which to query the security policy.
Beispiel:
# sudo -u opc bash -c 'echo $PATH' /sbin:/bin:/usr/sbin:/usr/bin
# sudo -i -u opc bash -c 'echo $PATH' /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/home/opc/.local/bin:/home/opc/bin
In „sudo“ wird die Umgebungsvariable von der ursprünglichen Sitzung an die „sudo“-Sitzung übergeben, wie in /etc/sudoers:
definiertDefaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Die definierten Variablen bleiben erhalten.
Die Verwendung von „sudo -i“ kann dazu führen, dass einige Variablen zurückgesetzt werden:
-i, --login Run the shell specified by the target user's password data‐ base entry as a login shell. This means that login-specific resource files such as .profile, .bash_profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's -c option. If no command is specified, an interactive shell is executed. sudo attempts to change to that user's home directory before running the shell. The command is run with an environment similar to the one a user would receive at log in. Note that most shells behave differently when a command is specified as compared to an interactive session; consult the shell's man‐ ual for details. The Command environment section in the sudoers(5) manual documents how the -i option affects the environment in which a command is run when the sudoers policy is in use.
Beispiel:Von der Standardeinstellung /etc/sudoers wird die PS1-Variable beibehalten:
# PS1="%: " sudo -u opc bash %:
# PS1="%: " sudo -i -u opc bash [opc@[HOSTNAME] ~]$
Wenn „-i“ verwendet wird, werden Anmelderessourcendateien ausgeführt, die PS1-Variable wurde zurückgesetzt, wie in /etc/bashrc festgelegt.