Comprender la diferencia entre los comandos sudo y su en Linux

El comando su sin opciones de línea de comandos

En uno de nuestros art√≠culos anteriores, discutimos el comando ‘sudo’ en detalle. Hacia el final de ese tutorial, se mencion√≥ otro comando similar ‘su’ en una peque√Īa nota. Bueno, en este art√≠culo, discutiremos en detalle el comando ‘su’ y c√≥mo se diferencia del comando ‘sudo’.

Pero antes de hacerlo, tenga en cuenta que todas las instrucciones y ejemplos mencionados en este tutorial se han probado en Ubuntu 18.04 LTS y Debian 10.

El comando su en Linux

El trabajo principal del comando su es permitirle cambiar a otro usuario durante una sesi√≥n de inicio de sesi√≥n. En otras palabras, la herramienta le permite asumir la identidad de alg√ļn otro usuario sin tener que cerrar sesi√≥n y luego iniciar sesi√≥n (como ese usuario).

El comando su se usa principalmente para cambiar a la cuenta de superusuario/root (ya que los privilegios de root se requieren con frecuencia mientras se trabaja en la línea de comando), pero, como ya se mencionó, puede usarlo para cambiar a cualquier otro usuario que no sea root como bien.

Así es como puede usar este comando para cambiar al usuario raíz:

El comando su sin opciones de línea de comandos

La contrase√Īa que requiere este comando tambi√©n es del usuario root. Entonces, en general, el comando su requiere que ingrese la contrase√Īa del usuario objetivo. Despu√©s de ingresar la contrase√Īa correcta, la herramienta inicia una subsesi√≥n dentro de la sesi√≥n existente en el terminal.

su –

Hay otra forma de cambiar al usuario ra√≠z: ejecute el comando ‘su -‘:

El comando su

Ahora, ¬Ņcu√°l es la diferencia entre ‘su’ y ‘su -‘? Bueno, el primero mantiene el entorno del usuario antiguo/original incluso despu√©s de que se haya realizado el cambio a root, mientras que el segundo crea un nuevo entorno (seg√ļn lo dictado por ~/.bashrc del usuario root), similar al caso cuando inicia sesi√≥n expl√≠citamente como usuario root desde la pantalla de inicio de sesi√≥n.

IMPORTANTE para usuarios de Debian 10. La variable PATH del usuario ra√≠z difiere en Debian 10 cuando se usa ‘su’ frente a ‘su -‘, faltan directorios como /sbin cuando solo se usa ‘su’, lo que significa que es posible que obtenga errores de comando no encontrado incluso para la administraci√≥n b√°sica del sistema comandos As√≠ que siempre use ‘su -‘ en Debian 10 para convertirse en usuario root.

La p√°gina de manual de ‘su’ tambi√©n deja claro:

The optional argument - may be used to provide an environment similar to what the user would expect had the user logged in directly.

Entonces, estar√° de acuerdo en que iniciar sesi√≥n con ‘su -‘ tiene m√°s sentido. Pero como tambi√©n existe el comando ‘su’, uno podr√≠a preguntarse cu√°ndo es √ļtil. El siguiente extracto – tomado de la Sitio web wiki de ArchLinux – da una buena idea sobre los beneficios y peligros del comando ‘su’:

  • A veces puede resultar ventajoso para un administrador del sistema utilizar la cuenta shell de un usuario normal en lugar de la suya propia. En particular, ocasionalmente la forma m√°s eficiente de resolver el problema de un usuario es iniciar sesi√≥n en la cuenta de ese usuario para reproducir o depurar el problema.
  • Sin embargo, en muchas situaciones no es deseable, o incluso puede ser peligroso, que el usuario ra√≠z opere desde la cuenta shell de un usuario com√ļn y con las variables ambientales de esa cuenta en lugar de hacerlo desde la suya propia. Al usar inadvertidamente la cuenta shell de un usuario normal, root podr√≠a instalar un programa o realizar otros cambios en el sistema que no tendr√≠an el mismo resultado que si se hubieran realizado mientras usa la cuenta root. Por ejemplo, se podr√≠a instalar un programa que podr√≠a dar al usuario com√ļn el poder de da√Īar accidentalmente el sistema u obtener acceso no autorizado a ciertos datos.

Nota: En caso de que desee pasar m√°s argumentos despu√©s de – en ‘su -‘, debe usar la opci√≥n de l√≠nea de comando -l que ofrece el comando (en lugar de -). Aqu√≠ est√° la definici√≥n de – y la opci√≥n de l√≠nea de comando -l:

-, -l, --login
Provide an environment similar to what the user would expect had the user logged in directly.

When - is used, it must be specified as the last su option. The other forms (-l and --login) do not have this restriction.

su-c

Hay otra opci√≥n del comando ‘su’ que vale la pena mencionar: -c. Le permite proporcionar un comando que desea ejecutar despu√©s de cambiar al usuario de destino.

La p√°gina de manual de ‘su’ lo explica como:

-c, --command COMMAND
Specify a command that will be invoked by the shell using its -c.

The executed command will have no controlling terminal. This option cannot be used to execute interactive programs which need a controlling TTY.

Considere la siguiente plantilla de ejemplo:

su [target-user] -c [command-to-run]

Entonces, en este caso, el ‘comando de ejecuci√≥n’ se ejecutar√° como:

[shell] -c [command-to-run]

Donde ‘shell’ ser√≠a reemplazado por ‘target-user’ shell definido en el archivo /etc/passwd.

Sudo contra Su

Ahora que tambi√©n hemos discutido los conceptos b√°sicos del comando ‘su’, es hora de que discutamos las diferencias entre los comandos ‘sudo’ y ‘su’.

Clave

La principal diferencia entre los dos es la contrase√Īa que requieren: mientras que ‘sudo’ requiere la contrase√Īa del usuario actual, ‘su’ requiere que ingrese la contrase√Īa del usuario ra√≠z.

Claramente, ‘sudo’ es una mejor alternativa entre los dos en lo que respecta a la seguridad. Por ejemplo, considere el caso de una computadora utilizada por varios usuarios que tambi√©n requieren acceso de ra√≠z. Usar ‘su’ en tal escenario significa compartir la contrase√Īa de root con todos ellos, lo cual no es una buena pr√°ctica en general.

Adem√°s, en caso de que desee revocar el acceso de superusuario/root de un usuario en particular, la √ļnica forma es cambiar la contrase√Īa de root y luego redistribuir la nueva contrase√Īa de root entre todos los dem√°s usuarios.

Con Sudo, por otro lado, puedes manejar ambos escenarios sin esfuerzo. Dado que ‘sudo’ requiere que los usuarios ingresen su propia contrase√Īa, no es necesario que comparta la contrase√Īa de root con todos los usuarios en primer lugar. Y para evitar que un usuario en particular acceda a los privilegios de root, todo lo que tiene que hacer es modificar la entrada correspondiente en el archivo ‘sudoers’.

Comportamiento por defecto

La otra diferencia entre los dos comandos est√° en su comportamiento predeterminado. Mientras que ‘sudo’ solo le permite ejecutar un solo comando con privilegios elevados, el comando ‘su’ inicia un nuevo shell, lo que le permite ejecutar tantos comandos como desee con privilegios de root hasta que salga expl√≠citamente de esa venta.

Por lo tanto, el comportamiento predeterminado del comando ‘su’ es potencialmente peligroso dada la posibilidad de que el usuario pueda olvidar el hecho de que est√° trabajando como root y, sin darse cuenta, podr√≠a realizar algunos cambios irrecuperables (como ejecutar el comando ‘rm -rf’ en forma incorrecta). directorio). Para obtener una discusi√≥n detallada sobre por qu√© no se recomienda trabajar siempre como ra√≠z, dir√≠jase a aqu√≠.

Inicio sesión

Aunque los comandos que se ejecutan a trav√©s de ‘sudo’ se ejecutan como el usuario de destino (que es ‘root’ por defecto), est√°n etiquetados con el nombre de usuario de sudoer. Pero en el caso de ‘su’, no es posible rastrear directamente lo que hizo un usuario despu√©s de que sud a la cuenta ra√≠z.

Flexibilidad

El comando ‘sudo’ es mucho m√°s flexible, ya que incluso puede limitar los comandos a los que desea que tengan acceso los sudo-ers. En otras palabras, los usuarios con acceso a ‘sudo’ solo pueden tener acceso a los comandos necesarios para su trabajo. Sin embargo, con ‘su’ eso no es posible, o tienes el privilegio de hacer todo o nada.

sudo su

Presumiblemente, debido a los riesgos potenciales que implica el uso de ‘su’ o iniciar sesi√≥n directamente como ra√≠z, algunas distribuciones de Linux, como Ubuntu, desactivan la cuenta de usuario ra√≠z de forma predeterminada. Se anima a los usuarios a usar ‘sudo’ siempre que necesiten privilegios de root.

Sin embargo, a√ļn puede hacer ‘su’ con √©xito, es decir, sin ingresar la contrase√Īa de root. Todo lo que necesita hacer es ejecutar el siguiente comando:

sudo su

Dado que est√° ejecutando el comando con ‘sudo’, solo se le pedir√° que ingrese su contrase√Īa. Entonces, una vez hecho esto, el comando ‘su’ se ejecutar√° como root, lo que significa que no solicitar√° ninguna contrase√Īa.

PD: En caso de que desee habilitar la cuenta de root en su sistema (aunque se desaconseja encarecidamente porque siempre puede usar ‘sudo’ o ‘sudo su’), tendr√° que establecer la contrase√Īa de root manualmente, lo cual puede hacer usando el siguiente comando:

sudo passwd root

Conclusión

Tanto este como nuestro tutorial anterior (que se enfoca en ‘sudo’) deber√≠an darle una buena idea sobre las herramientas disponibles que le permiten realizar tareas que requieren privilegios escalados (o un conjunto completamente diferente de privilegios). En caso de que tenga algo que compartir sobre ‘su’ o ‘sudo’, o quiera compartir su propia experiencia, puede hacerlo en los comentarios a continuaci√≥n.

Deja una respuesta

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