El comando sudo permite asignar el derecho a ejecutar comandos de administrador a uno o varios usuarios y en una o varias máquinas. Para que un usuario pueda ejecutar un comando que sólo puede ejecutar root, se añade un derecho sudo a este usuario para este comando.
El fichero de configuración /etc/sudoers se edita con el comando visudo, además comprueba la sintaxis del fichero antes de guardarlo.
La sintaxis es la siguiente:
user maquina = (cuenta_user_ejecuta_comando) comando
De manera que para autorizar al usuario gentoo a ejecutar el comando tune2fs y sus parámetros con derechos root sobre cualquier máquina (donde esté presente esta regla):
gentoo ALL = /sbin/tune2fs
Se pide la contraseña del usuario y prosigue. La lista de los derechos del usuario se obtiene:
gentoo@syslinux:~$ sudo -l
[sudo] password for gentoo:
User gentoo may run the following commands on this host:
(root) /sbin/tune2fs
Los mensajes de sudo se transmiten a syslog que puede dirigirlos a un fichero, por ejemplo, /var/log/messages. El registro de destino se puede determinar mediante syslog.conf.
Es posible crear:
- grupos de usuarios
- grupos de máquinas
- grupos de comandos
- obligar o no el uso de password
- forzar la ejecución de un comando a usuario distinto de root.
Alias de usuarios:
Usar_Alias ADMIN = gentoo, slack
Si la totalidad de administradores deben poder usar el comando tune2fs:
ADMIN ALL = /sbin/tune2fs
Si los administradores pueden ejecutar sólo en determinadas máquinas utilice el alias de máquinas:
Host_Alias SERVLINUX = syslinux, xena
Se convierte en:
ADMIN SERVERLINUX = /sbin/tune2fs
Existe la posibilidad de agregar varios comandos con o sín parámetros, por ejemplo, si los ADMIN además pueden ejecutar el comando /sbin/fdisk quedaría como sigue:
ADMIN SERVERLINUX = /sbin/tune2fs, /sbin/fdisk
Se pueden crear alias de comandos de manera que faciliten la utilización:
Cmnd_Alias CMDADMIN=/sbin/tune2fs, /sbin/fdisk
Siguiendo con nuestro ejemplo, la línea sudo quedaría:
ADMIN SERVERLINUX=CMDADMIN
Evitar la introducción del password de uno o varios usuario(s) pasa por utilizar NOPASSWD, así los usuarios del alias ADMIN están exonerados de introducir contraseña para utilizar los comandos del alias CMDADMIN:
ADMIN SERVERLINUX=NOPASSWD: CMDADMIN
Obligar al uso de una contraseña también es posible con PASSWD:
ADMIN SERVERLINUX=NOPASSWD: CMDADMIN, \ PASSWD:/sbin/fdisk
A los usuarios del grupo ADMIN podrán iniciar un comando con la identidad de otro usuario distinto de root colocando el alias entre paréntesis:
ADMIN ALL=(sonia) PASSWD: /sbin/service
Los usuarios del grupo ADMIN podrán ejecutar el comando /sbin/service. Como condición tendrán que introducir la contraseña de sonia:
gentoo@syslinux:~$ sudo -u sonia /sbin/services
Puede precisar varios usuarios o crear alias:
Runas_Alias USERLIST=gentoo,sonia
Quedaría asi:
ADMIN ALL=(USERLIST) PASSWD: /sbin/service
El alias ALL define conjunto de usuarios, máquinas, comandos, dependiendo del lugar donde esté escrito.
A los usuarios del grupo ADMIN les está permitido ejecutar todos los comandos, en todas las máquinas sin introducir contraseña.:
ADMIN ALL=NOPASSWD: ALL
Para excluir determinados usuarios, comandos, máquinas, de un alias o lista se utiliza el signo de exclamación:
ADMIN SERVERLINUX=NOPASSWD: ALL, !/sbin/fdisk, PASSWD:/sbin/tune2fs
La línea anterior da a los ADMIN todos los derechos sobre todos los programas sin contraseña excepto /sbin/tune2fs que requier contraseña y /sbin/fdisk que está prohibido.
Linux es genial.