
Tengo un programa Java que uso para automatizar el proceso de creación de configuraciones de VPN para clientes. El programa llama a un par de scripts bash, crea y copia archivos. Tengo que ejecutarlo como usuario root porque toda la configuración de VPN está en /etc/openvpn. Para este directorio necesito privilegios de root. En la misma máquina tengo el servidor de aplicaciones Glassfish y llamará al programa Java mencionado. Glassfish se ejecuta con un usuario no root.
¿Cuál es la mejor y más segura forma de ejecutar un programa como usuario root, por supuesto, sin ingresar una contraseña si lo ejecuto mediante sudo?
Respuesta1
La opción más segura sería averiguar a qué grupo pertenece openvpn y agregar un usuario sin privilegios con acceso a él.la forma recomendada es crear un usuario openvpny dale privilegios para usar openvpn usando sudo.
Agregar al grupo el usuario con el que ejecuta este programa (probablemente solo con acceso de lectura) para darle acceso a openvpn y otorgarle los privilegios sudo necesarios (para ejecutar openvpn, configuraciones idénticas a las que usa el usuario de openvpn) debería ser suficiente. sin peligro.
Usar root es una forma perezosa;)
Respuesta2
Lo que descubrí es que al ejecutar un comando como sudo sin ingresar la contraseña, hay dos opciones:
- eco CONTRASEÑA | COMANDO sudo -S
agregando la siguiente línea a /etc/sudoers
nombre de usuario TODOS = (TODOS) NOPASSWD: COMANDO
Tenga en cuenta que esta línea debe aparecer después de todas las definiciones de grupo. Puedes verificar qué privilegios de sudo tienes usando sudo -l
. Para este caso esto produce:
(ALL) ALL
(ALL) NOPASSWD: COMMAND
Esto significa que para todos los comandos se requerirá contraseña excepto para el COMANDO. Si pusiéramos username ALL=(ALL) NOPASSWD: COMMAND
antes de las definiciones de grupo, sudo -l
obtendríamos:
(ALL) NOPASSWD: COMMAND
(ALL) ALL
Esto aún requeriría una contraseña para el COMANDO, ya que (ALL) ALL
se especifica después de la línea NOPASSWD.