GNU/Linux >> Znalost Linux >  >> Linux

systemd:Udělte neprivilegovanému uživateli oprávnění ke změně jedné konkrétní služby

Ř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.


Linux
  1. Přidání nové služby do Linux systemd

  2. Jak na MySQL:Vytvořte uživatele a udělte oprávnění k databázi

  3. Jak zastavit službu systemd

  1. Upstart:Spusťte službu jako neprivilegovaný uživatel a skript před spuštěním jako root

  2. Jak spustit službu systemd po přihlášení uživatele a zastavit ji před odhlášením uživatele

  3. Zajistěte, aby uživatelská služba systemd závisela na systémovém cíli

  1. Spravujte spouštění pomocí systemd

  2. Jak vytvořit službu Systemd v Linuxu

  3. aktivace soketu systemd vs xinetd