GNU/Linux >> Linux Esercitazione >  >> Linux

Best practice per eseguire il servizio Linux come utente diverso

Dopo aver esaminato tutti i suggerimenti qui, ho scoperto alcune cose che spero possano essere utili ad altri nella mia posizione:

  1. hop ha ragione a indicarmi /etc/init.d/functions :ildaemon La funzione consente già di impostare un utente alternativo:

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

    Questo viene implementato avvolgendo l'invocazione del processo con runuser -ne parleremo più avanti.

  2. Jonathan Leffler ha ragione:c'è setuid in Python:

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

    Continuo a non pensare che tu possa impostare id dall'interno di una JVM, comunque.

  3. surunuser gestisci con garbo il caso in cui chiedi di eseguire un comando come l'utente che sei già. Ad esempio:

    [[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)
    

Per aggirare il comportamento di su e runuser , ho modificato il mio script init in qualcosa del tipo:

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

Grazie a tutti per il vostro aiuto!


Su Debian usiamo il start-stop-daemon utility, che gestisce i file pid, cambia l'utente, mette il demone in background e molto altro.

Non ho familiarità con RedHat, ma con daemon utilità che stai già utilizzando (definita in /etc/init.d/functions , btw.) è menzionato ovunque come l'equivalente di start-stop-daemon , quindi o può anche cambiare l'uid del tuo programma, o il modo in cui lo fai è già quello corretto.

Se ti guardi intorno in rete, ci sono diversi involucri già pronti che puoi usare. Alcuni potrebbero anche essere già impacchettati in RedHat. Dai un'occhiata a daemonize , ad esempio.


Linux
  1. Esegui container su Linux senza sudo in Podman

  2. È una buona pratica eseguire un demone con un account utente non root?

  3. Best practice per la sicurezza dei server Linux

  4. Best practice per la sicurezza di Wordpress su Linux

  5. UNIX/Linux:cos'è una shell? Cosa sono le diverse conchiglie?

Come eseguire lo script della shell come servizio SystemD in Linux

Esegui lo script php come processo daemon

Come eseguire lo script Python come servizio?

Linux:avviare il demone sul dongle seriale USB connesso

Esegui lo script bash come demone

Eseguire uno script di shell come utente diverso