สอบถามเกี่ยวกับ open_basedir ครับ

ปกติ DA เวลาเรียกเว็บผ่าน IP http://111.222.333.444/~usernameของเรา จะสามารถอ่านไฟล์ใน /home/usernameของเรา ได้
แต่จะสามารถอ่านไฟล์ใน /home/usernameของคนอื่น ได้ไหมครับ หรือว่าได้แต่ user ใคร user มัน

เพราะตอนนี้ผมกำหนด open_basedir ใน php.ini
open_basedir = /var/www/html/:/tmp:/usr/local/lib/php/

จะมีปัญหาสำหรับลูกค้าที่ใช้ PHP และเข้าเว็บผ่าน IP ครับ มีวิธีแก้ไหมครับ หรือว่ายังไงก็ต้องเปิด open_basedir ไว้ครับ

ขอบคุณครับ

มันเป็น public ไม่ใช่หรอครับ

ดูได้หมด ขอแค่ใส่ user ให้ถูกแค่นั้นเอง

xxx.xxx.xxx.xxx/~user

แต่ดูแบบนี้จะเอาโดเมนที่แอดล่าสุดไปนะครับ

ถ้าดูเจาะจงโดเมนอีก อันนี้หาอยู่เหมือนกัน

หมายถึงว่า usernameของเรา สามารถอ่านไฟล์ใน /home/usernameของคนอื่น ได้ไหมครับ คืออ่านข้าม user ครับ

[edit] เพิ่ม ผมก็ยังไม่ได้ลองทำดูนะครับ แต่ลองมาถามดูก่อนครับ

open_basedir ควรจะ ON ไว้ครับ… เพราะจะทำให้ R/W ข้าม Home กันไม่ได้

ไม่แน่ใจเหมือนกัน แต่คิดว่าได้
เดี๋ยวลองทดสอบดูก่อน

ทดสอบแล้ว สามารถอ่านข้าม /home ได้ครับ
เพราะเป็นการเรียกผ่าน IP ไม่ได้กำหนด open_basedir ไว้
ลองเรียก phpinfo เทียบกันดูระหว่างเรียกผ่าน domain กับผ่าน ip/~user ได้ครับ

http://111.222.333.444/~username ถ้าเรียกแบบนี้มันจะไม่อยู่ใน VirtualHost config ของ user นั้นๆครับ เพราะว่า da มันใส่ open_basedir ไว้ใน คอนฟิกแต่ละ user หากต้องการระบุ open_basedir ต้องใส่ไว้ที่ /usr/local/lib/php.ini เลยครับ

พอใส่ open_basedir ไว้ใน php.ini ลูกค้าก็ไม่สามารถติดตั้งโปรแกรมผ่าน http://111.222.333.444/~username ได้ครับ จะมีปัญหาสำหรับลูกค้าที่ยังไม่ได้ชี้ ns มาที่เครื่องครับ

ต้องแจ้งให้ลูกค้ารอ หรือ ไม่ใส่ หรือลงโปรแกรมก่อนค่อยใส่ แล้วแต่จะตัดสินใจครับ บางเรื่องก็ต้องอธิบายให้ลูกค้าฟัง ว่าเป็นอย่างนี้ครับ

ในนั้นต้องกำหนดกว้างๆครับ

/var/www/html/:/home/:/tmp/:/usr/local/lib/php

ประมาณนี้

สรุปว่า มี2ทางเลือกคือ

  1. ใส่ open_basedir ไว้แล้ว บอกให้ลูกค้าเข้าใจ
  2. ไม่ใส่ open_basedir แต่ก็เสี่ยงใส่การอ่านข้าม user

สำหรับผมใช้ข้อ 1. ครับ แล้วให้ลูกค้าเอา no-ip มาใส่ใน domain pointer ครับ เข้าไปแก้ไขผ่านโดเมน no-ip ไปพลางๆก่อนครับ

ขอบคุณทุกท่านมากครับ

กำหนดแบบนี้ไม่รอดครับ

[hr]

แนะนำใหม่กำหนดแบบนี้

ใส่ใน httpd.conf ที่กำหนด vhost ของ domain นั้นๆแบบนี้

<Directory /home/xxx_x/>

php_admin_value open_basedir /home/xxx_x/:/tmp:/usr/local/lib/php/

</Directory>

หมายเหตุ เท่ากับเรา Allow ให้ /home/xxx_x/ ใช้งานใน vhost นี้เท่านั้น

และโดเมนอื่นๆก็ทำเช่นนี้ทุกโดเมนครับ

<Directory /usr/local/www/vhosts/domain/httpdocs>
php_admin_value open_basedir “none”
</Directory>

ผม set ของ plesk นะ ไม่รู้ว่าเอามาปรับใช่ได้เปล่า

ใน
vhost.conf

แต่ละ domain

ถามจริงๆนะ รู้มั้ยว่าเขาคุยเรื่องอะไรกันอยู่

รู้นะครับ… แต่ได้แนะแนวทางรูปแบบที่กำหนดลงไปเฉพาะ vhost/domain ลงไป… หากอยากให้เปิดข้าม folder ระดับล่างลงไปได้ ก็แก้ไขรูปแบบนิดหน่อยครับ

" open_basedir " เป็นการกำหนดให้สามารถเปิด folder ที่เรากำหนดขอบเขตได้ครับ

เขาพูดเรื่องการเข้าเว็บผ่าน url ชั่วคราว http://ip/~username ว่ามันสามารถเปิดข้าม /home ได้
ซึ่งไม่สามารถกำหนด open_basedir เฉพาะเจาะจงไป user หนึ่ง user ใดได้
จึงต้องกำหนดกว้างๆไว้เป็น /home ซึ่งก็สามารถเปิดข้าม /home ได้เหมือนเดิม แต่อย่างน้อยก็ช่วยให้เปิดใน folder อื่นๆไม่ได้เช่น /etc

ส่วนใน vhost นั้นเขากำหนด /home/user เอาไว้อยู่แล้ว ซึ่งเราไม่ได้พูดถึงเรื่องนี้กัน

แบบนี้ถ้าเรียกผ่าน ~ ก็มีรูโหล่เพียบ

ทางที่ดีใช้ suphp น่าจะช่วยได้เยอะ

ปล. จริงๆเค้าพูดถึง open_basedir ของการเรียกผ่าน IP เช่น http://111.222.333.444/~user

ครับ ผมหมายถึง open_basedir สำหรับ การเรียกผ่าน http://111.222.333.444/~username ครับ
เพราะเข้าผ่านทางนี้ ผมกำหนดให้เฉพาะเจาะจง user ไม่เป็นครับ

แต่ถ้าหมายถึง open_basedir ของแต่ละโดเมน ใน DA ก็มีหน้า Settings อยู่แล้วครับ อันนี้ผมรู้ครับ

แชร์ความรู้ หาแนวทางและวิธีการแก้ไขกันครับ แต่โดยส่วนตัวไม่เคยแนะนำลูกค้าให้เข้าผ่าน IP เลยครับ เพราะมีช่องโหว่และปัญหา
ปกติถ้าลูกค้ายังไม่ชี้ ns มาก็จะบอกให้ชี้มาก่อน นอกจากลูกค้าบางคนรู้วิธีเข้าผ่านทาง IP อยู่แล้วก็ต้องมาอธิบายกันว่า เราเปิด open_basedir ไว้เพื่อป้องกันปัญหาต่างๆครับ

แต่ถ้าไม่รู้วิธีเข้าผ่าน IP ก็บอกว่าต้องมีโดเมนก่อนถึงใช้งานได้ครับ

เออ… มันรั่วจริงๆ แฮะ
แก้ไม่ได้ซะด้วยมั้ง

ตอนนี้ ลูกค้าใคร เข้า tht ก็คงลองกัน ให้สนุกเลย :d

ไม่จำเป็นก็อย่าให้ลูกค้าเข้าเป็นไอพีเลยครับ นอกจากความปลอดภัยแล้วยังมีอีกเรื่อง คือ log ครับ เพราะว่ามันไม่ได้เขียนลง log ของโดเมนนั้นๆ ทำให้ da ก็ไม่นับแบนวิดจ์ไปด้วย ถ้าลูกค้าสมัครแบบแบนวิดจ์ 1G แล้วใช้ url แบบนี้ผสมผสานไป ก็ใช้ได้มากกว่า 1G