อัปเดตข้อมูลสรุป
ไดเรกทอรี / var / www เป็นเจ้าของroot:root
ซึ่งหมายความว่าไม่มีใครสามารถใช้งานได้และไม่มีประโยชน์อย่างสิ้นเชิง เนื่องจากเราทุกคนต้องการเว็บเซิร์ฟเวอร์ที่ใช้งานได้จริง (และไม่มีใครควรเข้าสู่ระบบในฐานะ "รูท") ดังนั้นเราจึงต้องแก้ไขปัญหานี้
มีเพียงสองหน่วยงานเท่านั้นที่ต้องมีการเข้าถึง
PHP / Perl / Ruby / Pythonทุกคนต้องการการเข้าถึงโฟลเดอร์และไฟล์เนื่องจากมันสร้างขึ้นมาจำนวนมาก (เช่น
/uploads/
) ภาษาสคริปต์เหล่านี้ควรทำงานภายใต้ nginx หรือ apache (หรือแม้แต่สิ่งอื่น ๆ เช่น FastCGI สำหรับ PHP)นักพัฒนา
พวกเขาเข้าถึงได้อย่างไร ฉันรู้ว่ามีบางคนเคยทำสิ่งนี้มาก่อน ด้วยเว็บไซต์ที่มีอยู่หลายพันล้านแห่งคุณคิดว่าจะมีข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้
ฉันรู้ว่า 777 เต็มสิทธิ์อ่าน / เขียน / ดำเนินการสำหรับเจ้าของ / กลุ่ม / อื่น ๆ ดังนั้นจึงไม่จำเป็นต้องแก้ไขให้ถูกต้องเนื่องจากจะให้สิทธิ์แบบเต็มแก่ผู้ใช้
ต้องใช้การอนุญาตอะไรบ้าง/var/www
เพื่อให้:
- การควบคุมแหล่งที่มาเช่น git หรือ svn
- ผู้ใช้ในกลุ่มเช่น "เว็บไซต์" ( หรือเพิ่มลงใน "www-data" )
- เซิร์ฟเวอร์เช่น apache หรือ lighthttpd
- และ PHP / Perl / Ruby
ทุกคนสามารถอ่านสร้างและเรียกใช้ไฟล์ (และไดเรกทอรี) ได้ไหม
หากฉันถูกต้องสคริปต์ Ruby และ PHP จะไม่ "ดำเนินการ" โดยตรง - แต่ส่งต่อไปยังล่าม ดังนั้นไม่จำเป็นต้องขออนุญาตดำเนินการกับไฟล์ใน/var/www
... ดังนั้นดูเหมือนว่าสิทธิ์ที่ถูกต้องจะเป็นchmod -R 1660
สิ่งที่จะทำให้
- ไฟล์ทั้งหมดใช้ร่วมกันโดยสี่หน่วยงานเหล่านี้
- ไฟล์ทั้งหมดไม่สามารถเรียกใช้งานได้โดยไม่ได้ตั้งใจ
- บล็อกคนอื่นจากไดเรกทอรีทั้งหมด
- ตั้งค่าโหมดการอนุญาตเป็น "เหนียว" สำหรับไฟล์ในอนาคตทั้งหมด
ถูกต้องหรือไม่
อัปเดต 1:ฉันเพิ่งรู้ว่าไฟล์และไดเรกทอรีอาจต้องมีการอนุญาตที่แตกต่างกัน - ฉันกำลังพูดถึงไฟล์ด้านบนดังนั้นฉันไม่แน่ใจว่าต้องใช้สิทธิ์ไดเรกทอรีใด
อัปเดต 2:โครงสร้างโฟลเดอร์ของ/var/www
การเปลี่ยนแปลงอย่างมากเนื่องจากหนึ่งในสี่เอนทิตีข้างต้นมักจะเพิ่ม (และบางครั้งลบ) โฟลเดอร์และโฟลเดอร์ย่อยหลายระดับ พวกเขายังสร้างและลบไฟล์ที่เอนทิตี 3 อื่น ๆ อาจต้องมีการเข้าถึงแบบอ่าน / เขียน ดังนั้นการอนุญาตต้องทำทั้งสี่อย่างข้างต้นสำหรับทั้งไฟล์และไดเรกทอรี เนื่องจากไม่มีสิ่งใดที่ควรได้รับอนุญาตให้ดำเนินการ (ดูคำถามเกี่ยวกับ ruby / php ด้านบน) ฉันคิดว่าการrw-rw-r--
อนุญาตจะเป็นสิ่งที่จำเป็นและปลอดภัยอย่างสมบูรณ์เนื่องจากองค์กรทั้งสี่นี้ดำเนินการโดยบุคลากรที่เชื่อถือได้ (ดู # 2) และผู้ใช้อื่น ๆ ระบบมีการเข้าถึงเพื่ออ่านเท่านั้น
อัปเดต 3: ใช้สำหรับเครื่องพัฒนาส่วนบุคคลและเซิร์ฟเวอร์ บริษัท ส่วนตัว ไม่มี "ลูกค้าเว็บ" แบบสุ่มเหมือนโฮสต์ที่ใช้ร่วมกัน
อัปเดต 4: บทความนี้โดย slicehost ดูเหมือนจะดีที่สุดในการอธิบายสิ่งที่จำเป็นในการตั้งค่าการอนุญาตสำหรับโฟลเดอร์ www ของคุณ อย่างไรก็ตามฉันไม่แน่ใจว่าผู้ใช้หรือกลุ่ม apache / nginx ที่มี PHP หรือ svn / git ทำงานเป็นและวิธีการเปลี่ยนพวกเขา
อัปเดต 5:ฉันมี (ฉันคิดว่า) ในที่สุดก็พบวิธีที่จะทำให้ทุกอย่างทำงานได้ (คำตอบด้านล่าง) อย่างไรก็ตามฉันไม่รู้ว่านี่เป็นวิธีที่ถูกต้องและปลอดภัยหรือไม่ ดังนั้นฉันได้เริ่มต้นเงินรางวัล บุคคลที่มีวิธีที่ดีที่สุดในการรักษาความปลอดภัยและจัดการไดเรกทอรี www ชนะ