¿Cuál es la diferencia entre sudo y su?

Hace unos días recibí una consulta por parte de Miguel, un asiduo lector del blog y comentador compulsivo, respecto de cuál es exactamente la diferencia entre sudo y su. En particular, Miguel estaba preocupado por saber si un método era más seguro que el otro. Sucede que había leído por ahí que sudo no era lo suficientemente seguro y quería saber más.Este es otro post dedicado a aquellos que pedían más artículos sobre los misterios del terminal.

Su

El programa su permite usar el intérprete de comandos de otro usuario sin necesidad de cerrar la sesión actual. Comúnmente se usa para obtener permisos de root para operaciones administrativas sin tener que salir y reentrar al sistema. Algunos entornos de escritorio, entre ellos GNOME y KDE, tienen programas que piden gráficamente una contraseña antes de permitir al usuario ejecutar un comando que usualmente requeriría tal acceso.

El nombre su proviene del inglés substitute user (usuario substituto). También hay quien lo hace derivar de superuser (super-usuario, es decir, el usuario root o administrador) ya que habitualmente se utiliza para adoptar el rol de administrador del sistema.

Cuando se ejecuta, su pide la contraseña de la cuenta a la se quiere acceder, y si es aceptada, da acceso a dicha cuenta.

[fulano@localhost]$ su
Contraseña:
[root@localhost]# exit
logout
[fulano@localhost]$

Al no poner un usuario, se accede como administrador. Sin embargo, también es posible pasar como parámetro otro nombre de usuario.

[fulano@localhost]$ su mongo
Contraseña:
[mongo@localhost]# exit
logout
[fulano@localhost]$

Una vez introducida la contraseña, podemos ejecutar los comandos como si fuésemos el otro usuario. Al escribir exit, volvemos a nuestro usuario.

Una variante muy utilizada es usar su seguido de un guión. Así, para loguearte como root, tenés que ingresar su – y para loguearte como otro usuario su – otrousuario. ¿La diferencia entre usar o no el guión? Se recomienda usar el guión porque simula que te logueás con ese usuario; por consiguiente, ejecuta todos los archivos de inicio de ese usuario, cambia el directorio actual al HOME de ese usuario, cambia el valor de algunas variables del sistema adaptándolas al nuevo usuario (HOME, SHELL, TERM, USER, LOGNAME, entre otros), y otras cositas más.

Un administrador de sistemas debe tener mucho cuidado al elegir una contraseña para la cuenta de root/administrador, para evitar un ataque por parte de un usuario no privilegiado que ejecute su. Algunos sistemas de tipo Unix tienen un grupo de usuarios llamado wheel, que comprende a los únicos que pueden ejecutar su. Esto podría o no reducir los problemas de seguridad, ya que un intruso podría simplemente apoderarse de una de esas cuentas. El su de GNU, sin embargo, no admite el uso de ese grupo; esto se hizo por razones filosóficas.

Sudo

Un comando relacionado, llamado sudo, ejecuta un comando como otro usuario, pero respetando una serie de restricciones sobre qué usuarios pueden ejecutar qué comandos en nombre de qué otros usuarios (usualmente especificadas en el archivo /etc/sudoers).

Por otro lado, a diferencia de su, sudo pide a los usuarios su propia contraseña en lugar de la del usuario requerido; esto permite la delegación de comandos a usuarios en otras máquinas sin tener que compartir contraseñas, reduciendo el riesgo de dejar terminales desatendidas.

Problemas con sudo: el período de gracia

La ventaja de sudo respecto de su es que sólo ejecuta el comando solicitado simulando ser el otro usuario, sin cambiar verdaderamente el usuario actual. Ello implica que uno puede ejecutar un comando como administrador y, al segundo siguiente, volverá a tener los privilegios del usuario que estaba usando antes… o casi.

Algunos ven como una brecha de seguridad el hecho de que sudo otorgue un “período de gracia” que permita al usuario ejecutar comandos como otro usuario sin la necesidad de tener que ingresar una y otra vez sudo delante del comando y la contraseña luego de ejecutarlo. Pasado ese “período de gracia”, sudo volverá a preguntarnos la clave.

Esto es “malo”, esencialmente porque alguien podría apoderarse de nuestra compu luego de haber ingresado la contraseña de sudo y mientras el “período de gracia” está activo hacer un DESASTRE.

Afortunadamente, es posible deshabilitar el “período de gracia”, lo que va a mejorar la seguridad de tu sistema. Sólo hay que agregar una línea en el archivo /etc/sudoers:

sudo nano /etc/sudoers

Y agregá la siguiente línea al final del archivo:

Defaults:ALL timestamp_timeout=0

El cambio tiene efecto en forma inmediata, sin necesidad de reiniciar el sistema.


25 comentarios

  1.   helq dijo

    De hecho SI se puede ingresar con derechos de administrador con sudo y mantenerse allí tal como se hace con su – , para esto hay que escribir: sudo -s cambiando así el usuario actual y dejando al tiempo de gracia como un chiste (ya que se puede estar así el tiempo que se quiera, como con su)

  2. Gracias por la mención, pero el mérito real es del chat de Sabayon – que ya no uso porque se me rompió el disco duro, y preferí volver a Ubuntu -.

    El motivo que me dieron fue que a veces al hacer sudo ciertas configuraciones no consiguen los permisos absolutos y se quedan mal configuradas. Y que “logeándote” con su como root para tareas de actualización y mantenimiento evitas que esto pueda pasar.

    Luego te mandé un correo porque me comprometí a compartir este hallazgo que me pareció no trivial.

    Como Ubuntu se instala por defecto sin usuario root, simplemente ejecutar

    “sudo passwd root”

    introducir la contraseña, confirmarla, y a partir de entonces
    “su root”
    para operaciones de mantenimiento, además de evitar de poner sudo con cada orden.

    En principio en Ubuntu está quitada la cuenta de root para no logearse siempre con esta cuenta, pero desde que me dieron el consejo casi en tono de que usar sudo era un sacrilegio, por si acaso la he seguido.

  3.   Puntero Nill dijo

    se podría acceder al archivo /etc/shadow y cambiar el hash de la contraseña de root por el hash de la contraseña del ususario normal y despues haces un cambio de contraseña para root??? En otro momento lo pruebo igual….

  4.   Usemos Linux dijo

    Claro. Su no es exclusivo de Fedora.

  5.   mfcollf77 dijo

    Entonces de los dos se pueden instalar?, pensé que “SU” solo era en FEDORA.

  6.   Diego Kisai Alba Gallart dijo

    Muy buena información, con esto seguramente se irán las dudas de muchos, por que conozco a varios que tienen esa duda.

  7.   Alex dijo

    En ubunto creo recordar que no se puede usar el comando su (para entrar como usuario root)

  8.   Hazan Perez dijo

    Pues para “recuperar” la contraseña de root (de hecho, cualquier otra contraseña), podrías hacer un “ataque” al archivo de passwords del sistema con John The Ripper. No diré mas sobre esto.

    Tal vez haya otros métodos… Tal vez cambiando la contraseña entrando con “sudo su” y luego el comando “passwd”. Sería interesante ver que responden otras personas…

  9.   Usemos Linux dijo

    Así es… tengo que agradecer a Miguel Mayol i Tur… él fue el de la idea. 🙂
    Saludos! Pablo.

  10.   Boss dijo

    Gracias, como siempre un gran aporte Te lo agradecemos.

  11.   Usemos Linux dijo

    Gracias Boss! Un fuerte abrazo! Pablo.

  12.   Erick dijo

    a mi se me olvidó la contraseña de root, por suerte puedo usar sudo, y para usar su, uso ‘sudo su’ y no me pide pass (?)
    ¿alguien sabe como averiguar la contraseña de root (tengo acceso a root mediante sudo)?

    1.    marvergarab dijo

      sudo passwd

  13.   Usemos Linux dijo

    Ja! Muy listo!

  14.   Jerónimo Navarro dijo

    La diferencia entre ‘su’ y ‘sudo’ es ‘do’

  15.   Fabian Pais dijo

    el que quiere recuperar la contraseña de root seria “sudo passwd root” y ahi le va a pedir que ingrese una nueva

  16.   alex-pilloku@htmail.com dijo

    hola como esta en tu vida

  17.   SynFlag dijo

    Perdon pero, usando el comando su, de esta forma:

    su -c “comando”, es lo mismo que usar sudo sin el periodo de gracia. No veo la necesidad de sudo.

    El uso REAL de sudo, es para darle a ciertos usuarios capacidad de usar tal o cual comando, es mas usado en empresas, para no tener que andar haciendo chroot, cosa que con su no se puede.

  18.   yacardis dijo

    Estimados, debo hacer un TP de Linux, y debo responder algunas preguntas sencillas. Quizá me puedan ayudar. Gracias desde ya:

    ¿Qué comando es el que nos permite instalar/borrar/modificar paquetes debian ?
    ¿Cuál es el comando qué nos permite gestionar más fácilmente la instalación
    de paquetes en debian?
    ¿Cuál es el comando para poder instalar los paquetes rpm?
    ¿Qué opción utilizamos para desinstalar un paquete?
    ¿Cuál es el directorio dónde se encuentran los repositorios de yum?
    ¿Para qué sirve el yum?
    ¿Qué opción usamos para buscar un paquete con yum?
    ¿Qué opción utilizamos para borrar un paquete?
    ¿Qué opción nos sirve para actualizar el sistema?
    ¿Qué letras identifican a los permisos?
    ¿Qué significan cada una de ellas?
    ¿Qué comandos listan los permisos de un archivo?
    ¿Cuáles son los tres grupos en que se dividen los permisos?
    ¿Qué dos formas existen para implementar los permisos?
    ¿Qué sistema numérico utilizan los permisos?
    ¿Qué peso tienen dichas letras?
    ¿Qué son los permisos especiales?
    ¿Cuáles son los permisos especiales existentes y para qué los usuarían?
    ¿Qué comandos utilizo para cambiar los permisos?
    ¿Qué parámetros utilizo para dar permisos de ejecución a un archivo?
    ¿Qué parámetros sirven para dar permisos de lectura a un grupo únicamente?
    ¿Qué parámetros sirven para dar permisos de lectura/escritura al grupo others y quitarle escritura al usuario dueño del archivo?
    ¿Cuáles permisos se crean por defecto a los archivos y directorios?
    ¿Qué comando usamos para verificarlo?
    ¿Cómo cambiamos la máscara por defecto?
    ¿Cómo hacemos para qué la máscara utilizada sea diferente? (Utilizar una máscara por defecto que solo deje a los dueños con todos los permisos. )
    ¿Qué comando lista los procesos? Mencionar diferentes parámetros y su uso.
    ¿Cuál es el proceso que inicia todo ?
    Listar los procesos que correspondan al usuario logueado.
    Listar todos los procesos del sistema.
    ¿Qué opciones uso para obtener información extra?
    Listar todos los procesos que están siendo usados en una terminal
    ¿Qué opción lista los procesos y sus dependencias?
    Explicar qué es un proceso padre e hijo y cómo identificarlo
    ¿Qué comando lista los procesos en forma de arboles?
    ¿Qué comando monitorea los procesos en tiempo real?
    Monitorear únicamente un proceso
    ¿Qué comando muestra el uso de memoria?
    ¿Qué parámetro muestra la memoria en megas?
    ¿Qué parámetro lo hace en intervalos?
    ¿Qué comando muestra información referente acerca del tiempo en que está arriba un equipo?
    ¿Qué comando utilizo para matar procesos?
    ¿Qué es lo que manejan esos procesos para poder ser finalizados?
    ¿Qué tipos de señales son las más comunes?
    Listar los tipos de señales soportadas.
    En una terminal, hacer vi test, y luego ir a otra terminal, buscar el proceso y matarlo con una señal 15. Ídem pero con señal 9.
    ¿Qué diferencia hay entre la señal 9 y 15?
    ¿Cuál funciona por defecto?
    ¿Para qué se corre un proceso en background? ¿y en foreground?
    Ejecutar vi test y luego presionar ctrl+z, ¿que sucedió?.
    Repetir vi test, ctr+z, 4 veces, ¿Como listo lo que suspendí?
    Pasar uno de los procesos a foreground y cerrar vi.
    ¿Qué parámetro de un comando ejecutamos para que no ocupe la shell?
    ¿Qué comando modifica las prioridades de un procesos que ya está corriendo? ¿Cómo le cambiarían la prioridad a la terminal que está corriendo?
    ¿Qué valores de niveles existen y cuál es su jerarquía?
    Abrir el archivo /etc/passwd y ver qué nivel de prioridad tiene.
    Cambiar el nivel de prioridad a 4 y luego a 25 ¿Pudo asignar los dos? ¿Por qué?
    Listar los procesos con los valores de su prioridad.
    ¿Qué comando monitoriza todos los procesos que están corriendo?

  19.   ecc dijo

    Hola , quiero deshabitar sudo, como lo hago .Me sale esto :
    [sudo] password for xxx:
    xxx is not in the sudoers file. This incident will be reported.

    como lo desactivo , ya que yo uso su en debian

    1.    usemoslinux dijo

      Hola ecc!

      Creo que sería mejor que plantees esta consulta en nuestro servicio de preguntas y respuestas llamado Ask DesdeLinux a fin de que toda la comunidad pueda ayudarte con tu problema.

      Un abrazo, Pablo.

  20.   Bertoldo dijo

    Hola. He usado el comando de temperatura disco duro en Linux Mint: ‘sudo hddtemp /dev/sda’, me pide la contraseña, y me arroja el resultado esperado.
    pero, luego al ejecutar en misma terminal ‘hddtemp /dev/sda’ me dice que Permiso Denegado.
    Entonces, no me está obrando el periodo de gracia, ¿a qué se deberá?

  21.   Bertoldo dijo

    Hola blog.
    También descubrí que cuando se instala la distro (ej: ubuntu, linux mint), pide una contraseña de administrador.
    Y en la interfaz gráfica del centro de control, usé la opción de cambiar la contraseña de mi usuario.
    Entonces, ahora usando “su -” pide una contraseña, la cual no es la de mi usuario actual, si no la que utilicé cuando instalé la distro, esa sigue siendo la de usuario root o administrador.
    Eso daría como resultado, que mcho susuarios pueden olvidar la contraseña verdadera de administrador.

  22.   Kendall Dávila dijo

    Hola me parece excelente tu explicación, muy clara, breve y concisa. Gracias por el aporte

Deja un comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.