Ist es empfehlenswert, einen Daemon unter einem Nicht-Root-Benutzerkonto auszuführen?


13

Ich habe eine Anwendung entwickelt, die NTP verwendet, um die Netzwerkzeit zu ändern und zwei meiner Computer zu synchronisieren. Es läuft wie rootfolgt: Nur letzteres darf unter Linux Uhrzeit und Datum ändern (denke ich).

Jetzt möchte ich es als Benutzer ausführen. Aber ich muss auf die Zeit zugreifen.

  • Ist es empfehlenswert, einen Daemon unter einem Nicht-Root-Benutzerkonto auszuführen?
  • Soll ich meiner Anwendung eine Funktion geben wie CAP_SYS_TIME?
  • Führt es keine Sicherheitslücke ein?
  • Gibt es einen besseren Weg?

Normalerweise sollte der NTP-Daemon als ntpBenutzerkonto ausgeführt werden (zumindest auf Linux-Systemen), sodass Sie diese Änderung nicht vornehmen müssen. Welches NTP-Paket haben Sie installiert?

6
Das Ausführen eines Daemons unter einem Nicht-Root-Konto wird als "Verwerfen von Root-Berechtigungen" bezeichnet und ist eine allgemein bekannte bewährte Methode, da sie die potenziellen Schäden durch Sicherheitsanfälligkeiten im Daemon begrenzt.

1
Siehe Wikipedia für " Privilegientrennung ".
Kusalananda

Ich habe NTP aus den Quellen zusammengestellt. Ich habe keine NTP-Gruppe
Anonymous12223

@xhaltar Sie können die NTP-Gruppe und den Benutzer erstellen. Um zu konfigurieren, wie ein Dienst gestartet wird (Benutzer, Gruppe usw.), können Sie entweder das Dienstinitialisierungsskript erstellen / bearbeiten oder eine Systemeinheit erstellen / konfigurieren.
Pl4nk

Antworten:


15

Ist es empfehlenswert, einen Daemon unter einem Nicht-Root-Benutzerkonto auszuführen?

Ja, und das ist üblich. Zum Beispiel startet Apache als root und gibt dann einen neuen Prozess als www-Daten aus (standardmäßig).
Wie bereits erwähnt, erhält der Angreifer beim Hacken Ihres Programms (z. B. Code-Injection) keinen Root-Zugriff, sondern nur die Berechtigungen, die Sie diesem bestimmten Benutzer erteilt haben.

Soll ich eine "Capability" wie "CAP_SYS_TIME" angeben?

Dies ist eine gute Idee, da Sie die Verwendung von setuid vermeiden und die Berechtigungen auf diese bestimmte Funktion beschränken.

Soll ich einen anderen Weg wählen, der als "Good Practice" bezeichnet wird?

Sie können die Sicherheit erhöhen, zum Beispiel:

  • Führen Sie den Dienst als nicht privilegierter Benutzer ohne Shell aus.
  • Verwenden Sie chroot , um den Benutzer in seinem Ausgangsverzeichnis zu sperren.

Anmerkung: Chroot bietet keine Sicherheit, wenn Sie als Root unter Linux ausgeführt werden. Der Root-Benutzer kann ein Verzeichnis in der Chroot erstellen, das Root-Verzeichnis der Chroot öffnen, in das neue Verzeichnis chroot, seinen Weg zurück in die reale Root und dann in die reale Root chroot. BSD behebt dieses Problem, indem es nicht zulässt, Verzeichnis-FDS in eine Chroot zu kopieren.
Kevin

@ Kevin Wenn Sie root sind, können Sie Prozesse auch außerhalb der Chroot verfolgen. Es gibt viele andere Möglichkeiten, diese zu umgehen. Eine bloße Chroot kann sich nicht durchsetzen.
Gilles 'SO - hör auf, böse zu sein'

//, emp.jar.st erstellt aus Sicherheitsgründen einen Benutzer für sich. Sehr gute Übung.
Nathan Basanese

Warten Sie, wenn ich BENUTZER bin, kann ich den BENUTZER in einem bestimmten Verzeichnis sperren? Zum Beispiel "/ opt"?
Anonymous12223

@xhaltar Um einen von USERin einem Verzeichnis ausgeführten Prozess zu sperren , verwenden Sie chroot(führen Sie ihn als Root-Benutzer aus). Sie müssen jedoch zuvor ein Gefängnis (Verzeichnis) erstellen und initialisieren . Kurz gesagt, Sie müssen die Bibliotheken und Binärdateien, die Ihr Prozess benötigt, in dieses Gefängnis stellen und dann aufrufen chroot <path/to/jail> <command>. Ein gutes Tutorial mit einigen Beispielen, die Sie benötigen, finden Sie hier
Pl4nk

13
  • Soll ich einen anderen Weg wählen, der als "Good Practice" bezeichnet wird?

Sofern Sie keine starken, unwiderlegbaren Gründe haben, sollten Sie nur das NTP-Paket verwenden, das mit Ihrer GNU / Linux-Distribution geliefert wird. Es hat Jahre gedauert, bis der Standard-NTP-Daemon ausgereift ist. Er verfügt über ausgefeilte Funktionen wie das Verlangsamen oder Beschleunigen der Systemuhr, damit sie mit einem Netzwerk oder einer GPS-Uhr synchronisiert werden kann. Es ist seit sync'ing Uhren zugeschnitten , so dass es sehr wahrscheinlich ist das beste Werkzeug , um für diesen Zweck.

ntpdwird nach den letzten Updates (zum Zeitpunkt des Schreibens dieses Beitrags) immer noch beibehalten . Wenn Sie weitere Funktionen benötigen, schlagen wir vor, dass Sie sich direkt an die Entwickler wenden. Vertrauen Sie darauf, was sie dazu zu sagen haben.


5

Wenn Sie ein Programm haben, das in der Lage sein muss, Funktion X auszuführen (z. B. die Uhr zu manipulieren), und Sie ihm das Privileg / die Befugnis erteilen können, Funktion X auszuführen, und nichts anderes, ist dies besser, als ihm die gesamte Dose Alphabet zuzuweisen Suppe. Dies ist als das Prinzip des geringsten Privilegs bekannt . Überlegen Sie, was passiert, wenn Ihr Programm einen Fehler aufweist - entweder einen normalen Programmierfehler oder eine ausnutzbare Sicherheitslücke. Wenn es als "root" ausgeführt wird, können alle Dateien gelöscht oder an einen Angreifer gesendet werden. Wenn das einzige , was das Programm zu tun , können Sie die Uhr ist zu manipulieren (und nicht-privilegierte Funktionen, wie Dateien in einem Locked-Down - Verzeichnis zu manipulieren), dann ist das das Schlimmste, wenn das Programm Schelm geht passieren kann.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.