sudoers: Ejecutar un comando como súper usuario sin que pida contraseña

Publicado en: Tecnología

Propósito
Para que al lanzar un comando de Unix como súper usuario, sin serlo, con el modificador ‘sudo‘ no pida la correspondiente contraseña, editaremos el fichero de configuración ‘sudoers‘.

Qué es lo que hace realmente
Podemos decidir que un usuario, un grupo, o desde una máquina en concreto, por su nombre de host o rango de ip’s incluso, ejecuten comandos restringidos al usuario root o a usuarios de sistema.

La tarea no es difícil, pero es recomendable seguir unos pasos de seguridad mínima.

Seguridad ante todo, que si cualquiera puede ejecutarlo todo, menuda podemos liar. Daremos permisos de ejecuciones con los dedos contados, y por hacernos la vida más fácil a los administradores, no al usuario, que tampoco va a usar los comandos en Mac OS X.

Primero de todo, hacer una copia del fichero de configuración, editarlo, probarlo con un comando antes de ponerlo como definitivo en el sistema y finalmente sustituir el fichero sudoers por el nuevo para empezar a usarlo inmediatamente.

Este fichero puede ser consultado por varios usuarios simultáneamente, por eso utilizamos no cualquier editor de texto, sino el artefacto ‘visudo’ que nos permitirá editarlo con vi, pero con la elegancia de editar un fichero temporal que no será accedido y que solo sustituirá al de sistema cuando lo guardemos.

Una idea general del fichero sudoers
En cada línea del fichero podemos hacer alias de comandos, alias de hosts, de usuarios, de grupos… que luego podemos manejar en las líneas de acciones para usuarios, grupos y hosts.

Una línea se compone de nombre_usuario_grupo (tabulador) nombre_host=comando, donde nombre_usuario_grupo es o el nombre de un usuario en concreto, de un grupo, que puede ser del sistema, poniendo ‘%’ delante, %staff, o creado con alias en el propio sudoers, RUTEROS, nombre en mayúsculas, o aplicarse a todos los usuarios, ALL. nombre_host puede ser localhost, el nombre DNS, del equipo local o remoto, un alias de hosts, con el nombre en mayúsuculas, o aplicarse a todos los hosts, ALL.

Paso a paso, y un caso concreto
Hacemos una copia del fichero sudoers como usuario root, o supersusuario.

$ su
password:

root$ cp /etc/sudoers /etc/sudoers.backup
root$ visudo

Al final del archivo añadimos las líneas que necesitemos, en mi caso:

ALL   ALL=NOPASSWD: /sbin/route

en la que a todos los usuarios (primer ALL) desde cualquier host (segundo ALL) le decimos que ejecute solamente el comando ‘route’ sin que pida la contraseña de súper usuario, de forma que cuando se ejecute el comando ‘route’ con el modificador ‘sudo’ no sea necesario meter la contraseña de administrador y un script de arranque de usuario pueda ejecutarse para añadir unas rutas de red al equipo.

Y al escribir en Terminal el comando:

sudo /sbin/route add -net 192.168.1.0 192.168.2.1

no nos preguntará la contraseña, y se podrá meter en cualquier script que necesitemos sin necesidad de dejar el script parado. Genial.

Bibiliografía