Cuando usamos la Terminal en Linux, lo más común es que estemos conectados con un usuario sin muchos privilegios, y en muchos casos surge la necesidad de utilizar el usuario root. Por lo tanto, usamos “sudo” para obtener un poco de magia, y el problema es que si lo queremos usar directamente en los sistemas más modernos, el inicio de sesión de root está desactivado. También podría ser simplemente que ocupemos cambiarnos entre diferentes usuarios para preservar los permisos de carpetas y archivos cada que ejecutemos comandos. Estos pasos aplican para cualquier distribución de Linux, incluidos Debian, Ubuntu, Manjaro, etc.
Contenido
- Diferentes formas de cambiar de usuario
- Para salir del usuario
- Cómo saber cuál es mi usuario actual
- Diferencias de los comandos sudo y su
- Opciones del comando su
- Ejemplos útiles
- Problemas de seguridad
Diferentes formas de cambiar de usuario
Para cambiar de usuario se va a estar usando el comando su
. La forma en que funciona es, simplemente ejecuta una Shell interactiva con el nuevo usuario como si se tratara de este. También puede usarse para ejecutar comandos con otro usuario sin cambiar de usuario.
Cambiar desde cualquier usuario
Cuando ya estamos usando otro usuario sin tantos privilegios, lo ideal es utilizar el comando su
.
Para cambiar al usuario root ejecutamos.
su root
Incluso si dejamos el comando su sin argumentos se asume que el usuario es root.
Después nos pedirá la contraseña de root, y automáticamente accederemos. Más sencillo no puede ser, ya sea por ejemplo, si olvidamos seleccionar la opción de recuperación desde el inicio, ahora ya no tendremos que reiniciar el ordenador, simplemente abrimos la terminal y colocamos el comando anterior.
Cabe resaltar que funciona con cualquier usuario y no solo con root.
su usuario
En este último caso nos pide la contraseña de “usuario” en caso de que no tengamos privilegios.
Cambiar con usuarios que tienen privilegios de administrador
Lo normal es un usuario típico de Ubuntu después de su instalación. Usaremos el siguiente comando en el caso de que estemos usando Ubuntu con un usuario limitado por el comando sudo, para poder acceder a root:
sudo su -
Para acceder a cualquier otro usuario sin usar la contraseña del otro usuario, más bien usando nuestra propia contraseña:
sudo su usuario
Cambiar de usuario junto con el directorio actual
Cuando usamos el comando su de manera sencilla, el directorio actual de trabajo de la Shell va a ser el que teníamos antes de ejecutar el comando, y en muchos casos no es lo ideal. Por ejemplo, si queremos cambiar al usuario hector
, lo más lógico es que también necesitemos cambiarnos al home de hector
en /home/hector
. Tenemos dos opciones.
Cambiar de directorio automáticamente
Esto lo podemos lograr con el comando su
y la opción -
.
su - usuario
Las opciones -
, -l
y --login
son equivalentes. Lo que hace esta opción es usar el mismo entorno como si se tratara de un inicio de sesión, incluso se usa la Shell por defecto de este usuario.
Cambiar de directorio manualmente
Si no podemos memorizar la opción --login
, podemos simplemente hacerlo de forma manual.
su usuario
cd ~
Ejecutar comando con otro usuario
Para ejecutar un comando con un usuario diferente desde la terminal, usamos la opción --command
del comando su
.
su usuario --command="echo 'OK'"
Hay que aclarar que lo ideal es escapar los caracteres necesarios para que no interfieran, esto debido a la manera en que funcionan las comillas en los Shell. También recomiendo especificar la Shell que se va a usar con la opción --shell
para evitar problemas con la sintaxis. Por ejemplo, en Manjaro la Shell por defecto es ZSH y cuando ejecutamos un comando tan sencillo como wget https://example.com/download?file
va a dar error porque algunos caracteres como el símbolo de interrogación ?
, que se necesitan escapar con una diagonal. Por el contrario, si simplemente usamos bash, ya sabemos como se va a comportar y que no necesitamos escapar tantos caracteres.
su usuario --shell=bash --command="echo 'OK'"
Ejecutar script con otro usuario
Se usa la misma opción --command
, pero especificamos la Shell directamente. No es necesario usar la opción --login
, pero lo recomiendo por las variables de entorno.
su - usuario --command="/usr/bin/bash /home/usuario/script.sh"
Cambiar a root en el arranque con “Modo recuperación” o “Recovery mode”
Primeramente en el caso de “root”, no hay que olvidarnos que podemos entrar en el modo de recuperación. Normalmente, es la segunda opción al iniciar en el menú de arranque, y así entramos como root
directamente.
Para salir del usuario
Para regresar al usuario principal solo tenemos que usar el comando exit
.
exit
Solo hay que tener cuidado, al estar usando una conexión SSH, de no ejecutarlo con nuestro usuario principal porque se cerrará la conexión.
Cómo saber cuál es mi usuario actual
Me decidí a compartir esto porque con mi poca experiencia en Linux noté que usar root es muy necesario, y a los meses descubrí que era posible de forma muy sencilla sin el uso de “sudo”. También en el caso de manejar varios usuarios, como cuando se ejecutan varias instalaciones de páginas web en un mismo servidor.
Para saber qué usuario estamos usando actualmente ejecutamos el comando whoami
y nos aparecerá. También podemos saber qué usuario estamos usando revisando el prompt de la terminal, justo antes de la arroba, el formato es usuario arroba sistema, pero en algunos sistemas puede estar muy personalizado y no mostrarlo.
Diferencias de los comandos sudo y su
sudo
solo ejecuta un comando con privilegios de root
, no cambia la Shell de manera interactiva. Se limita a usuarios con privilegios de administrador, o miembros del grupo adm
. Su uso indiscriminado puede provocar cambio en los propietarios de los archivos y carpetas.
su
inicia una Shell interactiva con el usuario proporcionado sin importar si somos miembros del grupo adm. Si no tenemos permisos, simplemente se nos pedirán las credenciales del usuario requerido. La excepción es, si usamos la opción --command
, se ejecuta el comando y se devuelve la salida.
Opciones del comando su
Opción | Descripción |
---|---|
-c, --command= | Con esta opción se ejecuta un comando con el usuario especificado y se devuelve la salida. |
-f, --fast | Con esta opción se pasa -f al Shell. |
-g, --group= | Se especifica el grupo primario para el usuario root únicamente. |
-G, --supp-group= | Se establece un subgrupo para el usuario root solamente. |
-, -l, --login | Con esta opción se usan las mismas variables de entorno como si se tratara de un inicio de sesión. |
-m, -p, --preserve-environment | Se conserva el entorno completo del usuario actual en la nueva Shell. |
-P, --pty | Se crea una pseudo terminal para la sesión. |
-s, --shell= | Se especifica la Shell que se va a usar, ignorando la predeterminada. Si el Shell no existe o está restringida, la opción es ignorada. |
--session-command= | Es igual que --command pero sin crear una nueva sesión. No se recomienda. |
-w, --whitelist-environment= | Normalmente, se limpian las variables de entorno con --login , con esta lista blanca se establece que variables no limpiar. Por ejemplo, PATH. |
-h, --help | Se muestra la ayuda del comando junto con estas opciones listadas. |
-V, --version | Se muestra la versión. |
Ejemplos útiles
Estos son algunos casos que necesitamos resolver:
- En el escritorio de Debian necesitamos realizar una tarea desde la Terminal, pero para ello necesitamos utilizar el usuario root.
- En el escritorio de Ubuntu necesitamos realizar una tarea administrativa desde la Terminal, en este caso podemos utilizar el comando “sudo”, pero se vuelve molesto cuando tenemos muchas cosas que hacer, y lo necesario es usar root.
- Estamos conectados como root, pero necesitamos ejecutar “composer” con el usuario propio del proyecto o carpeta.
Problemas de seguridad
Si bien es bastante útil, hay que usarlo con moderación, y solo en casos estrictamente necesarios. En lo personal he cambiado accidentalmente el propietario y grupo de todas las carpetas del sistema con el comando chown
por usar root de forma indiscriminada, causando que mi instalación de Ubuntu dejará de funcionar completamente, la única solución fue reinstalar todo y recuperar los datos manualmente directos desde el disco. Este es solo un caso y fue en un equipo personal, el detalle es que también nos podría pasar en un servidor web en producción o en cualquier servidor crítico. El comando chown -hR
fue, en mi caso, en otro más grave podría ser rm -rf
.