Ho creato alcuni servizi systemd che sostanzialmente funzionano:
Posizione:
/etc/systemd/system/multi-user.target.wants/publicapi.service
soddisfare:
[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
Quando provo a riavviare il servizio come utente techops nella riga di comando, ottengo il seguente output:
==== 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):
Voglio che solo i techops possano riavviare i servizi e voglio che questo prompt non appaia quando si accede come techops. Come lo posso fare?
Ho letto che esistono diversi approcci con polkit-1 o sudoers, ma non sono sicuro.
[AGGIORNAMENTO] 27-01-2019 16:40
Grazie per questa risposta esauriente a Thomas e Perlduck. Mi ha aiutato a migliorare la mia conoscenza di systemd.
Secondo l'approccio per avviare il servizio senza la richiesta di password, e desidero scusarmi per non aver sottolineato abbastanza il vero problema:
In realtà, ciò che è più importante per me è che nessun altro utente oltre a Techops dovrebbe interrompere o avviare il servizio. Ma almeno con i primi due approcci posso ancora eseguire service publicapi stop
e ricevo di ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
nuovo il prompt . Quando scelgo l'utente predefinito e conosco la password, potrei interrompere tutti i servizi. Voglio negare a questo utente di farlo, anche se ha la password . Informazioni di base importanti per capire meglio perché questa è la parte più importante per me:
l'utente predefinito è l'unico utente che è esposto a SSH ma questo utente non può fare nient'altro (tranne cambiare ad altri utenti se si dispone della password di questi altri utenti) . Ma al momento, può avviare o interrompere i servizi, ma questo utente non deve farlo.
Se qualcuno ottiene la password di defaultuser e accede tramite ssh, al momento potrebbe interrompere tutti i servizi. Questo è ciò che intendevo con "Voglio che solo i tecnici possano riavviare i servizi". Mi dispiace, non ero così preciso alla mia domanda iniziale. Ho pensato che il superamento dell'utente di techops avrebbe potuto aggirare questo problema, ma non è così. Il problema stesso non è quello di eseguire il comando senza la richiesta della password. (Potrei facilmente farlo come utente techops quando eseguo solo /home/techops/publicapi start
). Il problema stesso è bloccare l'utente predefinito dall'avvio di questi servizi.
E speravo che una qualsiasi delle soluzioni potesse farlo.
Ho iniziato con gli approcci di Thomas. L'approccio con sudo funziona quando non voglio che mi venga chiesta la password per l'utente tecnico quando eseguo i comandi come spiegato, ad es.
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
Il secondo approccio non funziona ancora per me. Non riesco ad avviare il servizio senza la richiesta della password ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
e posso accedere come utente predefinito quando ho la password di questo utente.
Con il terzo approccio, il servizio non si avvia più nemmeno al processo di avvio, quindi non sono sicuro che questo approccio sia quello giusto per me. Non riesco nemmeno a farlo con ciò systemctl enable publicapi.service
che mi porta al seguente errore:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
L'errore non si verifica quando sposto nuovamente tutti i servizi in / etc / systemd / system / ed eseguo systemctl enable publicapi.service
. Quindi il servizio si riavvia all'avvio.
Tutti questi approcci aiuteranno più o meno a bypassare la richiesta della password per l'utente techops ma quando corro service publicapi stop
o systemctl stop publicapi
con defaultuser, posso interrompere i servizi se ho la password. Ma il mio obiettivo è bloccare defaultuser dall'avvio o dall'arresto dei servizi.
/etc/sudoers
file se esiste un riferimento per quell'utente.
systemctl --user ...
come utentetechops
non come root. Né il mio suggerimento né quello di @PerlDuck danno alcunsudo
diritto all'utente predefinito, ma solo all'utente tecnico .