suphp ไม่สามารถป้องกัน การปิด disable_function ของ php ได้

สวัสดีครับ

มีท่านใดใช้ suphp อยู่บ้างไหมครับ
suphp สามารถกำหนด php.ini ด้วยตนเองได้
เช่น suPHP_ConfigPath /home/user/domains/domain.com

ส่งผลให้ user ใช้ function exec , shell_exec ได้
สามารถอ่านไฟล์ /etc/passwd เพื่อ list user ออกมาได้

ส่งผลให้ security cms อ่อนอย่างมากครับ
พอมีวิธีป้องกันจุดนี้กันไหมครับ
ขอบคุณครับ

ไม่แน่ใจว่า ถ้าผมแก้ httpd-directories.conf

<Directory /home>
AllowOverride none

จะเป็นปัญหาไหมครับ เพื่อไม่ให้ user กำหนด suPHP_ConfigPath ด้วยตนเองได้

ทำได้ตามนี้ครับมีน

ขอบพระคุณครับพี่วัฒน์

ผมเจอวิธีแก้ด้วยกัน 2 วิธีครับ

วิธีแรกแก้ mod_suphp

  1. Modify the mod_suphp.c file
    This is the last file modification. In this modification, I am going to disable the suPHP_ConfigPath from being used in users .htaccess files. If users want to bypass a php.ini directive, I want to know about it. With this disabled, if a particular user needs a PHP directive changed, they will have to have the server administrator customize a php.ini for them and then reference this in the httpd.conf file. This is explained in more detailed near the end of this guide.

Change:

suphp-0.6.1/src/apache/mod_suphp.c (Line 339)
{”suPHP_ConfigPath”, suphp_handle_cmd_config, NULL, OR_OPTIONS, TAKE1,
To:

{”suPHP_ConfigPath”, suphp_handle_cmd_config, NULL, RSRC_CONF|ACCESS_CONF, TAKE1,

วิธีที่สอง
คือแยก php.ini ให้แต่ละ user ครับ ซึ่ง directadmin ไม่ได้แยกให้แต่ต้นเหมือน cpanel
และ DA ยังไม่มี php.ini setting ให้
https://help.directadmin.com/item.php?id=183

จริงๆ ปัญหาแรกที่จะเจอก่อน security คือ performance ครับ

suphp มันช้ามาก หาทางรันเป็น fastcgi / fpm ได้ก็จบแล้วคัรบ

ไอซ์ fastcgi / fpm เดี่ยวนี้มันทำ php select version ได้แบบ suphp ยั้งครับ

อยู่ที่ control panel ครับ

da ทำได้แล้วนะ

ปัญหาที่ได้รับคือ เมื่อเจ้าของเซิร์ฟเวอร์ ทำการ disable_functions ใน php.ini อันหลักแล้ว
แต่เมื่อ user สร้างไฟล์ php.ini ใน public_html
php จะทำการ override ค่าต่างๆ ของ php.ini ที่อยู่ใน public_html แทน default php.ini

ส่งผลให้ disable_function ที่ปิดไว้ไม่เป็นผล exe,shell_exec สามารถใช้งานได้ รวมถึง open_basedir เป็น off สามารถอ่าน /etc/passwd ได้เป็นต้น

แฟนๆ Directadmin ที่ใช้ suphp fixed ดังนี้ก่อนได้ครับ

php จะ load .ini และ override ไล่ลำดับค่าดังนี้

1. Configuration File (php.ini) Path /usr/local/php5x/lib
2. Loaded Configuration File /usr/local/php5x/lib/php.ini

  • ถ้า user กำหนด suPHP_ConfigPath ใน .htaccess จะทำให้ php เรียกใช้ php.ini จากตำแหน่งที่ต้องการได้ เช่น
    /home/user/domains/domain.com/public_html/php.ini
  • ถ้ากำหนดใน httpd.conf ของ user ส่วนนี้จะเปลี่ยนไปโหลดตามที่ custom ค่า
    3. Scan this dir for additional .ini files /usr/local/php5x/lib/php.conf.d
    4. additional .ini files parsed /usr/local/php5x/lib/php.conf.d/php.ini

โดยปกติ php.ini จะแยกให้แต่ละเวอร์ชั่น
เราแก้โดยการสร้าง php.ini เพื่อไป override php.ini ที่ถูก custom ขึ้นจากข้อ 2 ได้ดังนี้

mkdir -p /usr/local/php52/lib/php.conf.d/ /usr/local/php53/lib/php.conf.d/ /usr/local/php54/lib/php.conf.d/ /usr/local/php55/lib/php.conf.d/ /usr/local/php56/lib/php.conf.d/

cp /usr/local/php52/lib/php.ini /usr/local/php52/lib/php.conf.d/
cp /usr/local/php53/lib/php.ini /usr/local/php53/lib/php.conf.d/
cp /usr/local/php54/lib/php.ini /usr/local/php54/lib/php.conf.d/
cp /usr/local/php55/lib/php.ini /usr/local/php55/lib/php.conf.d/
cp /usr/local/php56/lib/php.ini /usr/local/php56/lib/php.conf.d/

ผลคือไม่ว่า user จะกำหนด php.ini อย่างไร ก็จะถูกแทนที่ด้วย php.ini ที่ load ตอนท้ายครับ

fastcgi เลยครับ

เรียนถามครับ
fastcgi ทำ php multiple version ได้ไหมครับ
เช่น 5.3 , 5.4 , 5.5 , 5.6 ครับ

da ที่มาให้ มีให้เลือกแค่ 2 version อ่ะไอซ์
ตอนนี้ยังไม่มีแบบหลายๆ เวอร์ชั่น นอกจากใช้ suphp หนะ

ได้แค่สองครับ ลง odin plesk เลยครับ ได้ตั้งแต่ 5.2 ยัน 7.0

ผมเห็นของ siteground สามารถเลือก multiple php แบบ application/x-httpd-php5x ได้ครับ เลยเดาว่า น่าจะ compile แยกรันในโหมดอื่นๆ นอกจาก suphp ได้แน่ๆ ผมหามาปีนึงยังไม่เจอวิธีครับ -*-

1 Like

เหมือนคุณแมนเคยทำ How to ไว้ครับ

รอตัว CustomBuild ทำให้เลือกใช้ PHP ได้มากกว่า 2 เวอร์ชั่นอยู่เหมือนกัน ทำไมไม่ทำให้ซัพพอร์ตซัก 5 เวอร์ชั่นไปเลย

ตอนที่ซัพพอร์ต PHP 2 เวอร์ชั่นก็ว่าดีแล้วนะ :smile: