การแยก Apache virtualhosts ออกจากส่วนที่เหลือของระบบ


11

ฉันกำลังตั้งค่าเว็บเซิร์ฟเวอร์ที่จะโฮสต์เว็บไซต์ที่แตกต่างกันจำนวนหนึ่งเป็น Apache VirtualHosts แต่ละแห่งจะมีความเป็นไปได้ในการเรียกใช้สคริปต์ (โดยหลักคือ PHP และอื่น ๆ )

คำถามของฉันคือฉันแยกแต่ละ VirtualHosts เหล่านี้ออกจากแต่ละคนและจากส่วนที่เหลือของระบบได้อย่างไร ฉันไม่ต้องการให้เว็บไซต์ X อ่านการกำหนดค่าเว็บไซต์ Y หรือไฟล์ "ส่วนตัว" ของเซิร์ฟเวอร์

ในขณะนี้ฉันได้ติดตั้ง VirtualHosts ด้วย FastCGI, PHP และ SUExec ตามที่อธิบายไว้ที่นี่ ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ) แต่ SUExec ป้องกันผู้ใช้จากการแก้ไข / เรียกใช้ไฟล์อื่นที่ไม่ใช่ของตนเองเท่านั้น - ผู้ใช้ยังสามารถอ่านข้อมูลที่ละเอียดอ่อนเช่นไฟล์กำหนดค่า

ฉันคิดว่าจะลบสิทธิ์การอ่านแบบโกลบอลของ UNIX สำหรับไฟล์ทั้งหมดบนเซิร์ฟเวอร์เพราะจะช่วยแก้ไขปัญหาข้างต้นได้ แต่ฉันไม่แน่ใจว่าฉันสามารถทำได้อย่างปลอดภัยหรือไม่โดยไม่รบกวนการทำงานของเซิร์ฟเวอร์

ฉันดูที่การใช้ chroot ด้วย แต่ดูเหมือนว่าสิ่งนี้สามารถทำได้แบบต่อเซิร์ฟเวอร์เท่านั้นไม่ใช่แบบต่อโฮสต์เสมือน

ฉันกำลังมองหาคำแนะนำใด ๆ ที่จะแยก VirtualHosts ของฉันออกจากส่วนที่เหลือของระบบ

PS ฉันใช้เซิร์ฟเวอร์ Ubuntu 12.04

คำตอบของฉัน:ฉันลงเอยด้วยการติดตามการตั้งค่าปัจจุบันของฉัน แต่ทำ chroot คุกสำหรับโฮสต์เสมือนทั้งหมดเช่นมี chroot jail ใน/var/wwwแล้วมีข้อมูลผู้ใช้ทั้งหมดในโฟลเดอร์ย่อยแต่ละสิทธิ์กลุ่ม / อื่น ๆ r / w / x พิการ ตัวเลือกนี้เป็นที่ต้องการโดยเฉพาะอย่างยิ่งเพราะเป็นไปได้ทั้งหมดโดยไม่มีการดัดแปลงใด ๆ กับซอร์สโค้ด

ฉันเลือก @Chris 'คำตอบเพราะมันเขียนอย่างละเอียดและยังพิจารณา FTP และ SELinux

คำตอบ:


4

สิ่งนี้สามารถทำได้โดยการเปิดใช้งานโมดูล mod_users ใน Apache

คุณจะต้องตั้งค่า UserDir ในการกำหนดค่า apache ของคุณ ฉันขอแนะนำให้คุณทำเช่นนี้ในไฟล์กำหนดค่าแยกต่างหากและรวมไว้ ล้อมรอบการรวมใน

<IfModule mod_users.c>
   Include conf/extra/userdir.conf
</IfModule>

ฉันสามารถให้คุณกวดวิชาทั้งหมด แต่นี้จะช่วยให้คุณเริ่มต้นสำหรับการกำหนดค่า Apache: http://www.techytalk.info/enable-userdir-apache-module-ubuntu-debian-based-linux-distribution/

คำแนะนำถ้าคุณใช้ SELinux (และคุณควร) คุณจะต้องให้สิทธิ์การเข้าถึง Apache แก่ผู้ใช้ในการอ่าน คุณสามารถทำได้โดยการตั้งค่า:

sudo setsebool -P httpd_enable_homedirs=On

นอกจากนี้ยังต้องการการอนุญาตสำหรับไฟล์ไปยังไดเร็กทอรี dir public_html ของผู้ใช้และการอนุญาต rx ในไดเรกทอรีพาเรนต์จนถึงรูท

เห็นได้ชัดว่าคุณต้องตั้งค่า chroot สำหรับผู้ใช้เช่นใน vsftpd ติดตั้ง:

apt-get vsftpd

ในการกำหนดค่า chrooting open /etc/vsftpd/vsftpd.conf ด้วย vi หรือ nano ค้นหาและไม่ใส่ข้อคิดเห็นหรือเพิ่ม: chroot_local_user = ใช่

คุณสามารถรับพฤติกรรมเดียวกันสำหรับ sftp ซึ่งฉันแนะนำผ่าน FTP, เปิด / etc / ssh / sshd_config และเพิ่มบล็อกการจับคู่และบรรทัดนี้:

Subsystem   sftp    internal-sftp

Match Group web_users
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no
Match

นี้จะ chroot ผู้ใช้ใด ๆในกลุ่ม web_users นอกจากนี้คุณจะต้องปฏิเสธการเข้าถึงเชลล์โดยตั้งค่าเป็น / sbin / nologin:

useradd -G "web_users" -s /sbin/nologin new_user

หากนี่คือเซิร์ฟเวอร์การผลิตสาธารณะฉันขอแนะนำให้คุณใช้การชุบแข็งบน OS, OpenSSH, Apache, PHP, vsftpd และใช้ iptables และ TCP wrappers ที่เข้มงวด ฉันแนะนำให้คุณออกจาก SELinux ด้วย


3
ฉันไม่เห็นวิธีการให้mod_userdirบริการโฮสต์เสมือนของโดเมนแยกต่างหาก นอกจากนี้ฉันมีข้อกังวลเกี่ยวกับความปลอดภัยในแง่ของการแยกตัวเนื่องจากฉันไม่สามารถค้นหาสิ่งใดระหว่างไดเรกทอรีผู้ใช้ภายใน Apache ดูเหมือนว่าจะไม่เสนอคุณสมบัตินั้น
gertvdijk

6

ฉันขอแนะนำให้ดูที่suphpหรือPHP-FPM

โดยทั่วไปจะช่วยให้ล่าม PHP เป็น 'su' กับผู้ใช้บางรายที่กำหนดค่าสำหรับ VirtualHost นั้น ที่จะช่วยให้คุณใช้การอนุญาตระบบไฟล์ทั่วไปเพื่อแยก VirtualHost ทุก ๆ

ฉันจะแนะนำ FPM สำหรับการพิจารณาประสิทธิภาพ จากหน้าแรกนี่คือสิ่งที่คุณสนใจมากที่สุด:

สิ่งที่น่าสนใจคือตัวเลือกสำหรับผู้ใช้และกลุ่มต่อพูลซึ่งอนุญาตให้คุณรันพูล fpm เฉพาะนั้นภายใต้ uid และ gid ที่กำหนด ลาก่อน suphp!


4

1
ฉันดูลิงค์เหล่านี้ แต่ดูเหมือนว่าฉันจะไม่สามารถ chroot บนพื้นฐานของโฮสต์เสมือน บางทีฉันควรกำหนดไดเรกทอรี www ทั่วโลกเพื่อ chroot ในทำนอง/var/wwwเดียวกันและมีโฮสต์ทั้งหมดอยู่ในไดเรกทอรีย่อยที่นั่นแต่ละไดเรกทอรีย่อยเหล่านี้มีการลบสิทธิ์ดำเนินการ / อ่านทั่วโลก?
JesperB

ประเด็นหลักของฉันคือchrootและคุณสามารถทำได้ต่อเซิร์ฟเวอร์เสมือน นี่คือตัวอย่าง mod_chrootในกรณีนี้พวกเขากำลังใช้
tacotuesday
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.