Suy nghĩ về một thiết lập máy chủ web trong tương lai, tôi nhận ra rằng vì một số lý do, các máy chủ web thường bắt đầu với quyền root và sau đó bỏ một số quyền nhất định ( setuid
) cho các quy trình worker. Ngoài ra, thường chroot
có liên quan, mà chính xác không có nghĩa là một biện pháp bảo mật.
Điều tôi đã tự hỏi, tại sao các máy chủ web (tôi đã quản trị mọi thứ từ Apache, lighttpd đến nginx) không sử dụng hệ thống khả năng ( capabilities(7)
), như CAP_NET_BIND_SERVICE
trên Linux và chỉ đơn giản là bắt đầu với tư cách là người dùng không root? ... cách này vẫn nghe trên một cổng đặc quyền dưới 1024.
Hoặc tốt hơn, tôi nghĩ rằng hầu hết trong số họ có thể, nhưng tại sao đó không phải là thông lệ? Tại sao không ...
- sử dụng
setcap(8)
vớiCAP_NET_BIND_SERVICE
trên nhị phân đang chạy? - thiết lập các thư mục nhật ký để cho phép người dùng (không phải root) viết ở đó
- ..., Nếu bạn cảm thấy muốn
chroot
giúp đỡ, hãy sử dụngchroot
hoặclxc
"bỏ tù" máy chủ web?
Không có gì khác ngoài quá trình (công nhân) con có thể giết cha mẹ mà tôi có thể nghĩ ra sẽ làm cho việc này ít có lợi hơn là bắt đầu hoàn toàn như root
.
Vậy tại sao họ theo truyền thống được bắt đầu như root khi sau đó mọi thứ được thực hiện để thoát khỏi các vấn đề bảo mật ngụ ý đi kèm với nó?
nginx
hoặc www-data
) nên sở hữu tệp nói. Vì vậy, đó không phải là một lý do tốt cả. Và nó đã được đặt tên trước trong một câu trả lời.