Tôi có một máy chủ web cũng phát radio internet. Là người dùng dữ liệu www, tôi muốn chạy một số lệnh, ví dụ tôi đã thực hiện điều này trong / etc / sudoers tập tin:
www-data ALL=(ALL) NOPASSWD: /usr/bin/amixer
Và hình thức PHP tôi có thể thao tác âm lượng mà không cần sử dụng mật khẩu bằng cách:
exec('sudo -u user amixer set Master 3%-');
Và:
exec('sudo -u user amixer set Master 3%+');
Nhưng bây giờ tôi muốn có thể khởi động lại dịch vụ của mình bằng cách chạy lệnh:
exec('sudo -u user service servicename restart');
Vì vậy, tôi đã cố gắng:
www-data ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /bin/service
Và điều này:
www-data ALL=(ALL) NOPASSWD: /usr/bin/amixer, /bin/service
Và thậm chí điều này:
www-data ALL=(ALL) NOPASSWD: /usr/bin/amixer
www-data ALL=(ALL) NOPASSWD: /bin/service
Nhưng không ai trong số họ dường như đang làm việc. Hãy giúp tôi ra.
Xin lỗi các bạn - lỗi của tôi. Tôi đã thực hiện một số thay đổi, đã cố gắng liên kết biểu mẫu / sbin đến / bin
Bây giờ tôi đã thay đổi nó thành:
www-data ALL=(ALL) NOPASSWD: /usr/bin/amixer, NOPASSWD: /usr/sbin/service
Và nó hoạt động! Cảm ơn! Chủ đề khép lại.
which
lệnh trong một vỏ. Trong trường hợp này which service
sẽ cho bạn biết nó ở đâu - đoán xem nó sẽ ở đâu /sbin
thay vì /bin
.
service servicename restart
dường như không giống như/bin/service
là đoán. bạn có thể thử đặt cuộc gọi khởi động lại trong tập lệnh shell và sau đó cho phép sudo gọi tập lệnh đó.