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 chroot
beteiligt, 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_SERVICE
unter 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_SERVICE
auf 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 verwendenchroot
oderlxc
"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?
nginx
oder www-data
) sollten besitzen die Datei. Das ist also überhaupt kein guter Grund. Und es wurde zuvor in einer Antwort genannt.