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 Commands

Cá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);