Řešení 1:
Napadají mě dva způsoby, jak to udělat:
Jedním z nich je, že se služba stane uživatelskou službou spíše než systémovou službou.
Místo vytvoření systémové jednotky bude jednotka systemd umístěna do domovského adresáře uživatele služby na $HOME/.config/systemd/user/daemon-name.service
. Stejný uživatel pak může spravovat službu pomocí systemctl --user <action> daemon-name.service
.
Aby se uživatelská jednotka mohla spustit při bootování, musí root pro účet povolit prodlevu, tj. sudo loginctl enable-linger username
. Jednotka musí být také WantedBy=default.target
.
Druhým způsobem je povolení přístupu uživatele ke správě systémové jednotky prostřednictvím PolicyKit. To vyžaduje systemd 226 nebo vyšší (a PolicyKit>=0,106 pro soubory JavaScript rules.d – zkontrolujte pomocí pkaction --version
). Všimněte si, že Debian záměrně pozdržel PolicyKit na téměř deset let starou verzi 0.105, která tuto funkci nepodporuje, zjevně kvůli osobnímu názoru jednoho člověka, a ani on, ani distribuce z něj odvozené (jako Ubuntu) nemohou tuto metodu používat.
Vytvořili byste nový konfigurační soubor PolicyKit, např. /etc/polkit-1/rules.d/57-manage-daemon-name.rules
který kontroluje atributy, které chcete povolit. Například:
// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
Jmenovaný uživatel pak může spravovat pojmenovanou službu pomocí systemctl
a bez použití sudo
.
Řešení 2:
sudo
je k tomu stvořen. Upravte /etc/sudoers
soubor s visudo
přidat Cmd_alias
pro příkazy, které má uživatel bez oprávnění používat:
# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>
a přidejte řádek, který umožní neprivilegovanému uživateli používat příkazy definované s aliasem takto:
unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS
Přečtěte si další dokumentaci k tématu pro různé parametry příkazu sudo.
Možná budete muset nainstalovat sudo
balíček mít sudo
dostupné ve vašem systému.