GNU/Linux >> Tutoriels Linux >  >> Linux

Variables d'environnement utilisateur avec "su" et "sudo" sous Linux

su et sudo permettent d'exécuter des commandes ou un shell avec un utilisateur différent. Selon la façon dont elles sont appelées, les variables d'environnement peuvent changer, entraînant des résultats de commande différents.

"su" et "sudo" permettent d'exécuter des commandes au nom d'un autre utilisateur. L'utilisation de su implique la connaissance du mot de passe de l'"autre" utilisateur, sauf s'il est invoqué par root. Il n'y a pas beaucoup de contrôle sur ce que l'utilisateur peut faire, si l'accès est accordé, il n'y a pas de restriction.

Dans sudo, il existe un contrôle précis sur ce que l'utilisateur peut faire, quelles commandes peuvent être exécutées. Il n'est pas nécessaire de connaître le mot de passe de « l'autre » utilisateur. Les autorisations sont définies dans un fichier de configuration.

Remarque :L'utilisation de sudo su [USER] doit être évitée, car elle utilise deux changements de contexte de sécurité. Il est recommandé d'utiliser sudo -u [USER].

su - exécuter une commande avec un utilisateur et un ID de groupe de remplacement

À partir de la page de manuel :

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.

Exemple :

# 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

Dans "su opc", les variables d'environnement utilisées pour exécuter la commande sont celles d'origine, dans ce cas l'environnement de l'utilisateur root. Si la commande est invoquée avec " ” ou “–connexion " l'environnement est l'utilisateur "opc", sauf pour "TERM".

Comme expliqué par la page de manuel :

-, -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 - exécuter une commande en tant qu'un autre utilisateur

À partir de la page de manuel :

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.

Exemple :

# 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

Dans "sudo", la variable d'environnement est transmise de la session d'origine à la session "sudo" comme défini dans /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"

Les variables définies sont conservées.

L'utilisation de "sudo -i" peut entraîner la réinitialisation de certaines variables :

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

Exemple, depuis /etc/sudoers par défaut, la variable PS1 sera conservée :

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

Si "-i" est utilisé, cela entraînera l'exécution des fichiers de ressources de connexion, la variable PS1 a été réinitialisée telle qu'elle est définie dans /etc/bashrc.


Linux
  1. Comment définir et supprimer des variables d'environnement locales, utilisateur et système sous Linux

  2. Surveillance du statut et de l'activité des utilisateurs sous Linux avec compte GNU

  3. Comment travailler avec des utilisateurs et des groupes sous Linux

  4. Comment créer un utilisateur Sudo sur Rocky Linux et CentOS

  5. Ajouter un utilisateur Linux avec des autorisations racine de document

Comment définir et répertorier les variables d'environnement sous Linux

Comprendre la différence entre les commandes sudo et su sous Linux

Comment définir et répertorier les variables d'environnement sous Linux

Ajouter, supprimer et accorder des privilèges Sudo aux utilisateurs dans Alpine Linux

Comment définir et supprimer des variables d'environnement sous Linux

Variables d'environnement Linux