Emitir eventos de inicio como usuario normal

1

Quiero crear una situación en la que algo que un usuario no privilegiado hace (a través de SSH) desencadena un evento que provoca que un trabajo inicial realice alguna acción. Las actividades se basan en cambios en el sistema de archivos, por lo que agradezco los métodos alternativos.

Básicamente quiero tener algo como:

description "Foo job"
exec foo
start on foo

y luego haga que el usuario active el evento como foo. Cuando digo "usuario", en realidad me refiero a un script de enlace de git que se ejecuta automáticamente cuando git empuja a un repositorio en el host a través de SSH.

He intentado simplemente ejecutar initctl emit foo, pero eso solo funciona cuando lo hago como root.

Tampoco puedo usar trabajos de usuario para este caso particular, porque quiero que el trabajo en cuestión reinicie los servidores y cree estructuras de directorio donde el usuario que emite el evento no tiene acceso.

¿Alguna idea sobre cómo podría lograr esto sin dar privilegios innecesarios al usuario?

EDITAR: Solo para agregar un requisito que olvidé mencionar. Esto tiene que ser programable, por lo que ingresar contraseñas no es una opción.


fuente

Respuestas:

2

Para responder mi propia pregunta, el archivo sudoers se puede modificar para permitir a los usuarios ejecutar comandos específicos completos con argumentos. Entonces, para la situación en cuestión, algo como esto hará el trabajo:

Cmnd_Alias EMIT_CMD = /sbin/initctl emit foo
user ALL=(ALL) NOPASSWD: EMIT_CMD

Esto se puede colocar en / etc / sudoers, o en un archivo en /etc/sudoers.d si su sistema operativo está configurado de esa manera.

Una vez que se configura sudo, el usuario sin privilegios podrá llamar al initctlcomando sin contraseña, pero solo con los argumentos especificados, y cualquier otro conjunto de argumentos fallará ya que el usuario (con suerte) no está en la lista de sudoers en ninguna otra capacidad.


fuente