Chạy Apache như một người dùng khác


10

Khi tôi chạy ps -efHlệnh để liệt kê tất cả quy trình, tôi có thể thấy Apache đang chạy rootvà dường như có các quy trình phụ đang chạy www-data. Đây là đoạn trích:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Tôi có thể làm cho Apache và tất cả các quy trình con chạy như những người dùng khác nhau apache2d:apache2dkhông? Nếu vậy thì thế nào? Tôi đọc ở đâu đó rằng các cài đặt cho điều này có thể được tìm thấy /etc/apache2/httpd.confnhưng tập tin đó dường như trống rỗng? Điều này có thể được thực hiện bằng cách thay đổi chủ sở hữu và nhóm /etc/init.d/apache2tập lệnh và sau đó cài đặt cờ setuid trên nó không?

Câu trả lời:


21

Apache phải chạy bằng root ban đầu để liên kết với cổng 80. Nếu ban đầu bạn không chạy nó với quyền root thì bạn không thể liên kết với cổng 80. Nếu bạn muốn liên kết với một số cổng trên 1024 thì có, bạn có thể. Nếu không, đừng lo lắng về root. Đó là quy trình Apache mẹ và không phục vụ bất kỳ yêu cầu nào. Nó sẽ sinh ra các tiến trình con và bỏ các đặc quyền để xử lý các yêu cầu.

Để thay đổi người dùng Apache, hãy đặt UserGroupcác tham số trong cấu hình Apache của bạn.


Vâng, xin lỗi để lạc đề, nhưng tôi nhận thấy rằng haproxy có thể chạy như haproxy (không phải là root) và liên kết cổng tcp 80. Làm thế nào để đạt được điều này? Có giác ngộ nào không?
kiiwii

1
Nó không. Các quy trình chỉ có thể liên kết với các cổng dưới 1024 nếu nó có đặc quyền siêu người dùng. Vì vậy, haproxy hoặc là bắt đầu như root và bỏ đặc quyền (có thể) hoặc root setuid (không có khả năng).
bahamat

Bạn không cần phải chạy nó dưới quyền root, bạn chỉ cần cho phép người dùng 'apache' của bạn truy cập vào các cổng bị hạn chế (ví dụ: những cổng dưới 1024). Câu trả lời này giải thích cách bạn có thể sử dụng 'authbind' để làm điều đó: superuser.com/questions/710253/ trên
Animal451

4

@bahamat giải thích nó khá tốt, nhưng tôi sẽ thêm một chút chi tiết.

Trong quá trình hoạt động bình thường, quy trình apache thuộc sở hữu gốc sẽ không thực hiện bất kỳ hoạt động thực tế nào ngoài việc nghe trên cổng 80 và chuyển tiếp các kết nối đến cho www-datatrẻ em (không phải là đặc quyền an toàn ) của nó.

Vị trí của tệp cấu hình chính phụ thuộc vào các tùy chọn thời gian biên dịch và thay đổi trên mỗi phân phối, nhưng /etc/apache2/apache2.conflà một dự đoán khởi đầu tốt.

Ngoài ra, nếu bạn đang thiết lập một hệ thống lưu trữ web nhiều người dùng, bạn có thể muốn xem xét SuExec và fcgid để mỗi quy trình apache của người dùng webhosting chạy như người dùng đã nói - để nếu một người dùng bất cẩn với bảo mật của họ, thì người dùng khác người dùng sẽ không bị ảnh hưởng.


3

Trong Ubuntu ít nhất, các cài đặt cho điều này là trong /etc/apache2/envvars. Tinh chỉnh những cái đó, sau đó khởi động lại apache và bạn tắt và chạy.


Cảm ơn, điều này đã giúp tôi! Tôi đang thiết lập một hộp mơ hồ Ubuntu, và vì một số lý do /etc/apache2/httpd.conf không được sử dụng để tải người dùng và nhóm. envars dường như làm các thủ thuật!
Greg

2

Ngoài ra, hãy kiểm tra Apache2 ITK MPM .

Nó tạo ra một luồng Apache với lệnh được gán uid/ gid, điều này cho phép bạn tiếp tục sử dụng mod_php. Không còn nữa chmod/ chownv.v.


Nâng cấp mpm_itkmà là một cải tiến đáng kể so với suexec / fcgid
Shadur

0

Mac OSX:

Những gì làm việc cho tôi là đi vào tập tin cấu hình apache:

/etc/apache2/httpd.conf

Trong tập tin này, tôi đã tìm kiếm Người dùng hoặc Nhóm

và va vào:

User _www
Group _www

Tôi đã thay đổi nó thành những gì người dùng / nhóm tôi cần (trong trường hợp của tôi là người dùng / nhóm là chủ sở hữu các tệp ứng dụng web của tôi mà bạn có thể thấy. Và điều này bạn có thể kiểm tra bằng cách sử dụng 'ls -l' đơn giản chỉ huy)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.