Cuando estamos utilizando la terminal y queremos ejecutar comandos con privilegios de superusuario (root), los usuarios de Ubuntu o Mint entre otras estarán acostumbrados a pedir las cosas con sudo.
Cuando estamos delante, es muy cómodo hacerlo, aunque tengamos que introducir la contraseña nada más ejecutar el comando (en muchos sistemas, cuando la has introducido una vez, te deja ejecutar comandos como root durante un rato sin introducir contraseña).
El problema está cuando creamos scripts y automatizamos tareas que requieren en una pequeña parte privilegios de root. Por un lado, podemos ejecutar los scripts como root y olvidarnos, pero es algo muy inseguro, lo suyo es que ejecutemos el comando con sudo y no nos pregunte por contraseña.
Tenemos que tener cuidado con esto, ya que se permitirán algunos comandos de root sin contraseña, y puede que muchos de ellos sean dañinos para el sistema, eso es nuestra responsabilidad.
Tabla de contenidos
Un comando, para un sólo usuario
Para los ejemplos, vamos a ejecutar como root el comando service (para arrancar o parar servicios de sistema). De este modo no tendremos que introducir la contraseña cuando queramos hacerlo.
Para ello vamos a editar el archivo sudoers. Y con ese fin debemos ejecutar el comando visudo como root:
$ sudo visudo
Se abrirá un editor (vi, por ejemplo) con el que podremos editar los contenidos de ese fichero de forma segura. Allí debemos añadir la siguiente línea:
1 | usuario ALL= NOPASSWD : /usr/sbin/service |
Si os fijáis, es la palabra clave NOPASSWD la que provoca que no se pregunte contraseña cuando se invoca el comando.
Podemos hacerlo al final del fichero. En este caso daremos permiso a usuario para que ejecute:
$ sudo service xxxxx xxxxxx
por ejemplo:
$ sudo service apache restart
las veces que quiera sin pedir contraseña.
Un comando, un grupo
Una opción, es que si el ordenador lo utilizan varios usuarios, es permitir a un grupo entero la ejecución de comandos de esta forma, para ello, primero creamos el grupo (el grupo se llamará administradores)
$ sudo groupadd administradores
Ahora introucimos usuarios en el grupo:
$ sudo gpasswd -a usuario1 administradores
$ sudo gpasswd -a usuario2 administradores
$ sudo gpasswd -a usuario3 administradores
o también
$ sudo gpasswd -M usuario1,usuario2,usuario3 administradores
Ahora introducimos lo siguiente en sudoers (con el comando visudo, como antes):
1 | %administradores ALL= NOPASSWD : /usr/sbin/service |
Muchos comandos, muchos usuarios
También puede ser que tengamos muchos comandos para permitir a muchos usuarios y, aunque podemos introducir 200 líneas en sudoers, a lo mejor es algo complicado de administrar en el caso de que queramos quitar un comando, ya que tendremos que modificar varias líneaas, o queramos quitar a un usuario. Para eso utilizaremos los alias de sudoers.
Podemos utilizr comandos especiales dentro de sudoers que nos permitirán crear un Alias donde introducir una enumeración de datos (por ejemplo usuarios y comandos):
- User_Alias NOMBRE_DE_LA_COLECCION = usuario1, usuario2, usuario3, etc : Configurará una colección de usuarios llamada NOMBRE_DE_LA_COLECCION
- Cmnd_Alias COLECCION_COMANDOS = comando1, comando2, comando3, etc : Configura una colección de comandos llamada COLECCION_COMANDOS
Luego estos alias podemos utilizarlos en la línea de sudoers que activa la utilización sin contraseña:
1 | ADMINISTRADORES ALL= NOPASSWD : COMANDOS |
Algo que me dejé en el tintero
En esta guía no quise introducir el host (es ese ALL) que nos queda colgado, y es que podemos limitar el uso de sudo a un host determinado. Por ejemplo, permitir esa ejecución cuando se ejecuten en modo local o desde un determinado nodo remoto (para que no desde todos lados se pueda hacer). Aquí podemos especificar tanto nombres de host como direcciones IP.
Foto: xkcd
Pingback: Bitacoras.com /
Pingback: BlogESfera.com /
Pingback: Poesía binaria » Creando un menú selector de frecuencia de nuestra CPU /