آپاچی؛ شب ۳۳: PHP-CGI، Action و جلوگیری از اجرای مستقیم
فهرست نوشته
PHP-CGI روش قدیمیتر اتصال PHP به Apache است. امشب در یک Clone نشان میدهیم فایل PHP چگونه از طریق Action به مفسر میرسد و چرا حفاظت اجرای مستقیم مفسر لازم است.
این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نامها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.
محیط: Clone Debian/Ubuntu بدون mod_php و handler FPM؛ ماژولهای actions و cgid، PHP_BRANCH طبق راهنما.
مفسر و wrapper خصوصی#
sudo apt install "php${PHP_BRANCH}-cgi"
sudo a2enmod actions cgid
sudo install -d -m 755 /var/www/apache-lab/php-cgi
فایل root-owned به نام /var/www/apache-lab/php-cgi/run با حالت 755:
#!/bin/sh
exec /usr/bin/php-cgi
مسیر alternatives را با readlink -f /usr/bin/php-cgi بررسی کن. در فایل /etc/php/PHP_BRANCH/cgi/php.ini، پس از جایگزینی شمارهٔ شاخه، cgi.force_redirect = 1 و cgi.fix_pathinfo = 0 را تنظیم کن. force_redirect اجرای مستقیم مفسر خارج از هدایت موردانتظار وبسرور را محدود میکند؛ آن را برای ساکت کردن خطا خاموش نکن.
داخل میزبان HTTPS آزمایشگاهی:
ScriptAlias /php-cgi/ /var/www/apache-lab/php-cgi/
Action lab-php /php-cgi/run
<Directory /var/www/apache-lab/php-cgi>
Options +ExecCGI -Indexes
AllowOverride None
Require ip 192.168.56.20
</Directory>
<Directory /var/www/apache-lab/public>
AddHandler lab-php .php
</Directory>
Action یک handler را به URL داخلی CGI وصل میکند. AddHandler اینجا فقط فایلهای .php زیر DocumentRoot آزمایشی را پوشش میدهد. پوشهٔ wrapper برای Apache خواندنی و اجراشدنی و برای کاربر runtime غیرقابل نوشتن بماند.
نتیجه و آزمون مسیر مستقیم#
فایل check.php شب قبل را بساز و از .20 درخواست بده. خروجی PHP-CGI معمولاً نام SAPI برابر cgi-fcgi دارد؛ این نام بهتنهایی ثابت نمیکند فرایند ماندگار FastCGI ساختهایم. درخواست مستقیم /php-cgi/run و مسیر ناموجود مانند /check.php/missing را هم آزمایش کن؛ نباید امکان انتخاب دلخواه فایل یا دانلود سورس ایجاد شود.
بازگشت: handler، Action و ScriptAlias را حذف و Snapshot را بازیابی کن. این مسیر برای شناخت و مهاجرت سامانههای موجود است؛ مسیر اصلی WordPress ما PHP-FPM با pool مستقل خواهد بود.
منبع: امنیت PHP-CGI ، mod_actions .