martes, 7 de octubre de 2014

Usar comando sudo sin contraseña

El comando sudo de Unix es muy útil, ya que permite ejecutar comandos de nivel de administración como si fuéramos un superusuario. Para la ejecución del comando nos solicitará la contraseña de superusuario o de algún usuario definido en el fichero /etc/sudoers, el cual define qué usuarios pueden lanzar comandos sudo.

Cuando definimos scripts, el comando sudo puede suponer un inconveniente, especialmente cuando pretendemos automatizar tareas, tales como backups, ya que precisa de una intervención del usuario para introducir la contraseña.

Para llevar a cabo esta clase de tareas sin que se requiera la contraseña de superusuario, debemos realizar modificaciones en el fichero /etc/sudoers. Pero esto no se puede hacer directamente, ya que tiene permisos de sólo lectura. Para ello, debemos ejecutar el siguiente comando:

sudo visudo

La herramienta visudo está concebida especialmente para editar con seguridad el fichero /etc/sudoers, permitiendo, además, verificar la sintaxis y los errores.

Dentro del fichero /etc/sudoers podemos definir un grupo de programas autorizados y prohibidos a ejecutar con sudo, mediante la directiva Cmnd_Alias:

Cmnd_Alias AUTORIZADO = /ruta/programa1, /ruta/programa2
Cmnd Alias PROHIBIDO = !/ruta/programa1, !/ruta/programa2
usuario ALL = (ALL) AUTORIZADO
usuario ALL = PROHIBIDO

En realidad, podemos definir en un mismo grupo los programas permitidos y prohibidos. La diferencia entre ambos estaría en que los programas prohibidos deben llevar como prefijo el signo de admiración (!).

Si deseamos asignar todos los permisos sudo a un usuario específico, podríamos utilizar, directamente, una línea como ésta:

usuario ALL = (ALL) ALL

Si deseamos que, además, no requiera de contraseña, se utilizaría la siguiente línea:

usuario ALL = (ALL) NOPASSWD: ALL

Obviamente, esto no sería muy recomendado por seguridad. Podría definirse esta política de seguridad únicamente a ciertos programas:

Cmnd_Alias AUTORIZADO = /ruta/programa1, /ruta/programa2
usuario ALL = (ALL) NOPASSWD: AUTORIZADO

El archivo /etc/sudoers tiene una gran capacidad de configuración, además de lo visto anteriormente. Podemos, por ejemplo, definir alias para usuarios, así como también grupos de usuarios. Para más información, se puede consultar la ayuda que ofrece Unix:

man 8 sudo
man 5 sudoers
man 8 visudo