GNU/Linux >> Znalost Linux >  >> Linux

Nejlepší postup pro spuštění služby Linux jako jiný uživatel

Po zhlédnutí všech zde uvedených návrhů jsem objevil několik věcí, které, jak doufám, budou užitečné pro ostatní v mé pozici:

  1. hop mě správně ukazuje zpět na /etc/init.d/functions :daemon funkce již umožňuje nastavit alternativního uživatele:

    daemon --user=my_user my_cmd &>/dev/null &
    

    To je implementováno zabalením vyvolání procesu do runuser -více o tom později.

  2. Jonathan Leffler má pravdu:v Pythonu je setuid:

    import os
    os.setuid(501) # UID of my_user is 501
    

    Stále si však nemyslím, že můžete nastavit nastavení z JVM.

  3. Ani su ani runuser elegantně zvládnout případ, kdy požádáte o spuštění příkazu jako uživatel, kterým již jste. Např.:

    [[email protected]_host]$ id
    uid=500(my_user) gid=500(my_user) groups=500(my_user)
    [[email protected]_host]$ su my_user -c "id"
    Password: # don't want to be prompted!
    uid=500(my_user) gid=500(my_user) groups=500(my_user)
    

Chcete-li obejít toto chování su a runuser , Změnil jsem svůj init skript na něco jako:

if [[ "$USER" == "my_user" ]]
then
    daemon my_cmd &>/dev/null &
else
    daemon --user=my_user my_cmd &>/dev/null &
fi

Děkujeme všem za vaši pomoc!


V Debianu používáme start-stop-daemon utilita, která zpracovává pid-soubory, mění uživatele, umísťuje démona na pozadí a mnoho dalšího.

Neznám RedHat, ale daemon nástroj, který již používáte (který je definován v /etc/init.d/functions , btw.) je všude uváděn jako ekvivalent start-stop-daemon , takže buď může také změnit uid vašeho programu, nebo způsob, jakým to uděláte, je již správný.

Když se podíváte po netu, existuje několik hotových obalů, které můžete použít. Některé mohou být dokonce již zabaleny v RedHat. Podívejte se na daemonize , například.


Linux
  1. Spusťte kontejnery na Linuxu bez sudo v Podman

  2. Seznam uživatelů v Linuxu – Nejlepší metoda

  3. 8 osvědčených postupů se sudo v Linuxu – co dělat a co nedělat sudo

  1. Nejlepší postupy zabezpečení serveru Linux

  2. Spusťte, zastavte a restartujte Crond Daemon v Linuxu

  3. Linux OS Service „winbind“

  1. Jak zajistit, aby skript Python běžel jako služba nebo démon v Linuxu

  2. Spusťte aplikaci Java jako službu v systému Linux

  3. Jak zajistit, aby skript Python běžel jako služba?