วิธีแก้ไข 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);