Creé algunos servicios systemd que básicamente funcionan:
ubicación:
/etc/systemd/system/multi-user.target.wants/publicapi.service
contenido:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
Cuando intento reiniciar el servicio como usuario de techops en la línea de comando, obtengo el siguiente resultado:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
Quiero que solo los técnicos puedan reiniciar los servicios y quiero que este mensaje no aparezca al iniciar sesión como técnicos. ¿Cómo puedo hacer eso?
Leí que hay diferentes enfoques con polkit-1 o sudoers, pero no estoy seguro.
[ACTUALIZACIÓN] 2019-01-27 4:40 pm
Gracias por esta respuesta integral a Thomas y Perlduck. Me ayudó a mejorar mi conocimiento de systemd.
De acuerdo con el enfoque para iniciar el servicio sin una solicitud de contraseña, y quiero disculparme por no haber enfatizado el problema real lo suficiente:
En realidad, lo más importante para mí es que ningún otro usuario que Techops debe detener o iniciar el servicio. Pero al menos con los dos primeros enfoques todavía puedo ejecutar service publicapi stop
y recibo el mensaje ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
nuevamente. Cuando elijo el usuario predeterminado y conozco la contraseña, podría detener todos los servicios. Quiero negarle a este usuario que haga eso, incluso si tiene la contraseña . Información de fondo importante para comprender mejor por qué esta es la parte más importante para mí:
el usuario predeterminado es el único usuario que está expuesto a ssh, pero este usuario no puede hacer nada más (excepto cambiar a otros usuarios si tiene la contraseña de estos otros usuarios) . Pero por el momento, puede iniciar o detener los servicios, pero este usuario no debe hacerlo.
Si alguien obtiene la contraseña del usuario predeterminado e inicia sesión a través de ssh, entonces podría detener todos los servicios en este momento. Esto es lo que quise decir con "Quiero que solo los técnicos puedan reiniciar los servicios". Lo siento, no fui tan exacto en mi pregunta inicial. Pensé que suudir al usuario de Techops podría evitar este problema, pero no es así. El problema en sí mismo no es ejecutar el comando sin solicitud de contraseña. (Podría hacerlo fácilmente como usuario de techops cuando solo ejecuto /home/techops/publicapi start
). El problema en sí mismo es impedir que el usuario predeterminado inicie estos servicios.
Y esperaba que cualquiera de las soluciones pudiera hacer eso.
Comencé con los enfoques de Thomas. El enfoque con sudo funciona cuando no quiero que me pidan la contraseña para los usuarios de techops cuando ejecuto los comandos como se explica, por ej.
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
El segundo enfoque aún no funciona para mí. No puedo iniciar el servicio sin solicitud de contraseña ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
y puedo iniciar sesión como usuario predeterminado cuando tengo la contraseña de este usuario.
Con el tercer enfoque, el servicio ya ni siquiera comienza en el proceso de arranque, así que no estoy seguro de si este enfoque es el adecuado para mí. Ni siquiera puedo hacerlo con lo systemctl enable publicapi.service
que me lleva al siguiente error:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
El error no ocurre cuando muevo todos los servicios nuevamente a / etc / systemd / system / y ejecuto systemctl enable publicapi.service
. Luego, el servicio comienza nuevamente en el arranque.
Todos estos enfoques ayudarán más o menos a omitir la solicitud de contraseña para el usuario de techops, pero cuando ejecuto service publicapi stop
o systemctl stop publicapi
con el usuario predeterminado , puedo detener los servicios si tengo la contraseña. Pero mi objetivo es evitar que el usuario predeterminado inicie o detenga los servicios.
/etc/sudoers
archivo si hay una referencia para ese usuario.
systemctl --user ...
como usuario,techops
no como root. Ni mi sugerencia ni el de @PerlDuck da ningúnsudo
derecho a su defaultuser pero sólo en la TechOps usuario.