Giải pháp cho PHP không có quyền thực thi lệnh thực thi trên Linux
Tài liệu tham khảo chính thức liên quan
PHP exec Linux sudoers file Sudo CommandsCác sửa đổi khi chạy ở chế độ fastcgi
Khi PHP đang chạy ở chế độ fastcgi, các quyền của nó được kế thừa từ chương trình chủ của nó. Chúng tôi lấy apache làm ví dụ để giải thích. Đầu tiên, chúng ta cần tìm tài khoản mà apache đang chạy, sau đó sử dụng vi hoặc vim để chỉnh sửa tệp / etc / sudoers và thêm ví dụ tham chiếu sau vào tệp. Trong nội dung sau đây, trước tiên hãy sử dụng lệnh ps để tìm httpd process apache, xem thông tin tài khoản ở phía ngoài cùng bên trái của kết quả trả về, sau đó chỉnh sửa tệp sudoers để thêm ủy quyền cho tài khoản apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Các sửa đổi khi chạy ở chế độ php-fpm
Khi chạy ở chế độ php-fpm, nó chạy như một quá trình riêng biệt. Vì vậy, trước tiên chúng tôi tìm tài khoản đang chạy của nó, sau đó thực hiện các thao tác ủy quyền như trên.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Xác minh rằng các thay đổi có hiệu lực
Sau thao tác trên, chúng tôi đã sửa đổi ủy quyền nhưng nó vẫn chưa có hiệu lực. Chúng tôi cần khởi động lại dịch vụ để sửa đổi của chúng tôi có hiệu lực. Theo tình hình thực tế của chúng tôi, hãy khởi động lại dịch vụ apache hoặc php-fpm. Sau đó thực hiện lệnh execute để xem kết quả trả về, nếu kết quả trả về thu được bình thường là đã thành công.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);