viernes, 4 de octubre de 2013

Ejecutar un comando, que normalmente requiere permisos de administrador, con permisos de usuario

Normalmente hay muchos comandos y programas que para ser ejecutados requieren que en la terminal antepongamos el comando sudo a dicho comando ,  tras lo cual nos pide la contraseña de administrador y luego si, se ejecuta el comando o programa. Si tratamos de ejecutar este tipo de comandos o programas sin anteponer el comando sudo, simplemente no se ejecuta o nos indica que necesita permisos de root.

Para la explicación de este tema voy a hacerlo con el comando pm-hibernate. Si lo ejecutamos en la terminal, nos sale un mensaje:"This utility may only be run by the root user." Es decir que este comando solo se puede ejecutar con permisos de root. Por defecto si ejecutamos este comando anteponiendo el comando sudo  ( sudo pm-hibernate) nos pedirá la contraseña al ejecutarlo, y si que se ejecutará,

Pero podemos hacer que no nos la pida, para ello en la terminal escribimos el comando: sudo gedit /etc/sudoers
y añadimos al final del archivo de texto una línea del tipo:
nombre_de_usuario ALL = (ALL) NOPASSWD: dirección_del_comando
por ejemplo:
usuario ALL = (ALL) NOPASSWD: /usr/sbin/pm-hibernate
guardamos los cambios hechos y cerramos el archivo.

En vez de nombre_de_usuario ponemos el nombre del usuario que queremos que use el comando sin permisos de root. En vez dirección_del_comando pondremos la dirección completa donde esté el comando que queramos ejecutar sin permisos de root, en este caso la dirección del comando es /usr/sbin/pm-hibernate .

Para mayor seguridad de que se realizan los cambios, reiniciamos el pc, y ya deberíamos poder ejecutar el comando sin permisos de root, es decir sin que se nos pida la contraseña de administrador.

Podemos añadir varias líneas, para hacer que un único usuario ejecute varios comandos sin permisos de root, por ejemplo:

usuario ALL = (ALL) NOPASSWD: /usr/sbin/pm-hibernate
usuario ALL = (ALL) NOPASSWD: /usr/sbin/update-grub

También podemos añadir varias líneas para que diversos usuarios puedan ejecutar diversos comandos sin permisos de root, por ejemplo:

usuario ALL = (ALL) NOPASSWD: /usr/sbin/pm-hibernate
usuario ALL = (ALL) NOPASSWD: /usr/sbin/update-grub
usuario2 ALL = (ALL) NOPASSWD: /usr/sbin/pm-hibernate
usuario2 ALL = (ALL) NOPASSWD: /sbin/poweroff



No debemos abusar de este método añadiendo comandos a la lista de los que se pueden usar sin permisos de administrador, ya que según en que casos podemos afectar a la seguridad del sistema.

El poder usar con permisos de usuario un comando que normalmente necesita permisos de root nos puede servir para ejecutar de forma manual o de forma automática, un script, sin que nos pida la contraseña de root y/o que de otra forma no podríamos ejecutar.

-------------------------------------


2 comentarios:

  1. si es por editar el archivo /etc/sudoers es mejor usar
    sudo EDITOR=gedit visudo
    para evitar problemas..

    Saludos!

    ResponderEliminar
  2. nota mental:
    si no encuentran el comando exacto con toda la dirección de ejecución (digo: /usr/bin/xxxx en vez de "xxxxx") rompen el archivo sudoers.

    nota mental 2:
    si rompen el archivo sudoers, entonces no pueden usar más "sudo".

    nota mental3: se arregla desde el modo a prueba de errores, editando el archivo con nano, luego de hacer un "mount -a" para poder escribir en el sistema.

    Salú!

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.