Las diferencias entre Su, Sudo Su, Sudo -s y Sudo -i

Dav

Hay muchas formas diferentes de obtener una sesión de root en la terminal de Linux. Esto puede crear algo de confusión, ya que la mayoría de los usuarios principiantes que buscan obtener privilegios de root podrían no estar familiarizados con cómo cada comando puede obtener acceso de root, cómo son diferentes y cuándo estas diferencias son importantes. Aquí desglosamos cada uno de los muchos comandos diferentes utilizados para obtener acceso de root en una terminal, explicamos cómo obtienen acceso de root, cuándo usarlos y todo lo demás.

Tabla de Contenidos

  • su
  • su -c
  • sudo su
  • sudo -i
  • sudo -s
  • Preguntas Frecuentes

También lee: ¿Qué es Doas y cómo instalarlo?

su

El comando su sustituye al usuario actual por root en la consola actual.

Puedes cambiar a cualquier usuario escribiendo su y añadiendo un nombre de usuario después.

Esto le dirá al sistema que cambie (y esencialmente cierre sesión de) el usuario actual al especificado. Alternativamente, el comando su puede obtener acceso de root ingresando su sin especificar nada después del comando.

su se utiliza mejor cuando un usuario quiere acceso directo a la cuenta de root en el sistema. No pasa por sudo ni nada parecido. En cambio, se te pedirá que ingreses la contraseña del usuario root, ya que literalmente estás iniciando sesión en ella. Además, otras formas de obtener acceso de root no tienen el beneficio de también obtener acceso al directorio personal y al entorno de root.

Advertencia: usar su es la forma menos segura de ejecutar una acción de root. Generalmente, si puedes evitarlo, no lo uses.

También lee: La guía definitiva sobre los comandos Apt y Apt-Get

su -c

Este comando pasa otros comandos directamente al usuario root.

Linuxsudo Suc

Similar a escribir sudo antes de un comando, su -c ejecutará un comando como el usuario root. Sin embargo, en lugar de simplemente escribir el comando, tendrás que ponerlo entre comillas.

Esta es una forma rápida de disparar un comando a través de tu terminal con privilegios elevados. Es muy útil si sudo de alguna manera está indisponible (no viene preinstalado en distribuciones como Arch Linux) o no funciona correctamente porque está dañado.

Dado que estás pasando algo directamente a root, si las contraseñas de tu usuario y de root son diferentes, tendrás que escribir tu contraseña de root para autenticarte.

sudo su

Este comando solicita la contraseña del usuario actual en lugar de la de root.

Es esencialmente lo mismo que simplemente ejecutar su en la consola, salvo por una diferencia crucial: en lugar de decirle al sistema que “cambie de usuarios” directamente, le estás pidiendo que ejecute el comando su con privilegios de superusuario. Cuando se ejecuta sudo su, se iniciarán “.profile”, “.bashrc” y “/etc/profile”, mucho como al ejecutar su (o su root). Si se ejecuta cualquier comando con sudo delante, se le conceden privilegios de root.

Aunque no hay una gran divergencia entre sudo su y su, el primero sigue siendo un comando muy útil por una razón importante: cuando un usuario está ejecutando su para obtener acceso de root en un sistema, debe conocer la contraseña de root. Root se obtiene con sudo su al solicitar la contraseña del usuario actual, lo que hace posible obtener root sin la contraseña de root.

Esto es útil en situaciones donde podrías haber olvidado la contraseña de root si es diferente de la contraseña de tu cuenta de usuario. Si bien podrías hacer esto mientras tanto, aún deberías restablecer la contraseña de root en algún momento.

También lee: Cómo usar el comando Rm en Linux

sudo -i

Usar sudo -i es prácticamente lo mismo que el comando sudo su con una excepción: no interactúa directamente con el usuario root.

Al igual que sudo su, la bandera -i permite a un usuario obtener un entorno de root sin tener que conocer la contraseña de la cuenta de root. sudo -i también es muy similar a usar sudo su: leerá todos los archivos de entorno (“.profile”, etc.) y establecerá el entorno dentro de la consola.

Donde difiere de sudo su es que sudo -i es una forma mucho más limpia de obtener acceso de root y un entorno de root sin interactuar directamente con el usuario root.

Para aclarar: con sudo su, estás utilizando más de un comando setuid de root en segundo plano. Esto hace que sea mucho más desafiante averiguar qué variables de entorno se mantendrán y cuáles se cambiarán (al cambiar al entorno de root). Esto no es cierto con sudo -i. Debido a esto, la mayoría de las personas lo ven como el método preferido para obtener root sin iniciar sesión directamente.

En lenguaje más simple: sudo -i te dará un inicio de sesión de root “limpio” en tu carpeta “/root”, que es la carpeta “personal” para el usuario root.

También lee: Cómo usar el comando dd en Linux

sudo -s

Este comando convoca una shell con tu variable $SHELL.

La opción -s para el comando sudo lee la variable $SHELL del usuario actual que está ejecutando comandos. Este comando funciona como si el usuario estuviera ejecutando sudo /bin/bash, si la shell de la que proviene el usuario es bash.

En nuestro caso, sudo -s nos dio la shell interactiva de fish, ya que anteriormente instalamos fish como nuestra shell predeterminada, por lo que sería como si ejecutáramos sudo /usr/bin/fish.

Linuxsudo Shellswitch

Sudo -s es una shell de estilo “no-login”. A diferencia de un comando como sudo -i o sudo su, el sistema no leerá ningún archivo ambiental. Cuando un usuario le dice a la shell que ejecute sudo -s, obtiene root pero no cambiará el entorno del usuario. Tu hogar no será el hogar de root, etc.

Linuxsudo Commands

Este comando se usa mejor cuando el usuario quiere cambiar a root pero mantener el mismo entorno de shell. Por ejemplo, es posible que desees ejecutar un script de fish y no ser obligado a la shell por defecto bash que a menudo obtiene root en la mayoría de las distribuciones.

Otros comandos cubiertos anteriormente obtienen acceso de root, pero también te darán la shell y las variables de entorno que la distribución tiene para root. ¡Quizás solo quieras cambiar al usuario sin toda esa carga!

También lee: Comandos Bash básicos para novatos en Linux

Preguntas Frecuentes

¿Por qué importaría la shell que esté ejecutando?

Si usas una shell bash sin modificaciones para tu cuenta de usuario, la diferencia es principalmente filosófica. En la mayoría de los casos, elevar a root a través de cualquiera de las shells no resultará en ningún cambio notable. Pero si ejecutas cualquier otra cosa, ¡inmediatamente notarás cuán diferentes pueden ser las cosas!

Por ejemplo, digamos que estás ejecutando la shell fish para tu cuenta de usuario y mantienes la shell de root en bash. Cargar la shell de usuario usando sudo -s produce un resultado drásticamente diferente.

La shell seguirá la configuración que tengas en la carpeta personal de root. Si no tienes tal cosa, simplemente cargará la configuración predeterminada en lugar de la tuya personal. (En nuestro caso, eso sería “~/.config/fish/config.fish”). Para todos los efectos, es mejor dejar las cosas así en lugar de copiar la configuración del usuario a “/root”.

Cambiar a la shell de la cuenta de tu usuario al cambiar a root solo debe hacerse si necesitas ejecutar un script que absolutamente necesita esa shell en particular.

¿Puede acceder a root dañar mi sistema?

En algunos casos, sí. A menos que estés absolutamente seguro de que necesitas acceder a root para todo en una sesión de terminal particular, a menudo es mejor simplemente escribir sudo seguido de un comando, si deseas acceder a root para ese comando en particular. Por ejemplo, escribir sudo apt install vlc en cualquier versión de Linux basada en Debian le diría al sistema operativo que acceda a root solo para ejecutar el administrador de paquetes APT para instalar VLC.

Una advertencia muy importante al ejecutar sudo -i o cualquier otro variante que hayamos discutido anteriormente, en comparación con escribir sudo antes de cada comando que deseas ejecutar como root, es que el primero no registra tu historial de comandos en “/var/log/auth.log”. Si te equivocas, no podrás volver y verificar lo que hiciste para corregirlo. Tendrás que operar de memoria, ya que las sesiones de root no se registran.

¿Cuando escribo “sudo” antes de un comando, qué variante de “sudo su” estoy ejecutando?

Al escribir sudo para ejecutar un comando (es decir, lo estás escribiendo en la misma línea que el comando que deseas ejecutar), estás ejecutándolo esencialmente en una shell interactiva de root. Esto sería lo que hace el comando independiente sudo -s. También es muy similar a ejecutar el comando su -c.

Todas las capturas de pantalla son de Miguel Leiva-Gomez.