คำตอบส่วนใหญ่ที่นี่ไม่ได้เขียนโดยคำนึงถึงความปลอดภัย เป็นเรื่องดีที่ได้รับความรู้สึกว่าการวิ่งsudoในแต่ละครั้งนั้นไม่ฉลาด หากคุณพิมพ์ผิด (ตัวอย่างเช่นพื้นที่สีขาวเดียวในสถานที่ที่ไม่ถูกต้อง: sudo rm -rf / var/www/dir ห้ามดำเนินการ! ) คุณอาจทิ้งระบบของคุณ
หมายเหตุ:เริ่มต้นด้วย Apache 2.4.7 / Ubuntu 14.04, /var/wwwถูกย้ายไปที่/var/www/htmlปรับคำสั่งในคำตอบนี้ตามลำดับ
ดู:
ความคิดที่ไม่ดี:
chmod 777(sagarchalise) - อนุญาตให้ทุกคนที่มีสิทธิ์เข้าถึงระบบของคุณเขียนลงในไดเรกทอรีและไฟล์และทำให้ผู้บุกรุกสามารถรันโค้ดใด ๆ ภายใต้www-dataผู้ใช้
chgrp -R www-data $HOME(cob) - ใช้www-dataสำหรับอ่านหรือเขียนไฟล์ใด ๆ ในโฮมไดเร็กตอรี่ นี่ไม่ใช่การรักษากฎ Least Privilege ไว้ในใจ
chown -R $USER:$USER /var/www(kv1dr) - หากโลกไม่ได้รับอนุญาตให้อ่าน/var/wwwเว็บเซิร์ฟเวอร์ที่ทำงานภายใต้www-dataจะไม่สามารถอ่าน (ให้บริการ) ไฟล์ได้ หากไฟล์นั้นเป็นเอกสาร HTML ธรรมดาที่สาธารณชนเข้าถึงได้อาจเป็นปัญหาหากโลกไม่สามารถอ่านไฟล์ได้ แต่ถ้าไฟล์นั้นเป็นไฟล์ PHP ที่มีรหัสผ่านอยู่ก็เป็นได้
หมายเหตุ : ในโซลูชันด้านล่างฉันได้รับwww-dataสิทธิ์ในการเขียน อย่างไรก็ตาม/usr/share/doc/base-passwd/users-and-groups.txt.gzรัฐ:
www ข้อมูล
เว็บเซิร์ฟเวอร์บางตัวทำงานเป็น www-data เนื้อหาเว็บไม่ควรเป็นของผู้ใช้รายนี้หรือเว็บเซิร์ฟเวอร์ที่ถูกบุกรุกจะสามารถเขียนเว็บไซต์ใหม่ได้ ข้อมูลที่เขียนโดยเว็บเซิร์ฟเวอร์จะเป็นของ www-data
ที่เป็นไปไม่ได้ให้สิทธิ์ในการเขียนไปยังwww-dataกลุ่ม www-dataจำเป็นต้องสามารถอ่านไฟล์ได้เท่านั้นเพื่อให้เว็บเซิร์ฟเวอร์สามารถให้บริการได้ กรณีเดียวที่www-dataจำเป็นต้องมีสิทธิ์ในการเขียนสำหรับไดเรกทอรีที่จัดเก็บการอัปโหลดและตำแหน่งอื่น ๆ ที่จำเป็นต้องเขียน
โซลูชันที่ 1
เพิ่มตัวคุณเองลงในwww-dataกลุ่มและตั้งค่าบิตบิตบน/var/wwwไดเรกทอรีเพื่อให้ไฟล์ที่สร้างขึ้นใหม่ทั้งหมดสืบทอดกลุ่มนี้เช่นกัน
sudo gpasswd -a "$USER" www-data
แก้ไขไฟล์ที่สร้างไว้ก่อนหน้า (สมมติว่าคุณเป็นผู้ใช้คนเดียว/var/www):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(ยิ่งปลอดภัยยิ่งขึ้น: ใช้งาน640หรือ2750ด้วยตนเองchmod g+w file-or-dirที่จำเป็นต้องเขียนโดยเว็บเซิร์ฟเวอร์)
โซลูชันที่ 2
สร้าง symlink สำหรับแต่ละโครงการในโฮมไดเร็กตอรี่ของคุณ สมมติว่าโครงการของคุณตั้งอยู่ที่~/projects/fooและคุณต้องการให้ตั้งอยู่ที่/var/www/fooรัน:
sudo ln -sT ~/projects/foo /var/www/foo
หากโฮมไดเร็กตอรี่ของคุณไม่มีการตั้งค่าบิตรันไทม์ (ลงมา) สำหรับother(เพื่อเหตุผลด้านความปลอดภัย), ให้เปลี่ยนกลุ่มของมันเป็นwww-data, แต่ตั้งค่าบิตรันไทม์เท่านั้น (ไม่อ่าน / เขียน). ทำเช่นเดียวกันกับ~/projectsโฟลเดอร์เนื่องจากอาจมีโครงการอื่นที่ไม่ใช่ www (คุณไม่ต้องการsudoหากคุณเพิ่มผู้ใช้ไปยังwww-dataกลุ่มก่อนหน้านี้)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
ตั้งค่ากลุ่มเป็นwww-dataเปิด~/projects/fooและอนุญาตให้เว็บเซิร์ฟเวอร์อ่านและเขียนไฟล์และไฟล์ + ไดเรกทอรีและลงสู่ไดเรกทอรี:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
ปลอดภัยยิ่งขึ้น: ใช้ 640 และ 2750 โดยค่าเริ่มต้นและ chmod ไฟล์และไดเรกทอรีด้วยตนเองที่ผู้ใช้เว็บเซิร์ฟเวอร์ต้องเขียนได้ ควรเพิ่ม setgid บิตเฉพาะเมื่อคุณต้องการให้ทุกไฟล์ที่สร้างขึ้นใหม่~/projects/fooสามารถเข้าถึงได้โดยกลุ่ม
จากนี้ไปคุณจะสามารถเข้าถึงเว็บไซต์ของคุณที่และแก้ไขไฟล์ในโครงการของคุณhttp://localhost/foo~/projects/foo
ดูสิ่งนี้ด้วย