GNU/Linux >> Tutoriales Linux >  >> Linux

Variables de entorno de usuario con "su" y "sudo" en Linux

su y sudo permiten ejecutar comandos o shell con un usuario diferente. Dependiendo de cómo se invoquen, las variables de entorno pueden cambiar, provocando diferentes resultados de comando.

Tanto "su" como "sudo" permiten ejecutar comandos en nombre de otro usuario. El uso de su implica el conocimiento de la contraseña del "otro" usuario, excepto si lo invoca root. No hay mucho control sobre lo que puede hacer el usuario, si se otorga el acceso no hay restricción.

En sudo hay un control preciso sobre lo que el usuario puede hacer, qué comandos se pueden ejecutar. No es necesario conocer la contraseña del “otro” usuario. Los permisos se establecen en un archivo de configuración.

Nota :Debe evitarse el uso de sudo su [USER], ya que utiliza dos cambios de contexto de seguridad. Se recomienda usar sudo -u [USUARIO].

su:ejecuta un comando con el usuario sustituto y el ID de grupo

Desde la página del manual:

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.

Ejemplo:

# 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

En “su opc” la variable de entorno utilizada para ejecutar el comando es la original, en este caso el entorno raíz del usuario. Si el comando se invoca con “ ” o “–iniciar sesión ” el entorno es el usuario “opc”, excepto “TERM”.

Como se explica en la página del manual:

-, -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:ejecuta un comando como otro usuario

Desde la página del manual:

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.

Ejemplo:

# 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

En "sudo", la variable de entorno se pasa de la sesión original a la sesión "sudo" como se define en /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"

Las variables definidas se conservan.

El uso de "sudo -i" puede hacer que se restablezcan algunas 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.

Ejemplo, del /etc/sudoers predeterminado, se conservará la variable PS1:

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

Si se usa "-i", hará que se ejecuten los archivos de recursos de inicio de sesión, la variable PS1 se restableció como se estableció en /etc/bashrc.


Linux
  1. Cómo configurar y desactivar variables de entorno locales, de usuario y de todo el sistema en Linux

  2. Cómo establecer/crear variables de entorno y shell en Linux

  3. 8 mejores prácticas con sudo en Linux:qué hacer y qué no hacer con sudo

  4. Agregue un usuario de Linux con permisos de raíz de documentos

  5. Cómo establecer, enumerar y eliminar variables de entorno en Linux

Cómo establecer y enumerar variables de entorno en Linux

Comprender la diferencia entre los comandos sudo y su en Linux

Cómo establecer y enumerar variables ambientales en Linux

Agregar, eliminar y otorgar privilegios de Sudo a los usuarios en Alpine Linux

Cómo configurar y desactivar variables de entorno en Linux

Variables de entorno de Linux