GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Best Practice zum Ausführen des Linux-Dienstes als ein anderer Benutzer

Nachdem ich mir alle Vorschläge hier angesehen habe, habe ich ein paar Dinge entdeckt, von denen ich hoffe, dass sie für andere in meiner Position nützlich sein werden:

  1. Hop hat recht, wenn er mich auf /etc/init.d/functions verweist :diedaemon Funktion erlaubt Ihnen bereits, einen alternativen Benutzer festzulegen:

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

    Dies wird implementiert, indem der Prozessaufruf mit runuser umschlossen wird -dazu später mehr.

  2. Jonathan Leffler hat Recht:Es gibt setuid in Python:

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

    Ich glaube jedoch immer noch nicht, dass Sie innerhalb einer JVM setuid ausführen können.

  3. Weder su noch runuser Gehen Sie elegant mit dem Fall um, in dem Sie einen Befehl als der Benutzer ausführen möchten, der Sie bereits sind. Beispiel:

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

Um dieses Verhalten von su zu umgehen und runuser , habe ich mein Init-Skript so geändert:

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

Vielen Dank für Ihre Hilfe!


Unter Debian verwenden wir den start-stop-daemon Dienstprogramm, das PID-Dateien handhabt, den Benutzer ändert, den Daemon in den Hintergrund stellt und vieles mehr.

RedHat kenne ich nicht, aber daemon Dienstprogramm, das Sie bereits verwenden (das in /etc/init.d/functions definiert ist , btw.) wird überall als Äquivalent zu start-stop-daemon erwähnt , also kann es entweder auch die UID Ihres Programms ändern, oder die Art und Weise, wie Sie es tun, ist bereits die richtige.

Wenn Sie sich im Netz umsehen, gibt es mehrere fertige Wrapper, die Sie verwenden können. Einige sind möglicherweise sogar bereits in RedHat verpackt. Siehe daemonize , zum Beispiel.


Linux
  1. Best Practices für die Sicherheit von Linux-Servern

  2. Crond Daemon unter Linux starten, stoppen und neu starten

  3. Linux-Betriebssystemdienst „winbind“

  4. Führen Sie das PHP-Skript als Daemon-Prozess aus

  5. Führen Sie eine Java-Anwendung als Dienst unter Linux aus

Führen Sie Container unter Linux ohne sudo in Podman aus

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

UNIX / Linux:Was ist eine Shell? Was sind verschiedene Muscheln?

Linux-Betriebssystemdienst „sshd“

Wie man ein Python-Skript wie einen Dienst oder Daemon in Linux laufen lässt

Führen Sie ein Shell-Skript als ein anderer Benutzer aus