ฉันเพิ่งหมุนกล่อง Ubuntu 11.10 แล้ววิ่งapt-get install apache2 php5
ไปติดตั้ง apache2 และ PHP 5 บนกล่อง ตอนนี้มันทำงานเป็น "เว็บเซิร์ฟเวอร์" และโหลด "It Works!" หน้า. ตอนนี้ฉันพยายามกระชับความปลอดภัยและฉันมีคำถามต่อไปนี้เกี่ยวกับเว็บเซิร์ฟเวอร์ linux:
- ใครควรใช้ apache เป็น?
- ผู้ใช้นี้ควรอยู่ในกลุ่มใด
- แพคเกจใดที่สามารถทำให้ PHP (และ Apache?) ทำงานเป็นเจ้าของไฟล์ได้ (เช่นบนโฮสต์เว็บที่ใช้ร่วมกัน) ฉันควรใช้แพ็คเกจเหล่านี้หรือไม่ ง่ายต่อการรักษาบนระบบขนาดเล็กหรือไม่?
- สิทธิ์เริ่มต้นควรเป็นอย่างไรสำหรับไฟล์และโฟลเดอร์ที่ให้บริการในเว็บโดยที่ apache ทำงานเป็น
www-data
? สำหรับ apache / php ที่ทำงานในฐานะผู้ใช้?
ฉันได้ทำสิ่งต่าง ๆ ต่อไปนี้เพื่อตรวจสอบการตั้งค่าเริ่มต้น:
โครงสร้างไฟล์
เมื่อฉันcd /
และทำls -al
รายการเนื้อหาฉันเห็น/var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
ถ้าฉันcd
เป็นvar
และls -al
ฉันเห็น:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
ในที่สุด/var/www
ฉันเห็น:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r-- 1 root root 177 2012-02-04 20:47 index.html
กุญแจสำคัญของฉันคือจนถึงทุกอย่างของไฟล์เหล่านี้root:root
ไฟล์มีสิทธิ์ 644 และไดเรกทอรีมีสิทธิ์ 755
สิทธิ์ของ Apache
ถ้าฉันสร้างไฟล์เป็น root /var/www/test.php
ด้วยเนื้อหา:
<?php echo shell_exec('whoami');
และโหลดไฟล์นั้นลงในเบราว์เซอร์ที่จะบอกฉันwww-data
ซึ่งเป็นเช่นเดียวกับใน/etc/apache2/envvars
ไฟล์:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
ถ้าฉันps aux | grep -i apache
ฉันเห็นต่อไปนี้:
root 1916 1.2 104664 7488 Ss 20:47 /usr/sbin/apache2 -k start
www-data 1920 0.8 105144 5436 S 20:47 /usr/sbin/apache2 -k start
www-data 1921 1.0 105144 6312 S 20:47 /usr/sbin/apache2 -k start
www-data 1922 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1923 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1924 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
www-data 1925 0.7 104688 4624 S 20:47 /usr/sbin/apache2 -k start
ดังนั้น apache ที่ทำงานเป็นใคร ดูเหมือนว่ากระบวนการแรกroot
อาจจะมาจาก/etc/init.d/apache
สคริปต์เมื่อระบบเริ่มทำงานและอีกกระบวนการหนึ่งwww-data
เริ่มจากครั้งแรก ถูกต้องไหม
ต่อไปถ้าฉันพิมพ์ฉันgroups www-data
ก็จะเห็นwww-data : www-data
- ดังนั้นจึงดูเหมือนอยู่ในwww-data
กลุ่มเท่านั้น ฉันเดาว่านี่เป็นมาตรฐานการปฏิบัติเช่นกัน
แชร์โฮสติ้งและความปลอดภัย
ดังนั้นหากฉันเข้าใจสิ่งต่าง ๆ อย่างถูกต้องหาก apache ทำงานเป็นwww-data
และฉันต้องการให้ apache สามารถอ่านไดเรกทอรีได้x
บิตต้องถูกตั้งค่าสำหรับกลุ่มโลก (อื่น ๆ ) ( o+x
) และต้องตั้งค่าบนพาเรนต์ทั้งหมดด้วย ไดเรกทอรีทุกทางจนถึงห่วงโซ่ ( www
, var
) และถ้าฉันต้องการให้อาปาเช่สามารถอ่านจากไฟล์ได้o+r
จำเป็นต้องตั้งค่าบิต
น่าเสียดายที่ฉันเชื่อว่านี่เป็นการแนะนำช่องโหว่ด้านความปลอดภัยสำหรับแอปพลิเคชั่นหลายตัวและ / หรือผู้ใช้หลายคนในกล่อง linux เดียวกัน: ไฟล์เว็บทั้งหมดต้องสามารถอ่านได้ทั่วโลกดังนั้นพวกเขาจึงสามารถเข้าถึงได้โดยแอปพลิเคชันอื่น ๆ หากแอปพลิเคชันหนึ่งที่ติดตั้งในระบบมีช่องโหว่ด้านความปลอดภัยที่อนุญาตให้ผู้ใช้ป้อนข้อมูลดิบและไม่ผ่านการตรวจสอบซึ่งถูกดำเนินการโดย PHP ผู้โจมตีระยะไกลสามารถเรียกดูไฟล์อื่น ๆ ทั้งหมดบนระบบเว็บที่โลกอ่านได้ ในทำนองเดียวกันหากกล่องมีผู้ใช้หลายคนและผู้ใช้รู้จักเส้นทางของไฟล์เว็บของผู้ใช้คนอื่นเขาก็สามารถอ่านเนื้อหาไฟล์ (และดูสิ่งที่ละเอียดอ่อนเช่นสตริงการเชื่อมต่อฐานข้อมูล ฯลฯ )
ฉันได้ยินสองแพคเกจsuphp
และการphpsuexec
จัดการกับการอนุญาตให้ใช้ไฟล์ของผู้ใช้ "เป็นพวกเขา" ในระบบที่ใช้ร่วมกัน หนึ่งในสิ่งนี้คือมันช่วยให้เว็บแอปพลิเคชั่น (เช่น Wordpress) สามารถสร้างและแก้ไขไฟล์ได้ - มีประโยชน์มากสำหรับการเพิ่มธีมปลั๊กอินและซอฟต์แวร์อัพเกรด แน่นอนว่ามันอาจจะปลอดภัยกว่าในการทำสิ่งเหล่านี้ด้วยตนเอง แต่การประนีประนอมอาจจะทำได้ด้วยแพ็คเกจใดแพ็คเกจหนึ่งที่กล่าวถึงข้างต้น หรืออาจจะใช้chown
เพื่อทำให้กลุ่มไดเรกทอรี wordpress เป็นของwww-data
และตั้งค่าบิตเหนียวในกลุ่ม ( g+s
)?
ฉันใช้สิ่งเหล่านี้ในฐานะผู้ใช้ของ บริษัท เว็บโฮสติ้งเท่านั้นดังนั้นฉันจึงไม่ทราบถึงสิ่งที่พวกเขาทำและถ้าพวกเขาสมเหตุสมผลในการติดตั้งในระบบขนาดเล็กหรือหากมีบางอย่างอื่น มาตรการความปลอดภัยที่ฉันควรใช้แทน แต่ฉันคิดว่าฉันจะพูดถึงพวกเขาที่นี่เพราะพวกเขาดูเหมือนเป็นวิธีหนึ่งที่เป็นไปได้ที่จะจัดการกับข้อกังวลของฉัน
กลับไปที่คำถาม
- ใครควรใช้ apache เป็น?
- ผู้ใช้นี้ควรอยู่ในกลุ่มใด
- แพคเกจใดที่สามารถทำให้ PHP (และ Apache?) ทำงานเป็นเจ้าของไฟล์ได้ (เช่นบนโฮสต์เว็บที่ใช้ร่วมกัน) ฉันควรใช้แพ็คเกจเหล่านี้หรือไม่ ง่ายต่อการรักษาบนระบบขนาดเล็กหรือไม่?
- สิทธิ์เริ่มต้นควรเป็นอย่างไรสำหรับไฟล์และโฟลเดอร์ที่ให้บริการในเว็บโดยที่ apache ทำงานเป็น
www-data
? สำหรับ apache / php ที่ทำงานในฐานะผู้ใช้?