Ich habe eine Anwendung entwickelt, die NTP verwendet, um die Netzwerkzeit zu ändern und zwei meiner Computer zu synchronisieren.
Sie läuft als root
, da nur letzterer die Uhrzeit und das Datum unter Linux ändern darf (glaube ich).
Jetzt möchte ich es als Benutzer ausführen. Aber ich muss auf die Uhrzeit zugreifen.
- Ist es empfehlenswert, einen Daemon unter einem Nicht-Root-Benutzerkonto auszuführen?
- Soll ich meiner Anwendung eine Fähigkeit geben wie
CAP_SYS_TIME
? - Führt es nicht zu einer Sicherheitslücke?
- Gibt es einen besseren Weg?
Akzeptierte Antwort:
Ist es empfehlenswert, einen Daemon unter einem Nicht-Root-Benutzerkonto auszuführen?
Ja, und das ist üblich. Zum Beispiel startet Apache als root und verzweigt dann einen neuen Prozess als www-data (standardmäßig).
Wie bereits gesagt, wenn Ihr Programm gehackt wird (z. B. Code-Injektion), erhält der Angreifer keinen Root-Zugriff, sondern wird auf die Privilegien beschränkt, die Sie diesem bestimmten Benutzer gegeben haben.
Soll ich eine „Fähigkeit“ wie „CAP_SYS_TIME“ angeben?
Dies ist eine gute Idee, da Sie die Verwendung von setuid vermeiden , und beschränken Sie die Berechtigungen auf diese sehr spezifische Funktion.
Soll ich dafür eine andere Methode verwenden, die als „gute Praxis“ angesehen wird?
Sie können die Sicherheit erhöhen, zum Beispiel:
- Führen Sie den Dienst als unprivilegierter Benutzer ohne Shell aus.
- Verwenden Sie chroot um den Benutzer in seinem Home-Verzeichnis zu sperren.