GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Benutzerumgebungsvariablen Mit „su“ und „sudo“ unter Linux

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:

definiert
Defaults 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.


Linux
  1. So setzen und löschen Sie lokale, benutzer- und systemweite Umgebungsvariablen in Linux

  2. Benutzerstatus- und Aktivitätsüberwachung in Linux mit GNU-Konto

  3. So setzen/erstellen Sie Umgebungs- und Shell-Variablen in Linux

  4. So erstellen Sie einen Sudo-Benutzer unter Rocky Linux und CentOS

  5. So setzen, listen und entfernen Sie Umgebungsvariablen in Linux

So setzen und listen Sie Umgebungsvariablen in Linux auf

Verstehen des Unterschieds zwischen dem Befehl sudo und su unter Linux

So setzen und listen Sie Umgebungsvariablen in Linux auf

Hinzufügen, Löschen und Gewähren von Sudo-Berechtigungen für Benutzer in Alpine Linux

So setzen und löschen Sie Umgebungsvariablen unter Linux

Linux-Umgebungsvariablen