Als ich über ein zukünftiges Webserver-Setup nachdachte, fiel mir auf, dass Webserver aus irgendeinem Grund normalerweise als root starten und dann bestimmte Rechte ( setuid) für die Arbeitsprozesse löschen. Darüber hinaus ist häufig chrootbeteiligt, was nicht gerade als Sicherheitsmaßnahme gedacht ist.
Was ich mich gefragt habe, warum können Webserver (ich habe alles von Apache, LightTPD bis Nginx verwaltet) das Fähigkeitssystem ( capabilities(7)) nicht verwenden , z. B. CAP_NET_BIND_SERVICEunter Linux, und einfach als Nicht-Root-Benutzer starten? ... auf diese Weise immer noch einen privilegierten Port unter 1024 abhören.
Oder besser, ich denke, die meisten von ihnen könnten es, aber warum ist das nicht üblich? Warum nicht ...
- Verwenden Sie
setcap(8)mitCAP_NET_BIND_SERVICEauf der Binärdatei, die ausgeführt wird? - Richten Sie die Protokollordner so ein, dass der (Nicht-Root-) Benutzer dort schreiben kann
- ..., wenn Sie
chrootüberhaupt Hilfe benötigen, den Webserver verwendenchrootoderlxc"einsperren" möchten?
Es gibt nichts anderes als einen (Arbeiter-) Kinderprozess, der Eltern töten könnte, den ich mir einfallen lassen könnte, was dies weniger vorteilhaft machen würde, als direkt als zu beginnen root.
Warum werden sie traditionell als Root gestartet, wenn danach alles getan wird, um die damit verbundenen impliziten Sicherheitsprobleme zu beseitigen?
nginxoder www-data) sollten besitzen die Datei. Das ist also überhaupt kein guter Grund. Und es wurde zuvor in einer Antwort genannt.