sábado, 11 de junio de 2011

Dar permisos de administrador sólo a ciertos programas ejecutados por ciertos usuarios

En ocasiones, muchos programas necesarios para el trabajo de ciertos usuarios o grupos de usuarios necesitan ser ejecutados como root. Sin embargo debido a la política de seguridad de nuestra organización no podemos darle acceso a todo el sistema. Para solucionar esto, Linux cuenta con un comando llamado SUDOERS. Que una vez configurado nos ayudará a especificar permisos especiales para grupos o usuarios.

Descripción
SUDOERS es una lista en donde se agregan usuarios asociados a ciertos comandos qué sin esta configuración sólo podrían ser ejecutados por el root.
Básicamente se componen por aliases de comandos.

Hay cuatro tipos de alias:
User_Alias, Runas_Alias, Host_Alias y Cmnd_Alias.

User_Alias ::= NAME '=' User_List

Runas_Alias ::= NAME '=' Runas_List

Host_Alias ::= NAME '=' Host_List

Cmnd_Alias ::= NAME '=' Cmnd_List

NAME ::= [A-Z]([a-z][A-Z][0-9]_)*

Donde NAME es el nombre del comando a invocar.
User_List la lista de usuarios permitidos.
Host_List la lista de servidores permitidos.
Cmnd_List la lista de comandos.

Para mayor información revisa el manual de SUDOERS.
http://linux.die.net/man/5/sudoers

Ejemplo.
Tengo un servidor web con DNS dinámico. Para que asocie el ip dinámico que me da mi provedor de internet con un nombre (harpia.no-ip.org) debo estar ejecutando un comando llamado noip2 .
Sin embargo, estoy cansado de tener que ejecutar ese comando como root. Se puede solucionar de muchas formas pero dado todo lo que vimos con SUDOERS lo vamos a hacer así.

Práctica
Lo primero que pensamos es modificar el archivo sudoers ubicado en:
/etc/sudoers (cómo superusuario obviamente!)
ATENCION: el archivo originalmente no se podrá editar porque ni siquiera el dueño (root) tiene permisos de escritura. Si los cambiamos (sudo chmod o+w sudoers) habremos cambiado la configuración de sudoers y no podremos volver a utilizar el comando sudo! Por tanto ni siquiera podremos volver a editar sudoers para regresarlo a su forma original. Si te pasó esto revisa lo siguiente: http://kubuntuforums.net/forums/index.php?topic=3114059.0
También puedes volver a editar el archivo entrando al kernel a prueba de fallos.
Para realizar esto necesitaremos del comando visudo, un editor de texto que sólo modifica al archivo sudoers.

Ejemplo para apagar la computadora sin ser root
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults env_reset

# Uncomment to allow members of group sudo to not need a password
# %sudo ALL=NOPASSWD: ALL

# Host alias specification

# User alias specification
User_Alias USERS = juan, juanlternate
# Cmnd alias specification
Cmnd_Alias APAGAR = /sbin/shutdown -h now, /sbin/halt, /sbin/reboot
Cmnd_Alias IP = /usr/local/bin/noip2
# User privilege specification
# Especificaciones de los usuarios
root ALL=(ALL) ALL
USERS ALL=NOPASSWD: APAGAR,/usr/local/bin/noip2
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

No hay comentarios:

Publicar un comentario