Làm thế nào để tôi thực hiện các hành động root từ tài khoản không root?


15

Tôi muốn có thể khởi động lại dịch vụ từ tập lệnh php. chạy dưới tài khoản người dùng www.

Cách ưa thích để thực hiện những hành động này là gì?

Tôi điều chỉnh Tôi có thể tạo một tệp với các lệnh que'd, được đọc bởi CRON, nhưng giải pháp bị ngứa.

Những gì tôi nghĩ là một dịch vụ nhỏ, chạy dưới quyền root, cho phép các "phương thức" được xác định trước để các hành động gốc tùy ý không thể được thực thi.

Có công cụ nào cho việc này không?


@MadHatter, Mona Lisa gửi lời chào đến cô ấy, ;-)
user65297

Câu trả lời:


27

Bạn có thể phát minh lại bánh xe, nhưng thành thật mà nói, tôi sử dụng sudo không mật khẩu cho việc này. Ví dụ, hệ thống giám sát của tôi cần có khả năng chạy lệnh để kiểm tra RAID phần cứng. Điều này đòi hỏi đặc quyền root, nhưng tôi không muốn chạy toàn bộ hệ thống giám sát với quyền root, vì vậy thay vào đó tôi có sudoersmột dòng có nội dung

nagios  ALL=(root) NOPASSWD: /usr/lib/nagios/plugins/check_md_raid

và sau đó chạy lệnh sudo /usr/lib/nagios/plugins/check_md_raidvới tư cách là người dùng giám sát, khi tôi cần kiểm tra RAID.

Bạn có thể có một dòng sudoers nói

www-user    ALL=(root) NOPASSWD: /etc/rc.d/init.d/myservice

sau đó có php thực thi sudo /etc/rc.d/init.d/myservice restart.


2
Đây là cách để đi IMO. Tôi đã sử dụng quá trình này cho một nhiệm vụ tương tự. Nó đã được sản xuất trong hơn 3 năm nay. Không có gì thất bại và rủi ro bảo mật gần như không tồn tại miễn là bạn bảo vệ mã PHP kích hoạt nó đúng với logic ứng dụng của bạn.
Andrew Oblley

1
Cảm ơn, sudoers mới cho tôi và đập vào mục tiêu. @Andrew, cảm ơn vì thông tin bổ sung.
dùng65297

1
user65927, hãy tha thứ cho tôi nếu đây không phải là tin tức với bạn, nhưng nghi thức địa phương là khi bạn có câu trả lời thỏa đáng cho câu hỏi bạn chấp nhận nó bằng cách nhấp vào phác thảo đánh dấu bên cạnh nó.
MadHatter hỗ trợ Monica

1
Bạn cũng có thể cần phải nhận xét dòng "Mặc định Yêu cầu" trong tệp sudoers của bạn. Bước này đã nhận được tôi một vài lần. (Ví dụ: thay đổi "Mặc định Yêu cầu" thành "# Mặc định Yêu cầu")
steve.lippert

6

Hãy xem sudo : nó cho phép chỉ định các hành động có thể được thực hiện như một người dùng khác (root trong trường hợp của bạn).

Ví dụ, bạn có thể thêm vào /etc/sudoers(không chỉnh sửa tệp trực tiếp sử dụng visudo)

www-user-account ALL= NOPASSWD: /usr/bin/mypredefinedaction

Xem man sudođể biết chi tiết và cú pháp của tập tin


2
Hãy cẩn thận khi bạn chỉnh sửa /etc/sudoerstập tin. Nếu nó không đúng về mặt cú pháp, việc thay đổi nó trở lại là một cơn ác mộng b / c bạn cần phải sudoquay lại, nhưng bạn không thể xóa sổ sudo. Cuối cùng, bạn phải sử dụng đĩa CD / DVD cứu hộ và gắn phân vùng bằng tay.
puk

1
@puk Trên thực tế để chỉnh sửa các shudders bạn cần quyền truy cập root và trong trường hợp tập tin bị hỏng, bạn có thể đăng nhập bằng root và sau đó khôi phục nó (từ bản sao lưu) hoặc sửa nó bằng tay. Visudo cũng thực hiện kiểm tra độ tỉnh táo trên tập tin trước khi viết nó.
Matteo

shuddersgì Đó là thực tế kiểm tra sự tỉnh táo, nhưng họ không giúp đỡ sau khi thiệt hại được thực hiện: P
puk
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.