En este artículo veremos las diferencias entre los comandos su y sudo en Linux.
- Introducción
- El comando su
- El comando sudo
- 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 del usuario 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.
- 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 ejecutamossuseguido delnombre de usuario, adquirimos los privilegios de otro usuario del sistema y nos posicionamos en elhomedel usuario que lo invocó. Además, heredamos las variables de entorno del usuario que lo invoca. Veamos un ejemplo en el que el usuariomortadeloadquiere los privilegios del usuariofilemon: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 demortadelo. No olvidemos quefilemonhereda las variables de entorno demortadelo. - Cambiar de usuario sin heredar las variables de entorno (Volver al índice General)
Si ejecutamossu -seguido delnombre de usuario, no solo adquiriremos los privilegios de otro usuario, sino que además, nos posicionamos en elhomedel usuario que adquirimos sus privilegios y no heredamos sus variables de entorno. Veamos un ejemplo en el que el usuariomortadeloadquiere los privilegios del usuariofilemon, pero consu -:mortadelo@mypc:~$ su - filemon Contraseña: filemon@mypc:~$
Obsérvese que ahora, nos convertimos en el usuario
filemony nos hemos posicionado en el directoriohome(~)del usuariofilemon. Ademásfilemonno hereda las variables de entorno demortadelo.
- Cambiar de usuario heredando las variables de entorno (Volver al índice General)
- Cómo cambiar a la cuenta de root (Volver al índice General)
Si ejecutamos el comandosusin indicar elnombre de usuario, por defecto adquiriremos los privilegios de root. Veamos ejemplos sin y con-de como el usuariomortadeloadquiere 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 demortadelo. - 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 demortadelo.
- Cambiar de usuario heredando las variables de entorno (Volver al índice General)
- Cómo cambiar a la cuenta de un usuario normal del sistema (Volver al índice General)
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 utilizarsu –en lugar desu.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.
- Ejemplos de uso del comando su (Volver al índice General)
- 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/sudoerscontiene 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/sudoerses mediante el comandovisudo.visudobloquea 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 comandovisudodesde una terminal:# visudoEl contenido del archivo
/etc/sudoerssuele 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/sudoersy 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/sudoerscon 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 desudoersinsertandolos bajo la línea que define aroot.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:
mortadelopodrá 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
sudoestán incluidos en la lista desudoers. La segunda establece las reglas para los usuarios que pertenecen al gruposudo.Para añadir un usuario a la lista de
sudoersutilizando este método, simplemente tendremos que añadirlos al gruposudo. Veamos un ejemplo de como añadimos al usuariofilemonal gruposudo:$ sudo usermod -a -G sudo filemon
En sistemas RedHat, Fedora o Centos el grupo que agrega usuarios a la lista de
sudoersse llamawheel, por lo tanto, para agregar al usuariofilemónal grupowheelejecutaremos el siguiente comando:$ sudo usermod -a -G wheel filemon
- Añadirlos directamente al archivo /etc/sudoers (Volver al índice General)
- Eliminar el periodo de gracia de sudo (Volver al índice General)
- 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 quefilemontiene un script que solo él puede ejecutar. Veamos como lo ejecutaríamortadelo: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 usuariomortadelo: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
- Ejecutar un comando como root (Volver al índice General)
Para más información sobre el comando sudo, pincha aquí para ver su página man.
- Configurar sudoers (Volver al índice General)






Deja una respuesta