jueves, 6 de septiembre de 2007

Correr comando como root sin autenticarse

Si tenemos algún comando con permiso de ejecución exclusivo para root que ejecutemos muy a menudo o que se ejecute de forma automática (ej.: un theme de Superkaramba), podemos hacer que no se nos pida autenticarnos cada vez que queramos utilizarlo.

Es el caso del script de la entrada anterior, que necesitaba ejecutarse como sudo script.sh ya que éste utiliza la herramienta apt-get con argumento upgrade, para la cual sólo el usuario root tiene permisos de ejecución.

El comando sudo en las distros Debian/*ubuntu nos permite ejecutar un comando como otro usuario del sistema, en particular root, según los permisos en /etc/sudoers. Para esto puede estar configurado que se nos pida autenticarnos (introducir el password de nuestro usuario). Por defecto, en *ubuntu al menos, nuestro usuario tiene permiso para ejecutar cualquier comando como si fueramos root, siempre y cuando nos autentiquemos. Por esto vale aclarar que cuando hacemos sudo comando y escribimos la contraseña, estamos utilizando la contraseña de nuestro usuario y no la del usuario root (el login de root está desactivado por defecto, y por lo tanto no tiene contraseña).

Así, procedemos a editar /etc/sudoers utilizando el comando visudo (sin argumentos, pero como root), el cual chequeará la validez del archivo una vez terminada la edición. En nuestro caso, nos interesa agregar la siguiente línea al final del archivo:

usuario ALL = NOPASSWD: /ruta/al/comando



Con ella permitimos al usuario usuario ejecutar en cualquier host (útil sólo para sistemas distribuidos), sin que se le pida autenticarse, el comando /ruta/al/comando.

Para ejecutar el comando, el cual tiene permisos de ejecución para root solamente, debemos llamarlo con sudo y especificando la ruta al comando exactamente como la escribimos en /etc/sudoers. O sea:

sudo /ruta/al/comando



De esta forma la contraseña no nos será pedida y la ejecución del comando se hará instantáneamente.

No hay comentarios: