ammove
June 2, 2009, 11:38am
1
ปกติ 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
แต่ดูแบบนี้จะเอาโดเมนที่แอดล่าสุดไปนะครับ
ถ้าดูเจาะจงโดเมนอีก อันนี้หาอยู่เหมือนกัน
ammove
June 2, 2009, 12:02pm
3
หมายถึงว่า usernameของเรา สามารถอ่านไฟล์ใน /home/usernameของคนอื่น ได้ไหมครับ คืออ่านข้าม user ครับ
[edit] เพิ่ม ผมก็ยังไม่ได้ลองทำดูนะครับ แต่ลองมาถามดูก่อนครับ
open_basedir ควรจะ ON ไว้ครับ… เพราะจะทำให้ R/W ข้าม Home กันไม่ได้
kke
June 2, 2009, 1:09pm
5
ไม่แน่ใจเหมือนกัน แต่คิดว่าได้
เดี๋ยวลองทดสอบดูก่อน
ทดสอบแล้ว สามารถอ่านข้าม /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 มาที่เครื่องครับ
ต้องแจ้งให้ลูกค้ารอ หรือ ไม่ใส่ หรือลงโปรแกรมก่อนค่อยใส่ แล้วแต่จะตัดสินใจครับ บางเรื่องก็ต้องอธิบายให้ลูกค้าฟัง ว่าเป็นอย่างนี้ครับ
kke
June 2, 2009, 1:40pm
9
ในนั้นต้องกำหนดกว้างๆครับ
/var/www/html/:/home/:/tmp/:/usr/local/lib/php
ประมาณนี้
ammove
June 2, 2009, 1:56pm
10
สรุปว่า มี2ทางเลือกคือ
ใส่ open_basedir ไว้แล้ว บอกให้ลูกค้าเข้าใจ
ไม่ใส่ 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
kke
June 2, 2009, 3:15pm
13
กำหนดแบบนี้ไม่รอดครับ
[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 นี้เท่านั้น
และโดเมนอื่นๆก็ทำเช่นนี้ทุกโดเมนครับ
ถามจริงๆนะ รู้มั้ยว่าเขาคุยเรื่องอะไรกันอยู่
รู้นะครับ… แต่ได้แนะแนวทางรูปแบบที่กำหนดลงไปเฉพาะ vhost/domain ลงไป… หากอยากให้เปิดข้าม folder ระดับล่างลงไปได้ ก็แก้ไขรูปแบบนิดหน่อยครับ
" open_basedir " เป็นการกำหนดให้สามารถเปิด folder ที่เรากำหนดขอบเขตได้ครับ
kke
June 2, 2009, 3:47pm
15
รู้นะครับ… แต่ได้แนะแนวทางรูปแบบที่กำหนดลงไปเฉพาะ 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
ammove
June 2, 2009, 4:09pm
17
ครับ ผมหมายถึง open_basedir สำหรับ การเรียกผ่าน http://111.222.333.444/~username ครับ
เพราะเข้าผ่านทางนี้ ผมกำหนดให้เฉพาะเจาะจง user ไม่เป็นครับ
แต่ถ้าหมายถึง open_basedir ของแต่ละโดเมน ใน DA ก็มีหน้า Settings อยู่แล้วครับ อันนี้ผมรู้ครับ
แชร์ความรู้ หาแนวทางและวิธีการแก้ไขกันครับ แต่โดยส่วนตัวไม่เคยแนะนำลูกค้าให้เข้าผ่าน IP เลยครับ เพราะมีช่องโหว่และปัญหา
ปกติถ้าลูกค้ายังไม่ชี้ ns มาก็จะบอกให้ชี้มาก่อน นอกจากลูกค้าบางคนรู้วิธีเข้าผ่านทาง IP อยู่แล้วก็ต้องมาอธิบายกันว่า เราเปิด open_basedir ไว้เพื่อป้องกันปัญหาต่างๆครับ
แต่ถ้าไม่รู้วิธีเข้าผ่าน IP ก็บอกว่าต้องมีโดเมนก่อนถึงใช้งานได้ครับ
icez
June 2, 2009, 4:23pm
18
เออ… มันรั่วจริงๆ แฮะ
แก้ไม่ได้ซะด้วยมั้ง
ตอนนี้ ลูกค้าใคร เข้า tht ก็คงลองกัน ให้สนุกเลย :d
ไม่จำเป็นก็อย่าให้ลูกค้าเข้าเป็นไอพีเลยครับ นอกจากความปลอดภัยแล้วยังมีอีกเรื่อง คือ log ครับ เพราะว่ามันไม่ได้เขียนลง log ของโดเมนนั้นๆ ทำให้ da ก็ไม่นับแบนวิดจ์ไปด้วย ถ้าลูกค้าสมัครแบบแบนวิดจ์ 1G แล้วใช้ url แบบนี้ผสมผสานไป ก็ใช้ได้มากกว่า 1G