GNU/Linux >> Linux Esercitazione >  >> Linux

Variabili d'ambiente utente con "su" e "sudo" in Linux

su e sudo consentono di eseguire comandi o shell con un utente diverso. A seconda di come vengono richiamate, le variabili di ambiente possono cambiare, causando risultati di comando diversi.

Sia "su" che "sudo" consentono di eseguire comandi per conto di altri utenti. L'utilizzo di su implica la conoscenza della password dell'utente “altro” salvo se invocata da root. Non c'è molto controllo su ciò che l'utente può fare, se l'accesso è concesso non ci sono restrizioni.

In sudo c'è un controllo preciso su cosa può fare l'utente, quali comandi possono essere eseguiti. Non è necessario conoscere la password dell'utente “altro”. I permessi sono impostati in un file di configurazione.

Nota :L'uso di sudo su [USER] dovrebbe essere evitato, poiché utilizza due modifiche al contesto di sicurezza. Si consiglia di utilizzare sudo -u [USER].

su – esegui un comando con utente sostitutivo e ID gruppo

Dalla pagina man:

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.

Esempio:

# 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” la variabile d'ambiente utilizzata per eseguire il comando è quella originale, in questo caso l'ambiente root dell'utente. Se il comando viene invocato con “ ” o “–accesso ” l'ambiente è l'utente “opc”, ad eccezione di “TERM”.

Come spiegato dalla pagina di manuale:

-, -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 – esegue un comando come un altro utente

Dalla pagina man:

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.

Esempio:

# 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” le variabili d'ambiente vengono passate dalla sessione originale alla sessione “sudo” come definito in /etc/sudoers:

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"

Le variabili definite vengono conservate.

L'uso di "sudo -i" può causare il ripristino di alcune variabili:

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

Esempio, da default /etc/sudoers, la variabile PS1 sarà conservata:

# PS1="%: " sudo -u opc bash
%:
# PS1="%: " sudo -i -u opc bash
[opc@[HOSTNAME] ~]$

Se viene utilizzato "-i", verrà eseguito il file delle risorse di accesso, la variabile PS1 è stata reimpostata come impostata in /etc/bashrc.


Linux
  1. Monitoraggio dello stato dell'utente e dell'attività in Linux con GNU acct

  2. Come impostare/creare variabili di ambiente e shell in Linux

  3. Come lavorare con utenti e gruppi in Linux

  4. Aggiungi un utente Linux con autorizzazioni di root del documento

  5. Impostazione delle variabili di ambiente Linux

Come impostare ed elencare le variabili di ambiente in Linux

Comprendere la differenza tra il comando sudo e su su Linux

Come impostare ed elencare variabili ambientali in Linux

Aggiungi, elimina e concedi privilegi Sudo agli utenti in Alpine Linux

Come impostare e annullare l'impostazione delle variabili di ambiente su Linux

Variabili d'ambiente Linux