ไดเรกทอรี chroot และ chdir ของ PHP-FPM


10

ฉันกำลังตั้งค่า php-fpm ด้วยการเปิดใช้งาน chrooting ตอนนี้ฉันเห็นแล้วว่ามีสองตัวเลือกและฉันต้องการทราบว่าความแตกต่างที่แน่นอนคืออะไร

การตั้งค่ามี:

chroot = /var/www/domains/domain.tld/
; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /docroot/

เหตุใดจึงมีสองตำแหน่งที่แตกต่างกันที่นี่และเส้นทางใดที่อนุญาตให้เข้าถึง php สามารถเข้าถึงเว็บไซต์ php /var/www/domains/domain.tld/หรือสามารถเข้าถึงเฉพาะไฟล์ที่อยู่ในdocrootไดเรกทอรีเท่านั้น

===

อาจมีคำแนะนำที่เป็นรูปธรรมสำหรับฉัน ฉันต้องการตั้งค่าแบบนี้:

ที่ตั้ง webroot: /var/www/

domain.com/
 |---conf/
 |    |--nginx.conf
 |    |--php-fpm.conf
 |
 |---ssl/
 |---logs/
 |---session/
 |---domains/
       |---www/
       |---app/
       |---dev/

ตอนนี้ที่นี่การตั้งค่า php-fpm จะเป็น:

chroot = /var/www/domain.com/
chdir  = /domains/www

ตอนนี้คำถามหลักที่นี่เป็นแอพลิเคชันที่อยู่ในจะwwwโดเมนย่อยสามารถเข้าถึงไฟล์ในหรือdev appหรือแม้แต่ไฟล์ที่อยู่ในเซสชั่นซึ่งเป็นเซสชั่นพา ธ การบันทึกหรือโฟลเดอร์อื่น ๆ เช่น ssl และบันทึก

คำตอบ:


12
  • Chroot ตั้งค่าไดเรกทอรี 'root' - คุณไม่สามารถนำทางเหนือไดเรกทอรีรากได้
  • Chdir เพียงเปลี่ยนไดเรกทอรีเริ่มต้น - มันยังคงเป็นไปได้ที่จะนำทางไปยังไดเรกทอรีอื่น ๆ (รวมถึงที่ด้านบนนี้)
    • หากคุณไม่ได้ระบุเส้นทาง chroot รูท 'จริง' จะถูกนำไปใช้ - และคุณจะระบุ chdir แบบสัมบูรณ์
    • หากคุณระบุเส้นทาง chroot คุณจะต้องระบุเส้นทางที่สัมพันธ์กับเส้นทาง chroot (ซึ่งจะกำหนดไดเรกทอรีรากใหม่)

การตั้งค่าที่คุณเสนอดูเหมือนจะค่อนข้างดี

  • เส้นทางเริ่มต้นจะเป็นเส้นทาง chroot + เส้นทาง chdir
  • แอปจะสามารถเข้าถึงไฟล์ทั้งหมดภายใต้พา ธ chroot (ยกเว้นในกรณีที่มีข้อ จำกัด อื่น ๆ เช่น php_openbasedir, การอนุญาต, ฯลฯ )

โปรดทราบว่า - แอปพลิเคชัน php ของคุณจะสามารถเข้าถึง nginx.conf และ php-fpm.conf ของคุณตามโครงสร้างของเอกสารที่คุณแสดงซึ่งดูเหมือนว่าสิ่งที่คุณต้องการเปลี่ยน (อย่างน้อยก็ทำให้ไฟล์อ่าน - เฉพาะผู้ใช้นั้น)


ฉันจะทำให้แน่ใจว่าไฟล์เหล่านั้นปลอดภัย มีความแตกต่างระหว่างวิธีการ chrooting นี้และเพิ่งตั้ง php_openbasedir หรือไม่
Saif Bechan

1
ใช่ chroot ใช้ในระดับระบบปฏิบัติการและยากที่จะเลี่ยงได้ open_basedir มีความเฉพาะเจาะจงกับ PHP และจำเป็นต้องตรวจสอบในทุกฟังก์ชั่นดังนั้นการหาช่องโหว่จึงเป็นเรื่องปกติมากขึ้น (เช่นโดยเรียกใช้สคริปต์ภายนอกด้วย shell_exec) มีบันทึกความปลอดภัยที่น่าสนใจในเว็บไซต์ของ PHP ในเรื่องนี้ ไม่ได้หมายความว่า open_basedir ไร้ประโยชน์หากคุณใช้ chroot ไม่ว่าในกรณีใด ๆ ที่มีบางอย่างเกิดขึ้นนอกสคริปต์ของคุณอาจเป็นประโยชน์ในการกำหนด open_basedir ที่แตกต่างจากเส้นทาง chroot ของคุณ Chroot อาจมีประสิทธิภาพที่ดีขึ้น
cyberx86
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.