Diferencias entre su y sudo

Diferencias entre su y sudo

 
 

Índice General

  1. Introducción
  2. El comando su
  3. El comando sudo

 

  1. Introducción (Volver al índice General)
    En este artículo veremos las diferencias entre su y sudo, pero antes de entrar a conocer los comandos su y sudo tendremos que tener claro que es la cuenta de root. root es la cuenta de súper usuario de Linux, el administrador del sistema, la cuenta con el nivel de privilegios mas alto y que le permiten controlar totalmente el sistema. El resto de usuarios del sistema siempre tendrán un nivel de privilegios inferior al de root.

    Debido al alto nivel de privilegios de la cuenta de root, no es aconsejable utilizar la cuenta de root para una simple sesión de uso habitual, ya que pone en riesgo el sistema al garantizar acceso privilegiado a los programas que ejecuta. Es preferible utilizar una cuenta de usuario normal y utilizar el comando su o sudo para adquirir los privilegios de root en caso de ser necesario.

    A continuación veamos la utilidad de los comandos su y sudo.

  2.  

  3. El comando su (Volver al índice General)
    su es el acrónimo de «substitute user» (usuario sustituto) o según opiniones, «super user» (super usuario). su nos permite cambiar de usuario sin cerrar la sesión del usuario actual. Este comando se utiliza cuando tenemos que ejecutar comandos con la cuenta de otro usuario. Si lo invocamos sin indicar ningún nombre de usuario, por defecto cambiamos a la cuenta de root.

    • Ejemplos de uso del comando su (Volver al índice General)
      A continuación veremos como cambiar a la cuenta de un usuario normal del sistema y a la cuenta de root.

      • Cómo cambiar a la cuenta de un usuario normal del sistema (Volver al índice General)

        • Cambiar de usuario heredando las variables de entorno (Volver al índice General)
          Si ejecutamos su seguido del nombre de usuario, adquirimos los privilegios de otro usuario del sistema y nos posicionamos en el home del usuario que lo invocó. Además, heredamos las variables de entorno del usuario que lo invoca. Veamos un ejemplo en el que el usuario mortadelo adquiere los privilegios del usuario filemon:

          mortadelo@mypc:~$ su filemon
          Contraseña: 
          filemon@mypc:/home/mortadelo$

          Obsérvese que a pesar de que nos convertimos en el usuario filemon, seguimos en el home de mortadelo. No olvidemos que filemon hereda las variables de entorno de mortadelo.

        • Cambiar de usuario sin heredar las variables de entorno (Volver al índice General)
          Si ejecutamos su - seguido del nombre de usuario, no solo adquiriremos los privilegios de otro usuario, sino que además, nos posicionamos en el home del usuario que adquirimos sus privilegios y no heredamos sus variables de entorno. Veamos un ejemplo en el que el usuario mortadelo adquiere los privilegios del usuario filemon, pero con su -:

          mortadelo@mypc:~$ su - filemon
          Contraseña: 
          filemon@mypc:~$

          Obsérvese que ahora, nos convertimos en el usuario filemon y nos hemos posicionado en el directorio home (~) del usuario filemon. Además filemon no hereda las variables de entorno de mortadelo.

      • Cómo cambiar a la cuenta de root (Volver al índice General)
        Si ejecutamos el comando su sin indicar el nombre de usuario, por defecto adquiriremos los privilegios de root. Veamos ejemplos sin y con - de como el usuario mortadelo adquiere los privilegios de root:

        • Cambiar de usuario heredando las variables de entorno (Volver al índice General)
          mortadelo@mypc:~$ su
          Contraseña: 
          root@mypc:/home/mortadelo#

          Obsérvese que a pesar de que nos convertimos en el usuario root, seguimos en el home de mortadelo. No olvidemos que root hereda las variables de entorno de mortadelo.

        • Cambiar de usuario sin heredar las variables de entorno (Volver al índice General)
          mortadelo@mypc:~$ su -
          Contraseña: 
          root@mypc:~#

          Obsérvese que ahora, nos convertimos en el usuario root y nos hemos posicionado en el directorio home (~) del usuario root. Además root no hereda las variables de entorno de mortadelo.

    Nota: su ya no altera la variable PATH de manera predeterminada. Cuando abrimos en la terminal una sesión de usuario root con su, su variable PATH no contiene determinados directorios como /sbin, y por lo tanto, muchos comandos de administración del sistema fallan. Cuando los ejecutamos, el sistema responde “orden no encontrada” (command not found).
    La solución es utilizar su – en lugar de su.

    En ZeppelinuX hemos publicado el artículo Command not found (Orden no encontrada ) con «su» en Debian 10 ‘buster’ que trata más profundamente este aspecto de su.

    Para mas información sobre el comando su, pincha aquí para ver su página man.



  4. El comando sudo (Volver al índice General)
    sudo es el acrónimo de «super user do» (algo así como hacer como súper usuario). sudo nos permite ejecutar programas y comandos con el nivel de privilegios de root (súper usuario), es muy similar a su pero con algunas restricciones definidas dentro del archivo /etc/sudoers.
    Al permitir obtener privilegios a cualquier usuario, sudo es menos aconsejable e inseguro que su, por este motivo no todas las distribuciones lo integran.

    • Configurar sudoers (Volver al índice General)
      El fichero /etc/sudoers contiene la lista de usuarios a los que se le permite la ejecución del comando sudo y cual es su alcance y privilegios.

      Nota: La forma recomendada y segura de editar el fichero /etc/sudoers es mediante el comando visudo. visudo bloquea el archivo /etc/sudoers, guarda los cambios en un archivo temporal y comprueba los errores sintácticos antes de copiarlo en /etc/sudoers.

      Para editar el archivo sudoers, tendremos que adquirir previamente privilegios de root, por ejemplo con su. Una vez adquiridos los privilegios de root, simplemente ejecutamos el comando visudo desde una terminal:

      # visudo

      El contenido del archivo /etc/sudoers suele ser similar al siguiente:

      #
      # This file MUST be edited with the 'visudo' command as root.
      #
      # Please consider adding local content in /etc/sudoers.d/ instead of
      # directly modifying this file.
      #
      # See the man page for details on how to write a sudoers file.
      #
      Defaults        env_reset
      Defaults        mail_badpass
      Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
       
      # Host alias specification
       
      # User alias specification
       
      # Cmnd alias specification
       
      # User privilege specification
      root    ALL=(ALL:ALL) ALL
       
      # Allow members of group sudo to execute any command
      %sudo   ALL=(ALL:ALL) ALL

      • Eliminar el periodo de gracia de sudo (Volver al índice General)
        Si ejecutamos sudo desde una terminal, lo primeros que se nos pide es la contraseña. Si volvemos a ejecutar en la misma terminal el comando sudo, no nos pedirá la contraseña. El tiempo que transcurre desde que ejecutamos por primera vez el comando sudo hasta que lo volvemos a ejecutar y nos vuelve a perdir la contraseña se le conoce como «periodo de gracia».

        Para hacer que sudo sea algo más seguro, puedemos modificar el archivo /etc/sudoers y eliminar el “periodo de gracia” para que ningún intruso lo use indebidamente.

        Para eliminar el «periodo de gracia», en primer lugar editamos el archivo /etc/sudoers con nuestro editor favorito:

        $ sudo nano /etc/sudoers

        Al final del fichero, escribimos la siguiente línea:

        Defaults:ALL timestamp_timeout=0
      • Añadir usuarios a la lista de sudoers (Volver al índice General)
        Veremos dos métodos:

        • Añadirlos directamente al archivo /etc/sudoers (Volver al índice General)
          Con este método, añadiremos usuarios a la lista de sudoers insertandolos bajo la línea que define a root.

          La sintaxis genérica para los usuarios listados en este archivo es la siguiente:

          quién dónde = (como_quién:como_quiénes) qué

          Veamos un ejemplo añadiendo al usuario mortadelo:

          ...
          # User privilege specification
          root         ALL=(ALL:ALL) ALL
          mortadelo    ALL=(ALL:ALL) ALL
          ...

          Expliquemos un poco todos estos ALL:

          • mortadelo ALL=(ALL:ALL) ALL: Este indica que la regla se aplica a cualquier anfitrión o host.
          • mortadelo ALL=(ALL:ALL) ALL: mortadelo podrá usar comandos de cualquier usuario.
          • mortadelo ALL=(ALL:ALL) ALL: Si el anterior ALL permitía usar comandos de usuarios, éste permite usar comandos de grupos.
          • mortadelo ALL=(ALL:ALL) ALL: Las reglas se aplican a todos los comandos.
        • Añadirlos al grupo sudo (Volver al índice General)
          Al final del archivo /etc/sudoers, podemos ver que aparecen las siguientes líneas:

          ...
          # Allow members of group sudo to execute any command
          %sudo   ALL=(ALL:ALL) ALL

          La primera de estas dos líneas, lo que nos está diciendo es que los usuarios que pertenecen al grupo sudo están incluidos en la lista de sudoers. La segunda establece las reglas para los usuarios que pertenecen al grupo sudo.

          Para añadir un usuario a la lista de sudoers utilizando este método, simplemente tendremos que añadirlos al grupo sudo. Veamos un ejemplo de como añadimos al usuario filemon al grupo sudo:

          $ sudo usermod -a -G sudo filemon

          En sistemas RedHat, Fedora o Centos el grupo que agrega usuarios a la lista de sudoers se llama wheel, por lo tanto, para agregar al usuario filemón al grupo wheel ejecutaremos el siguiente comando:

          $ sudo usermod -a -G wheel filemon

    •  
       

    • Usos más comunes de sudo (Volver al índice General)

      • Ejecutar un comando como root (Volver al índice General)
        El uso más común de sudo es seguido de un comando para ejecutar este último con privilegios de root. Veamos un ejemplo:

        $ sudo apt intall paquete

        Con este comando estamos instalando un paquete en nuestro sistema.

        $ sudo nano /etc/hosts

        con este comando editamos el archivo /etc/hosts.

      • Ejecutar comandos de otro usuario (Volver al índice General)
        Supongamos que filemon tiene un script que solo él puede ejecutar. Veamos como lo ejecutaría mortadelo:

        mortadelo@mypc:~$ sudo -u filemon /home/filemon/myscript.sh
      • Qué comandos puedo utilizar con sudo (Volver al índice General)
        Veamos que comandos puede utilizar el usuario mortadelo:

        mortadelo@mypc:~$ sudo -l
        Matching Defaults entries for mortadelo on zion:
            env_reset, mail_badpass,
            secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
         
        User mortadelo may run the following commands on zion:
            (ALL : ALL) ALL

    Para más información sobre el comando sudo, pincha aquí para ver su página man.

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.