Comando su: diferencia entre su y su -, sudo su y sudo -i, y cómo cambiar de cuenta

Entorno de pruebaFamilia RHELAlmaLinux 9.8util-linux 2.37Cuenta rootDebian 12 · util-linux 2.38 cuenta normalVerificado el 2026-11-05
Comandos de usuarios y grupossuUbicación/usr/bin/su
Ejecutar comandos con otra cuenta

Para ejecutar comandos con otra cuenta en Linux sin cerrar la sesión de la cuenta actual, se usa el comando su. Al ejecutar su desde la cuenta root de un servidor AlmaLinux 9 hacia daemon, una cuenta de sistema que no puede iniciar sesión, un solo guion cambió la carpeta de trabajo y el PATH, y hubo que indicar un shell para que el comando se ejecutara.

La salida de abajo procede de un servidor AlmaLinux 9.8 (cuenta root) y un servidor Debian 12 (cuenta normal). Las pantallas que piden contraseña y sudo no se ejecutaron en un servidor en producción y se resumen según los manuales oficiales; parte del valor de PATH y el número de versión de parche de util-linux del simulador se cambiaron por valores de ejemplo.

1️⃣ Cómo usar el comando su

  • ↪️ Forma básica y volver con exit

La forma básica es [su nombre_de_cuenta], y si omites el nombre de la cuenta, su cambia a root. Si escribes exit en el shell nuevo, ese shell termina y vuelves al shell de la cuenta original que ejecutó su.

Si lo ejecutas desde una cuenta normal, escribes la contraseña de la cuenta de destino en la línea Password: (según la configuración predeterminada de PAM). En este servidor, /etc/pam.d/su omite la autenticación cuando quien lo ejecuta es root, así que no se pidió contraseña al cambiar de la cuenta root a daemon.

su --help

Usage:
 su [options] [-] [<user> [<argument>...]]

Change the effective user ID and group ID to that of <user>.
A mere - implies -l.  If <user> is not given, root is assumed.

Options:
 -m, -p, --preserve-environment      do not reset environment variables
 -w, --whitelist-environment <list>  don't reset specified variables

 -g, --group <group>             specify the primary group
 -G, --supp-group <group>        specify a supplemental group

 -, -l, --login                  make the shell a login shell
 -c, --command <command>         pass a single command to the shell with -c
 --session-command <command>     pass a single command to the shell with -c
                                   and do not create a new session
 -f, --fast                      pass -f to the shell (for csh or tcsh)
 -s, --shell <shell>             run <shell> if /etc/shells allows it
 -P, --pty                       create a new pseudo-terminal

 -h, --help                      display this help
 -V, --version                   display version

For more details see su(1).

Como dice la ayuda, el guion [-] es la opción de inicio de sesión, igual que [-l], y los argumentos escritos después del nombre de la cuenta pasan al shell de la cuenta de destino. En el servidor AlmaLinux 9, su venía en el paquete util-linux 2.37, y en el servidor Debian 12, en el paquete 2.38.

su --version
su from util-linux 2.38.1

Para saber si la cuenta a la que quieres cambiar puede abrir un shell, mira el último campo de su línea en getent passwd.

getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

El shell de daemon era /sbin/nologin. Una cuenta que tiene nologin en lugar de un shell de inicio de sesión no abre un shell aunque cambies a ella con su.

2️⃣ Diferencia entre su y su -

  • ↪️ Shell de inicio de sesión y variables de entorno

Con un guion (-), su abre el mismo shell que obtendrías al iniciar sesión con la cuenta de destino. En la carpeta /tmp se ejecutó el mismo comando una vez sin guion y otra con guion.

su -s /bin/sh -c pwd daemon
/tmp
su - -s /bin/sh -c pwd daemon
/usr/sbin

Sin guion, la carpeta de trabajo siguió siendo /tmp, mientras que [su -] pasó a la carpeta personal de daemon, /sbin. En este servidor /sbin es un enlace a /usr/sbin, por eso pwd mostró /usr/sbin.

En las variables de entorno se compararon solo cinco líneas de la salida de env: HOME, USER, SHELL, PATH y LOGNAME.

su -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
su - -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

HOME, USER y LOGNAME cambiaron a los valores de daemon en los dos casos. Sin guion, PATH conservó el valor de root, que ejecutó su, y con [su -] se definió de nuevo según la configuración de inicio de sesión.

Según el manual oficial, su sin guion cambia solo HOME y SHELL, y cambia también USER y LOGNAME solo cuando la cuenta de destino no es root. Por eso, si cambias a root desde una cuenta normal sin guion, USER conserva el nombre de la cuenta original.

[$0], que muestra el nombre del shell, también fue distinto.

su -s /bin/sh -c 'echo $0' daemon
sh
su - -s /bin/sh -c 'echo $0' daemon
-sh

Con [su -] se añadió un guion delante del nombre del shell y apareció -sh. Un shell cuyo nombre empieza por guion funciona como shell de inicio de sesión y lee los archivos de configuración de inicio de sesión (según el manual oficial). Las diferencias entre las dos formas son estas.

Comparaciónsusu -
Carpeta de trabajoSin cambios (/tmp)Carpeta personal de la cuenta de destino (/usr/sbin)
HOME, USER, LOGNAMEValor de daemonValor de daemon
PATHValor de root, que ejecutó suSe define de nuevo con la configuración de inicio de sesión
Nombre del shell ($0)sh-sh (shell de inicio de sesión)
Otras variables de entornoSe conservanSe borran salvo algunas como TERM (según el manual oficial)

El manual oficial recomienda añadir siempre la opción de inicio de sesión para que los entornos no se mezclen, y escribir [--login] en lugar del guion. su sin guion conserva la carpeta actual y el PATH, así que, si quieres comprobar un comando con la configuración de otra cuenta, el resultado puede ser distinto del de [su -].

3️⃣ Opciones su -c y su -s

  • ↪️ Ejecutar un solo comando e indicar el shell

Para ejecutar un solo comando con otra cuenta sin abrir un shell, escribe el comando después de -c. Al ejecutar id con [su -c] en la cuenta con nologin, apareció un mensaje de rechazo en lugar del resultado del comando.

su -c id daemon
This account is currently not available.

El comando pasado con -c también lo recibe y ejecuta el shell de la cuenta, así que, si el shell es nologin, el comando nunca llega a ejecutarse. En ese caso, indica con -s el shell que se va a ejecutar.

su -s /bin/sh -c id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)

Al indicar /bin/sh, id se ejecutó con el UID 2 de daemon. Usa esta forma para comprobar permisos de archivos o resultados de comandos con una cuenta de servicio.

Si el shell de la cuenta de destino es un shell restringido que no está en /etc/shells, como nologin, solo root puede cambiar el shell con -s. Según el manual oficial, en ese caso se ignoran -s y la variable SHELL indicados por un usuario que no sea root.

Si el comando después de -c tiene espacios, enciérralo entre comillas para pasarlo como un solo bloque. su devuelve tal cual el código de salida del comando que ejecutó, 126 si no pudo ejecutarlo y 127 si no lo encontró (según el manual oficial).

📌 Opciones principales: resultados de este artículo

OpciónTareaResultado en este artículo
-Abre el mismo shell que al iniciar sesión con la cuenta de destino y pasa a su carpeta personalDesde /tmp, sin guion pwd fue /tmp y con guion /usr/sbin, y echo $0 mostró -sh
-c comandoEjecuta un comando con el shell de la cuenta de destino sin abrir un shellAl ejecutar su -c id daemon en la cuenta con nologin daemon, apareció [This account is currently not available.]
-s shellEjecuta el shell indicado en lugar del que tiene la cuenta; en cuentas con shell restringido, solo rootsu -s /bin/sh -c id daemon mostró uid=2(daemon) gid=2(daemon) groups=2(daemon)
--helpMuestra el uso y la lista de opcionesLínea Usage y lista de opciones -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V
--versionMuestra la información de versiónsu from util-linux 2.38.1 en el servidor Debian 12

📎 Otras opciones: según el manual oficial

OpciónTarea
-lOpción de inicio de sesión igual que el guion (-); nombre largo --login
-mConserva las variables de entorno y no cambia HOME, SHELL, USER ni LOGNAME; se ignora junto con la opción de inicio de sesión (igual que -p)
-w listaConserva las variables escritas con comas cuando la opción de inicio de sesión vacía el entorno; HOME, SHELL, USER, LOGNAME y PATH se definen de nuevo
-g grupoIndica el grupo principal; solo root
-G grupoIndica grupos suplementarios; solo root; sin -g, el primer grupo suplementario pasa a ser el grupo principal
-fPasa -f al shell; opción que se usa en csh y tcsh
-PCrea un pseudoterminal nuevo para no compartir el terminal con la sesión original
--session-command comandoIgual que -c pero sin crear una sesión nueva; el manual no lo recomienda

🔲 Simulador del comando su

El simulador de abajo empieza con la cuenta normal user1, y puedes probar tú mismo su, [su -] y sudo y volver con exit. Las cuentas y las contraseñas son valores de ejemplo.

Simulador del comando suutil-linux 2.37
[user1@server1 ~]$
Funciona solo dentro del navegador; las cuentas y las contraseñas son valores de ejemplo, y con ↑↓ recuperas comandos anteriores (las contraseñas no quedan en el historial).

4️⃣ Diferencia entre sudo su y sudo -i

  • ↪️ Qué contraseña se pide y cómo cambia la carpeta

sudo su es la forma de ejecutar su con privilegios de root mediante sudo. Como su lo ejecuta root, no se pide la contraseña de root, y antes sudo pide la contraseña de quien lo ejecuta (según la documentación oficial).

Las cuentas que pueden ejecutar sudo se definen en la configuración de /etc/sudoers. Si una cuenta no permitida ejecuta sudo, se rechaza con [user1 is not in the sudoers file.] (según el mensaje del programa).

Para cada comando que abre un shell de root, la contraseña que se pide y la carpeta de trabajo son estas. Los comandos de este apartado no se ejecutaron en un servidor en producción y se resumen según los manuales su(1) y sudo(8).

ComandoContraseña que se pideShell que se ejecutaCarpeta de trabajo
surootShell de rootSin cambios
su -rootShell de inicio de sesión de root/root
sudo suCuenta que lo ejecutóShell de rootSin cambios
sudo su -Cuenta que lo ejecutóShell de inicio de sesión de root/root
sudo -iCuenta que lo ejecutóShell de inicio de sesión de root/root
sudo -sCuenta que lo ejecutóShell de la variable SHELL (privilegios de root)Sin cambios

[sudo -i] y [sudo su -] terminan los dos en un shell de inicio de sesión de root. Con [sudo -i], sudo ejecuta directamente el shell de root como shell de inicio de sesión, y [sudo su -] pasa una vez más por su entre medias.

[sudo -s] ejecuta el shell de la variable SHELL con privilegios de root y no pasa a la carpeta personal. Cuando escribes bien la contraseña una vez, sudo no vuelve a pedirla en el mismo terminal durante 5 minutos por defecto (según el manual de sudoers).

La diferencia entre su y sudo es como la diferencia entre pedir prestada la llave de una casa y anotar tu nombre en conserjería para entrar.

5️⃣ Errores del comando su

  • ↪️ This account is currently not available · Authentication failure

Si cambias a una cuenta que no puede iniciar sesión, se ejecuta nologin en lugar de un shell y aparece [This account is currently not available.]. Al ejecutar [su daemon] desde root solo apareció esta línea, y el código de salida fue 1.

su daemon
This account is currently not available.

Este mensaje lo muestra el programa nologin indicado en el último campo de la línea de la cuenta, y el mismo texto se encontró dentro de /usr/sbin/nologin en el servidor. Si eres root, puedes indicar un shell con -s y ejecutar comandos con esa cuenta.

Si la contraseña no es correcta, aparece [su: Authentication failure]. Este texto es el mensaje que devuelve la biblioteca PAM cuando falla la autenticación. Según el manual oficial, si su falla antes de ejecutar el comando, el código de salida es 1.

Si su te rechaza aunque escribiste bien la contraseña de tu cuenta, comprueba primero si lo que se pide es la contraseña de la cuenta de destino. sudo pide la contraseña de quien lo ejecuta, y su pide la contraseña de la cuenta a la que cambias.

Si escribes un nombre de cuenta que no existe, aparece [su: user user9 does not exist or the user entry does not contain all the required fields] (según el mensaje del programa). La causa y lo que hay que comprobar en cada error son estos.

SalidaCausaQué comprobar
This account is currently not available.El shell de la cuenta de destino es nologinÚltimo campo de la línea de la cuenta en getent passwd; si eres root, indica un shell con -s
su: Authentication failureLa contraseña no es correctaSi es la contraseña de la cuenta de destino (sudo pide la tuya)
su: user user9 does not exist …No existe una cuenta con ese nombregetent passwd nombre_de_cuenta
user1 is not in the sudoers file.Cuenta sin permiso para sudoConfiguración de sudoers y grupo wheel

🔢 FAQ & contenido recomendado

El manual oficial describe su sobre todo como un comando para usuarios normales y, para scripts que ejecuta root, recomienda el comando runuser, que no pasa por la autenticación. La forma es [runuser -u cuenta -- comando].

Si escribes después de -w (--whitelist-environment) los nombres de las variables que quieres conservar, separados por comas, [su -] conserva esas variables al vaciar el entorno. Según el manual oficial, HOME, SHELL, USER, LOGNAME y PATH se definen de nuevo aunque estén en la lista.

Según el manual oficial, su registra siempre los intentos de inicio de sesión fallidos en el archivo btmp y no escribe en el archivo lastlog. Los registros de btmp se consultan con el comando lastb.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 0   +   1   =