Linux: làm thế nào để cho phép người dùng khởi động lại apache?


35

Tôi có một tập lệnh chạy dưới một người dùng không root, trong một số điều kiện nhất định, nên khởi động lại apache httpd.

Điều gì sẽ là cách đơn giản nhất để tôi cho phép người dùng làm điều đó?

Tôi đang sử dụng Ubuntu Server 8.04 LTS.

Câu trả lời:


84

Câu trả lời ngắn:

Sử dụng visudo, thêm phần sau vào tệp sudoers của bạn, thay thế tên người dùng bằng tên người dùng phù hợp:

username ALL = /etc/init.d/apache2 

Nếu bạn muốn không phải nhập mật khẩu trước khi thực hiện việc này, hãy sử dụng như sau:

username ALL = NOPASSWD: /etc/init.d/apache2 

Sau này, người dùng 'tên người dùng' có thể thực thi sudo /etc/init.d/apache2 start(hoặc dừng, khởi động lại, v.v.)

Câu trả lời dài: Bạn có thể muốn thiết lập một người dùng riêng cho việc này nếu bạn chưa có, sau đó định cấu hình tệp / etc / sudoers để cho phép người dùng hoặc nhóm thực hiện lệnh bạn muốn.

Ví dụ: để cho phép người dùng 'ben' thực thi tất cả các lệnh dưới dạng root nhắc mật khẩu, bạn sẽ làm như sau:

ben ALL= ALL

Để cho phép 'ben' chỉ thực hiện một lệnh (như nói, rm), bạn sẽ làm như sau:

ben ALL= /bin/rm 

Nếu bạn đang chạy tập lệnh với tư cách là người dùng và không muốn nhắc mật khẩu, bạn sẽ muốn sử dụng tùy chọn 'NOPASSWD' như vậy:

ben ALL=NOPASSWD: /bin/commandname options

Bạn có thể làm điều tương tự cho các nhóm bằng cách thêm tiền tố tên nhóm với dấu phần trăm, như vậy:

%supportstaff          ALL= NOPASSWD: /bin/commandname 

2
Có thể usernameđược giới hạn trong một tập hợp con của các tham số? Nói start restartnhưng không được stop?
ThorSummoner

các visudolệnh thực hiện kiểm tra an toàn trên các chỉnh sửa của bạn, do đó bạn không phá vỡ sudo/ sulệnh một cách tình cờ: unix.stackexchange.com/a/27595/61349
ThorSummoner

1

Câu trả lời ngắn gọn: sudo.

Cuộc gọi sẽ trông giống như sau: sudo /etc/init.d/apache2 restart

Dễ nhất là sử dụng visudođể thiết lập tệp / etc / sudoers. Xem man sudoersman visudođể biết chi tiết.


OP đã nói về việc thực hiện nó thông qua một kịch bản - kịch bản sẽ không thể nhập mật khẩu để câu trả lời này sẽ không có ý nghĩa gì.
Matt Fletcher

@MattFletcher trừ khi bạn sử dụng NOPASSWD
Robin Kanters

0

Bạn cũng có thể thực hiện điều này bằng cách viết một trình bao bọc cho apache2ctl, gán quyền sở hữu nhóm cho một nhóm quản trị web và thiết lập bit suid. Đây là một giải pháp ít chung hơn so với visudo, nhưng cho phép các giới hạn tùy chỉnh về khả năng của người dùng và kiểm tra lỗi.

Tôi đã viết công cụ này cho nhu cầu của riêng tôi và đã chia sẻ nó trên github: https://github.com/josiahjohnston/ltd_apache2ctl

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.