การให้สิทธิ์ในการเขียนให้กับกลุ่ม www-data


23

ฉันกำลังสร้างเว็บไซต์และส่วนหนึ่งของฟังก์ชั่นคือการเขียนข้อมูลที่ผู้ใช้สร้างขึ้นด้วย php ฉันใช้ nginx บน Ubuntu 13.04 ช่วงเวลาที่ฉันทดสอบเท่านั้นและทุกอย่างให้บริการผ่าน nginx บน locahost

สคริปต์ php ของฉันไม่สามารถเขียนไฟล์ข้อความ (แม้ว่าฉันสามารถทำได้ด้วยตนเอง) และฉันคิดว่าเป็นปัญหาสิทธิ์ในการเขียนไปยังไดเรกทอรี /var/www/example.com/public_html ของฉัน

ในขณะที่ฉัน (iain) เป็นเจ้าของไดเรกทอรีนี้ แต่ดูเหมือนว่าจะมีความเหมาะสมมากกว่าในการโอนความเป็นเจ้าของไดเรกทอรี / var / www และทุกอย่างภายในนั้นให้กับผู้ใช้ www-data (หรือควรเป็นกลุ่ม?) และเพิ่มตัวเองลงไป กลุ่ม www-data วิธีต่อไปนี้ถูกต้องหรือไม่

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

ดังนั้นหมายความว่าทุกคนในกลุ่ม www-data สามารถอ่านเขียนและดำเนินการใน / var / www ได้หรือไม่?

คำตอบ:


46

ก่อนอื่นให้useraddสร้างผู้ใช้ใหม่ เนื่องจากคุณ (iain) มีอยู่แล้วคุณต้องการโทรหาusermodแทน ดังนั้นจะเป็น:

sudo usermod -aG www-data iain
addgroup www-data

(จดบันทึก-aบนเซิร์ฟเวอร์ที่ใช้ Debian (รวมอยู่ใน Ubuntu) ที่จะเพิ่มคุณในกลุ่มนั้นและรักษาสมาชิกของคุณไปยังกลุ่มอื่น ๆ ลืมมันและคุณจะอยู่ในกลุ่ม www-data เท่านั้น - อาจเป็นประสบการณ์ที่เลวร้ายหากหนึ่งในนั้น พวกเขาเป็นวงล้อบนเซิร์ฟเวอร์ประเภท SUSE ตัวเลือกคือ-Aแทนที่จะ-aGอ่านman usermodอย่างระมัดระวังเพื่อทำให้ถูกต้อง)

ประการที่สองคุณไม่ต้องการให้อาปาเช่เข้าถึง rw เต็มรูปแบบ/var/www: นี่อาจเป็นการละเมิดความปลอดภัยที่สำคัญ ตามกฎทั่วไปให้อนุญาตเฉพาะสิ่งที่คุณต้องการและไม่มีอะไรเพิ่มเติม ( หลักการของสิทธิ์น้อยที่สุด ) ในกรณีนี้คุณจะต้อง Apache ( www-data) และคุณ ( www-dataกลุ่ม) การเขียน (และอ่าน) ใน/var/www/example.com/public_htmlเพื่อให้

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

แก้ไข : เพื่อตอบคำถามเดิมของคุณใช่สมาชิกทุกคนwww-dataสามารถอ่านและดำเนินการได้/var/www(เพราะบิตสุดท้ายของการอนุญาตของคุณคือ 5 = read + exec) แต่เนื่องจากคุณไม่ได้ใช้-Rสวิตช์จึงมีผล/var/wwwกับไฟล์และไดเรกทอรีย่อยที่มีอยู่เท่านั้น ตอนนี้พวกเขาสามารถเขียนเป็นเรื่องอื่นได้หรือไม่และขึ้นอยู่กับกลุ่มของ/var/wwwที่คุณยังไม่ได้กำหนด ฉันเดาว่าโดยทั่วไปแล้วroot:rootไม่ดังนั้นพวกเขา (อาจ) ไม่สามารถเขียนได้

แก้ไขเมื่อวันที่ 2014-06-22 : เพิ่มหมายเหตุว่า-aGตัวเลือกนั้นใช้ได้บนเซิร์ฟเวอร์ที่ใช้ Debian เห็นได้ชัดว่ามันแตกต่างกันไปตามการกระจายดังนั้นโปรดอ่านmanอย่างถี่ถ้วนก่อนดำเนินการ


โอเคฉันเข้าใจแล้ว กลุ่ม / var / www เป็น root แน่นอน: root ขอบคุณสำหรับลิงค์ ดูเหมือนจะมีเหตุผลมากกว่าที่จะอยู่ในลักษณะที่อนุญาตให้สิ่งที่ต้องการแทนที่จะไปเพื่อความสะดวก ขอบคุณสำหรับคำแนะนำ
duff

2
ตกลงดังนั้นฉันจึงพยายามเขียนถึง /var/www/example.com/public_html ด้วยcp -r php /var/www/example.com/public_htmlและฉันได้รับอนุญาตปฏิเสธ ฉันอยู่ในกลุ่ม www-data ซึ่งมี rwxrwx --- สิทธิ์สำหรับ dir นี้ ทำไมนี้
duff

อาจมีหลายสิ่งที่นี่ ตัวอย่างเช่นคุณไม่ได้รับอนุญาตให้อ่านบางสิ่งใน php หรือคุณไม่ได้ออกจากระบบและหลังจาก usermod (ฉันอัปเดตคำตอบของฉันในจุดนั้นด้วย addgroup เพื่อหลีกเลี่ยงปัญหานี้และกำหนดว่าจะใช้ sudo ที่ไหน)
Calimo

จากคำตอบทั้งหมดที่เกี่ยวกับเรื่องwww-data:www-dataนี้แก้ปัญหาด้วยสิทธิ์ที่ขาดหายไป ขอขอบคุณ.
ยูจีน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.