su
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.
su [opciones] [-] [USUARIO [argumento...]]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.
Despiece
5 ejemplosEntrar como otra persona
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | su | Comando | El comando que cambia de usuario. |
| 2 | - | Opción | Login shell: deja la terminal como si hubieras entrado con esa cuenta. |
| 3 | ana | Argumento | La cuenta a la que quieres entrar. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | su | Comando | El comando que cambia de usuario. |
| 2 | ana | Argumento | La cuenta a la que quieres entrar. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | su | Comando | El comando que cambia de usuario. |
| 2 | - | Opción | Sin nombre de usuario, su asume root y abre un login shell. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | su | Comando | El comando que cambia de usuario. |
| 2 | -c | Opción | Ejecuta lo que sigue y regresa sin abrir sesión. |
| 3 | "whoami" | Valor | El comando a ejecutar, entre comillas para que la shell no lo parta en varias palabras. |
| 4 | ana | Argumento | El usuario como el que se ejecuta. El nombre va al final. |
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
| N.º | Pieza | Tipo | Qué hace |
|---|---|---|---|
| 1 | su | Comando | El comando que cambia de usuario. |
| 2 | -s | Opción | Shell con el que se va a ejecutar el comando. |
| 3 | /bin/bash | Valor | Bash, para que el comando se ejecute como lo escribirías tú. |
| 4 | -c | Opción | Ejecuta lo que sigue y regresa. |
| 5 | "ls -l /var/www/html" | Valor | El comando, con sus opciones y su ruta, entre comillas. |
| 6 | www-data | Argumento | La cuenta de servicio con la que corre el servidor web. |
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.
Opciones
Las que sí vas a usar| Opción | Qué hace |
|---|---|
| ---login | El 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--login | Lo mismo que el guion, pero escrito como opción. Carga el perfil de la cuenta y cambia a su carpeta. |
| -c--command | Ejecuta un solo comando como el usuario indicado y regresa de inmediato, sin abrir sesión interactiva. |
| -s--shell | Shell con el que se corre el comando de -c. Conviene usar uno que esté en /etc/shells, como /bin/bash. |
| -p--preserve-environment | No borra las variables de entorno al cambiar (PATH, HOME y compañía). Casi siempre es lo contrario de lo que quieres. |
| -g--group | Usa otro grupo principal en la sesión. Solo root puede indicarlo; sin privilegios responde su: only root can specify alternative groups. |
| -G--supp-group | Agrega grupos suplementarios a la sesión, separados por coma. También solo root puede usarlo. |
Fallas comunes
| Falla | Remedio |
|---|---|
| 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. |
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.