2011-08-16 27 views
5

Tôi đang làm việc trên trang web, sau một số sự kiện nhất định, cần phải khởi động lại máy chủ apache đang chạy để cập nhật một số tệp. Tôi đã thử thêm www-data vào file sudoers:Khởi động lại apache dưới dạng www-data bằng cách sử dụng perl

www-data ALL=(ALL) NOPASSWD: /etc/init.d/apache2 start, /etc/init.d/apache2 stop, /etc/init.d/apache2 restart, /sbin/services apache2 restart 

nhưng khi tôi cố gắng khởi động lại apache, tôi nhận được như sau:

sudo -u www-data /etc/init.d/apache2 restart 
Restarting web server apache2                           (13)Permission denied: make_sock: could not bind to address 0.0.0.0:80 
no listening sockets available, shutting down 
Unable to open logs 

Khi tìm kiếm trực tuyến, tôi thấy rằng mọi người dường như chống lại phép www-data để khởi động lại apache và tôi không thể tìm thấy bất cứ điều gì cho thấy làm thế nào tôi sẽ làm điều đó nếu tôi muốn bỏ qua các cảnh báo cho trường hợp cụ thể này. Nếu nó không phải là có thể, những gì sẽ là cách thay thế dễ nhất để có một trang web khởi động lại apache? Tôi đang đi theo giả định rằng trang web là riêng tư và an toàn và sẽ không được sử dụng bởi các cá nhân độc hại, và tôi nghĩ rằng đó là một công bằng cho các trường hợp tôi đang theo. Cảm ơn thời gian của bạn

Trả lời

1

init-scripts có thể/chỉ nên chạy dưới dạng root (ít nhất là trên Debian chuẩn của tôi, đây là trường hợp).

Quy trình apache (và các dịch vụ khác) sẽ gọi setuid (hoặc một trong những người bạn của nó) để thay đổi người dùng thực tế của quy trình.

0

gốc nên khởi động lại máy chủ web:

sudo /etc/init.d/apache2 restart 

Điều này sẽ làm chạy apache theo người sử dụng www-data.

bạn không cần thêm www-data vào tệp sudoers trừ khi bạn muốn cho phép người dùng www-data khởi động lại máy chủ - nhưng thông thường bạn không nên đăng nhập trong tài khoản www-data, đó là hệ thống tài khoản.

Các vấn đề liên quan