A estas alturas de nuestra andadura en los tutoriales de Raspberry Pi ya os habréis encontrado que ciertos comandos empiezan por ‘sudo’. En esta entrada vamos a ver qué es ‘sudo’ y cómo usarlo para ejecutar comandos con permisos de root.
Básicamente, ‘sudo’ es una aplicación que nos permite ejecutar otro comando con permisos elevados o de administrador. Es necesario anteponerlo a ciertos comandos para que podamos ejecutarlos.
Pero para entender su necesidad, vamos a ver brevemente que es un usuario y un super usuario, y qué papel tiene ‘sudo’ en todo esto.
Usuarios y super usuarios
Como sabemos uno de los puntos fuertes de Linux es su seguridad. Y cualquier sistema de seguridad tiene como base una buena gestión de usuarios y permisos, como veremos en la siguiente entrada de la serie.
En Linux tenemos los usuarios “normales” que, generalmente, tienen permiso para ejecutar programas e interactuar con ficheros de su carpeta ‘home’. Así, por ejemplo, el usuario ‘pi’ con el que accedemos por defecto a Raspberry es un usuario normal.
Pero Linux tiene usuarios administradores de sistema también llamados Super Usuarios o ‘root’s. En general, usamos ambos términos indistintamente. Los administradores, básicamente, tienen permiso para hacer cualquier acción en el sistema.
Durante la instalación de un sistema Unix se crea al menos un Super Usuario, que normalmente tiene de nombre de usuarios ‘root’, ‘admin’, ‘administrator’ o ‘superuser’. En Raspbian el Super Usuario por defecto es ‘root’.
Llamar ‘root’ a un Super Usuario tiene origen en que son los usuarios que tienen acceso a la raiz del sistema, es decir, a /root
Por supuesto, los comandos más críticos, importantes y peligrosos del sistema tienen que ser ejecutados por alguien con permisos de Super Usuario. Los Super Usuarios, a diferencia de un usuario normal, también pueden actuar sobre las cuentas de otros usuarios.
Sin embargo, no sería muy práctico si sólo los usuarios logueados como root pudieran ejecutar estas tareas. A veces conviene proporcionar a otros usuarios permiso para ejecutar aplicaciones de administrador.
Pero, si queremos que ciertos usuarios puedan ejecutar estos comandos, no resultaría muy práctico proporcionarles la contraseña de usuario root. Tampoco sería muy práctico tener que desloguear y volver a loguear como root para ejecutar el comando, teniendo que llegar a la ruta done estábamos antes, etc. Aquí es donde entra en juego el comando sudo.
¿Qué es ‘Sudo’?
Sudo (Super User Do) es una aplicación desarrollada en 1980 por Bob Coggeshall y Cliff Spencer, y mantenida actualmente por Todd Miller con la colaboración de Chris Jepeway y Aaron Spangler.
Esta utilidad, incorporada de los sistemas Unix y derivados (Linux, Mac Os, etc) permite ejecutar un comando con los privilegios de otro usuario. Esto incluye ejecutar programas como root, que es la función que mayor frecuencia usaremos ‘sudo’.
Cómo usar sudo
Para ejecutar un comando con los privilegios de otro usuario empleamos el siguiente comando,
sudo -u otroUsuario comando
Siendo otroUsuario el nombre del usuario que queremos emular, y ‘comando’ el comando a ejecutar.
Si omitimos el nombre de usuario, que es la sintaxis más habitual, ejecutaremos el comando con permisos de root
sudo comando
Si has escrito un comando y te das cuenta de que necesitas permisos de Super Usuario puedes invocar el último comando simplemente haciendo,
sudo !!
Otra posibilidad para conseguir permisos de super usuario seria usar el comando
sudo su
Esto nos otorga permisos de super usuario en la sesión, hasta que ejecutamos el comando
exit
Que nos quitara los permisos elevado y volveremos a nuestra triste existencia de usuario común. Pero no es una buena costumbre hacer esto y debemos acostumbrarnos a hacerlo solo cuando sea imprescindible.
Quién puede usar ‘sudo’
Lógicamente, el control de quién puede ejecutar la aplicación ‘sudo’ es de vital importancia para la seguridad del sistema.mAl ejecutar ‘sudo’, lo primero que hace la aplicación es verificar en una lista de configuración que el usuario actual puede ejecutar ‘Sudo’
La configuración de ‘sudo’ se guarda en el fichero ‘sudoers’ ubicado ‘/etc/sudoers’. Sin embargo, la edición manual del fichero ‘sudoers’ está fuertemente desaconsejada. En su lugar debemos usar el comando:
sudo visudo
‘visudo’ es una aplicación que permite editar de forma segura el fichero de ‘sudoers’. En primer lugar, bloquea el fichero durante su edición para que dos personas no lo modifiquen simultáneamente. Por otro lado, antes de guardar el fichero ‘sudoers’ comprueba que la sintaxis es correcta, y detiene si detecta algún defecto
El fichero ‘sudoers’ tiene su propia sintaxis bastante particular, y muchas opciones que configurar. Vamos a ver únicamente un resumen breve de las muchas opciones disponibles.
Al editar el fichero ‘sudoers’ veréis que tiene la siguiente pinta:
## User privilege specification
root ALL=(ALL) ALL
suse ALL=(ALL) ALL
pi ALL=(ALL) ALL
Donde la sintaxis más sencilla de un permiso para ‘sudo’ es:
userName ALL=(ALL:ALL) ALL
Siendo,
- userName indica el usuario al que se aplica la regla
- Primer ‘All’ indica que la regla se aplica en todos los hosts
- Segundo ‘All’ indica que puede ejecutar comandos como todos los usuarios
- Tercer ‘All’, puede ejecutar comandos como todos los grupos de usuarios
- Último ‘All’ indica que puede ejecutar todos los comandos
Así, por ejemplo,
pi ALL=(ALL) NOPASSWD: ALL
Significa que el usuario ‘pi’ puede ejecutar en todos los hosts, como cualquier usuario, cualquier comando, y no tiene que introducir la contraseña.
Por supuesto, hay mucho más que podríamos explicar sobre el fichero ‘sudoers’, que tiene muchísimas más opciones y parámetros que podemos configurar. Sin embargo, queda fuera del ámbito de esta entrada. Si tenéis más interés, podéis consultar la documentación del programa.
Forma alternativa de permisos Sudo a un usuario
Muchas distribuciones Linux, como Raspbian o Ubuntu, vienen con un grupo creado dentro del fichero ‘sudoers’ llamado ‘sudo’. Cualquier usuario que permanezca a este grupo tiene derechos para ejecutar ‘sudo’
Por tanto, una forma alternativa y quizás más sencilla de dar permisos de ‘sudo’ a un usuario es meterlo en este grupo con el siguiente comando.
sudo usermod -a -G sudo nombreUsuario
La responsabilidad del SuperUser
No podríamos no marcar las mínimas normas a respetar cuando actúes como usuario root:
- Respeta la privacidad de los otros
- Piensa antes de escribir
- Un gran poder conlleva una gran responsabilidad
Que viene a ser un recordatorio de la responsabilidad de ser un Super Usuario. En primer lugar, tened en cuenta que cuando metes la pata no hay nada que te proteja de fallos. Te puedes cargar el sistema tú solito.
Por eso conviene acostumbrarnos a ejecutar los comandos con permisos elevados únicamente cuando sea necesario. El resto del tiempo trabajar como un usuario ‘normal’.
Por último, por supuesto, no debéis hacer nada en la cuenta de los demás que no quisierais que hicieran en la vuestra.
Hasta aquí la entrada sobre usuarios, super usuarios y el uso de la casi imprescindible aplicación ‘sudo’. A partir de aquí usaremos ‘sudo’ con frecuencia, y pronto os acostumbraréis a su uso.
En las siguientes entradas veremos la gestión de usuarios y contraseñas, y la gestión de grupos de usuarios, dos aspectos fundamentales para mantener la seguridad de nuestro sistema.