Estoy tratando de configurar un trabajo Upstart para que se ejecute en el inicio del sistema, y eso también puede ser iniciado / detenido por miembros de un grupo que no sea sudo
. Con una versión anterior, utilicé los update-rc.d
scripts almacenados /etc/init.d/
para que esto funcionara agregando %Group ALL = NOPASSWD: /etc/init.d/scriptname
a mi archivo sudoers, pero parece que no puedo obtener un equivalente que funcione para Upstart.
Intenté agregar %Group ALL = NOPASSWD: /sbin/initctl start jobname
al archivo sudoers, pero intentar ejecutar el comando start jobname
produce este error:
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
Por lo que puedo decir, esa es una queja sobre cómo mi cuenta de usuario no tiene el poder de enviar mensajes de 'Inicio' en el archivo de configuración de D-Bus para Upstart. No he podido encontrar ninguna información sobre cómo editar ese archivo para dar permiso a un grupo para acceder a un servicio específico. ¿Existe esa opción? ¿Hay alguna manera de editar el archivo Sudoers para que pueda ejecutar el trabajo sin editar el archivo de configuración? ¿Es mejor que me quede con la versión anterior?
Personalmente estoy usando la siguiente línea en el archivo /etc/sudoers.d/jobname_myuser:
como se describe aquí: /server//a/390723/68608
fuente
Dicha opción no existe en sudo.
La diferencia entre los scripts de Sysv y los archivos de configuración de Upstart es solo eso: los scripts de Sysv son scripts, ejecutables por derecho propio y puede decirle a sudo que permita que algún grupo los ejecute. Por otro lado, los archivos de configuración de Upstart son simplemente archivos de configuración, no ejecutables, por lo que la ejecución de
start
(enlace simbólico ainitctl
) es lo que permite sudo. Su problema aquí es que permitir que las personas lo ejecuteninitctl
les permiteinitctl
todo.La solución es simple si su preocupación es simplemente un solo trabajo. Haz un guión, di
/usr/bin/jobname.sh
conluego
chmod 755 /usr/bin/jobname.sh
y finalmente agregue ese ejecutable a su archivo sudoers:De esta manera, todos pueden llamar
jobname.sh start
ojobname.sh stop
controlar este trabajo específico. Es posible que desee añadir un poco de comprobación para permitir solamentestart
ystop
parámetros, etc.fuente
initctl
, sino que Upstart rechaza cualquier señal enviada por usuarios / grupos que no hayan recibido explícitamente una entrada de política Permitir en Upstart.conf. ¿Y no hay forma de proporcionar más granularidad que una configuración de todos los trabajos o ninguno en el archivo de configuración?com.ubuntu.Upstart0_6.<JOB>
parte) en Upstart.conf. Dependiendo de sus necesidades, puede ser más sencillo hacer este tipo de script para él en lugar de escribir políticas dbus y reiniciar dbus, etc. La política Dbus es obviamente lo "correcto", pero dependiendo de un caso, un script simple puede largo camino con menos problemas.com.ubuntu.Upstart0_6.jobname
como elsend_interface
producido el mismo mensaje de error como antes. Si tengo razón al adivinar que la salida de error contiene la información de la señal, parece que la interfaz o el destino no reflejan el servicio Upstart al que se refiere la señal. Creo que la información del servicio son solo argumentos en el mensaje de llamada del método D-Bus, y no estoy seguro de poder editar la política de D-Bus para Upstart para tomar decisiones basadas en los valores de los argumentos.sudo jobname.sh start
, para que Upstart vea que la solicitud proviene delroot
usuario. Estoy haciendo un esfuerzo para intentar hacerlo esta es la forma "correcta" (por lo tanto, alejarse de los scripts Sys-V en primer lugar), por lo que me gustaría que esto funcione a través de una política de D-Bus o alguna otra opción de configuración de Upstart, pero si no puedo que funcione, aceptaré esta respuesta."$1"
. Con su[ "$1" = "start" -o "$1" = "stop" ]
prueba, creo que es seguro, pero la$1
expansión sin comillas en una secuencia de comandos ejecutada como root es un hábito poco saludable (a menos que la división de palabras se desee deliberadamente) ...Como se señaló anteriormente, dbus daemon tiene un archivo de configuración que lo especializa para una aplicación en particular.
El archivo de configuración también establece límites de recursos, parámetros de seguridad, etc.
Para más detalles, consulte dbus-daemon-1 (1) - página de manual de Linux
Para permitir que un grupo inicie / detenga trabajos de Upstart, agregue la siguiente política a /etc/dbus-1/system.d/Upstart.conf
Debe considerar las implicaciones de seguridad de dicha política antes de cambiar la política predeterminada. Los miembros de YourGroupName podrán iniciar / detener todos los trabajos de Upstart.
fuente
start: You do not have permission to modify job: jobname
cuando intenté iniciar el servicio.