Comandos LinuxExplicados en español
/
Ficha22 / 104
Categoría
Permisos
Ejemplos
5
Ver también
sudo · whoami · ssh · useradd

su

switch user (cambiar de usuario)

Abre una terminal como otro usuario sin salir de la tuya.

Cambia de usuario en la misma terminal: su - ana te deja trabajando como ana y, con exit, regresas a tu sesión sin haberla cerrado. Se usa para ver o arreglar algo con los permisos de una cuenta de servicio (www-data, mysql) o para entrar a otra cuenta del equipo. Para el día a día casi siempre conviene sudo, que además deja registro de lo que ejecutaste.

Sintaxissu [opciones] [-] [USUARIO [argumento...]]
Precaución

su cambia de usuario y no te avisa nada más: si entras como root con su - y se te olvida quién eres, todo lo que escribas se aplica al sistema entero. Y ojo con su USUARIO sin guion, que conserva tu carpeta actual y parte de tu entorno (el PATH entre otros), así que un script puede escribir donde no esperas. En scripts es más seguro sudo -u USUARIO comando, porque ejecuta, sale y regresa.

§ 1

Despiece

5 ejemplos
Entrar como otra persona

Entrar como otra persona

3 piezas
Lámina01 / 05
Comandosu - ana
Piezas3
Escala1:1
N.ºPiezaTipoQué hace
1suComandoEl comando que cambia de usuario.
2-OpciónLogin shell: deja la terminal como si hubieras entrado con esa cuenta.
3anaArgumentoLa cuenta a la que quieres entrar.
Resultado

Abre una sesión como ana: te deja en /home/ana, con sus variables de entorno y su PATH, y pide su contraseña. Para volver a tu sesión escribe exit o Ctrl+D. El guion antes del nombre es lo que hace la diferencia.

Entrar sin guion y ver la diferencia

2 piezas
Lámina02 / 05
Comandosu ana
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1suComandoEl comando que cambia de usuario.
2anaArgumentoLa cuenta a la que quieres entrar.
Resultado

También entras como ana, pero sin login shell: te quedas en la carpeta desde la que lanzaste su y el entorno no se reinicia del todo (PATH, entre otras variables). Para una sesión de verdad usa siempre su - ana.

Entrar como root

2 piezas
Lámina03 / 05
Comandosu -
Piezas2
Escala1:1
N.ºPiezaTipoQué hace
1suComandoEl comando que cambia de usuario.
2-OpciónSin nombre de usuario, su asume root y abre un login shell.
Resultado

Entra como root (es lo mismo que su - root) y pide la contraseña de root. En Ubuntu esa contraseña está bloqueada y verás Authentication failure; en Debian funciona solo si le pusiste contraseña a root al instalar. Con sudo -i logras lo mismo usando tu propia contraseña.

Ejecutar un solo comando como otro usuario

4 piezas
Lámina04 / 05
Comandosu -c "whoami" ana
Piezas4
Escala1:1
N.ºPiezaTipoQué hace
1suComandoEl comando que cambia de usuario.
2-cOpciónEjecuta lo que sigue y regresa sin abrir sesión.
3"whoami"ValorEl comando a ejecutar, entre comillas para que la shell no lo parta en varias palabras.
4anaArgumentoEl usuario como el que se ejecuta. El nombre va al final.
Resultado

Imprime ana y tu terminal sigue como estaba, sin abrir un shell. El orden importa: primero -c con su comando entre comillas y al final el usuario. En scripts esto se hace mejor con sudo -u ana whoami, que es lo más claro.

Ver archivos como los ve el servidor web

6 piezas
Lámina05 / 05
Comandosu -s /bin/bash -c "ls -l /var/www/html" www-data
Piezas6
Escala1:1
N.ºPiezaTipoQué hace
1suComandoEl comando que cambia de usuario.
2-sOpciónShell con el que se va a ejecutar el comando.
3/bin/bashValorBash, para que el comando se ejecute como lo escribirías tú.
4-cOpciónEjecuta lo que sigue y regresa.
5"ls -l /var/www/html"ValorEl comando, con sus opciones y su ruta, entre comillas.
6www-dataArgumentoLa cuenta de servicio con la que corre el servidor web.
Resultado

Lista los archivos con el usuario y el grupo www-data, que es como los ve el servidor. Si te pide la contraseña de www-data, corre el comando con sudo delante: sudo su -s /bin/bash -c "ls -l /var/www/html" www-data. Lo más corto de todo: sudo -u www-data ls -l /var/www/html.

§ 2

Opciones

Las que sí vas a usar
OpciónQué hace
---loginEl guion que casi siempre quieres: convierte la sesión en login shell de la cuenta destino, con su entorno limpio y en su carpeta personal.
-l--loginLo mismo que el guion, pero escrito como opción. Carga el perfil de la cuenta y cambia a su carpeta.
-c--commandEjecuta un solo comando como el usuario indicado y regresa de inmediato, sin abrir sesión interactiva.
-s--shellShell con el que se corre el comando de -c. Conviene usar uno que esté en /etc/shells, como /bin/bash.
-p--preserve-environmentNo borra las variables de entorno al cambiar (PATH, HOME y compañía). Casi siempre es lo contrario de lo que quieres.
-g--groupUsa otro grupo principal en la sesión. Solo root puede indicarlo; sin privilegios responde su: only root can specify alternative groups.
-G--supp-groupAgrega grupos suplementarios a la sesión, separados por coma. También solo root puede usarlo.
§ 3

Fallas comunes

FallaRemedio
Correr su y no saber con qué usuario estás.El prompt de root cambia a root@equipo:~#, pero una cuenta normal puede verse casi igual. Escribe whoami en cualquier momento para saber quién eres, y exit (o Ctrl+D) para volver a tu sesión.
Olvidar las comillas en -c: su -c ls -l /var/www ana.Sin comillas, -c solo recibe ls como comando y lo que sigue se toma como otra cosa: su responde su: user /var/www does not exist, porque creyó que /var/www era el nombre de usuario. El orden correcto es su -c "ls -l /var/www" ana: primero el comando entre comillas, después el usuario.
Escribir su pegado al nombre: su -ana.No existe la opción -ana, así que su responde su: invalid option -- 'a'. Deja un espacio entre el guion y el nombre: su - ana.
Meter su a un script y quedarse esperando una terminal.su abre un shell interactivo que espera entrada y puede dejar el script colgado. En scripts usa sudo -u USUARIO comando, o su -c "comando" USUARIO, que ejecuta, sale y no pide terminal.
§ 4

Preguntas frecuentes

¿Cuál es la diferencia entre su y sudo?
su te abre una terminal completa como otro usuario y sales con exit o Ctrl+D. sudo ejecuta un comando puntual como root o como el usuario que le indiques, y guarda registro. sudo -i abre una terminal de root y es el equivalente moderno de su -. En Debian y Ubuntu lo normal es usar sudo.
¿Cuál es la diferencia entre su ana y su - ana?
El guion convierte la sesión en login shell: te deja en la carpeta personal de ana y carga su entorno, como si hubieras entrado desde la consola. Sin guion te quedas en la carpeta donde estabas y conservas parte de tu entorno, lo que a menudo rompe scripts que usan $HOME o $PATH.
¿Cómo salgo de su?
Con exit o Ctrl+D. Regresas a la terminal de la que saliste, con tu usuario y tu sesión intactos. A diferencia de cerrar la sesión, no pierdes nada de lo que tenías abierto.
¿Cómo ejecuto un solo comando como otro usuario?
Lo más simple es sudo -u USUARIO comando. Su equivalente es su -c "comando" USUARIO, con el nombre del usuario al final y el comando entre comillas. Por ejemplo, para revisar lo que ve el servidor: sudo -u www-data ls -l /var/www/html.
¿Por qué su me pide la contraseña de root?
Porque sin nombre de usuario su entra como root y pide la contraseña de root, no la tuya. En Ubuntu está bloqueada, así que recibes Authentication failure; en Debian depende de si le pusiste una al instalar. Usa sudo -i para entrar como root con tu propia contraseña.
§ 5

Ver también