วิธีแก้ไข PHP ไม่ได้รับอนุญาตให้ดำเนินการคำสั่ง exec บน Linux
ข้อมูลอ้างอิงอย่างเป็นทางการที่เกี่ยวข้อง
PHP exec Linux sudoers file Sudo Commandsการแก้ไขเมื่อทำงานในโหมด fastcgi
เมื่อ PHP ทำงานในโหมด fastcgi สิทธิ์จะสืบทอดมาจากโปรแกรมโฮสต์ เราใช้ apache เป็นตัวอย่างในการอธิบาย ขั้นแรกเราต้องหาบัญชีที่ apache กำลังทำงานอยู่จากนั้นใช้ vi หรือ vim เพื่อแก้ไขไฟล์ / etc / sudoers และเพิ่มตัวอย่างการอ้างอิงต่อไปนี้ในไฟล์ ในเนื้อหาต่อไปนี้ขั้นแรกให้ใช้คำสั่ง ps เพื่อค้นหากระบวนการ apache httpd ดูข้อมูลบัญชีทางด้านซ้ายสุดของผลลัพธ์ที่ส่งคืนจากนั้นแก้ไขไฟล์ sudoers เพื่อเพิ่มการอนุญาตให้กับบัญชี apache
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
การแก้ไขเมื่อทำงานในโหมด php-fpm
เมื่อทำงานในโหมด php-fpm จะทำงานเป็นกระบวนการแยกกัน ดังนั้นเราจึงค้นหาบัญชีที่กำลังทำงานอยู่ก่อนจากนั้นจึงดำเนินการอนุญาตตามด้านบน
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
ตรวจสอบว่าการเปลี่ยนแปลงมีผล
หลังจากการดำเนินการข้างต้นเราได้แก้ไขการอนุญาตแล้ว แต่ยังไม่มีผลบังคับใช้เราจำเป็นต้องเริ่มบริการใหม่เพื่อให้การแก้ไขของเรามีผล ตามสถานการณ์จริงของเรารีสตาร์ทบริการ apache หรือ php-fpm จากนั้นรันคำสั่ง exec เพื่อดูผลลัพธ์ที่ส่งคืนหากได้รับผลลัพธ์ที่ส่งคืนตามปกติแสดงว่าสำเร็จ
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);