www-data การอนุญาต?


108

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

คำตอบ:


168
sudo chown -R yourname:www-data cake

แล้ว

sudo chmod -R g+s cake

คำสั่งแรกเปลี่ยนเจ้าของและกลุ่ม

คำสั่งที่สองเพิ่มแอตทริบิวต์ s ซึ่งจะเก็บไฟล์และไดเร็กทอรีใหม่ไว้ภายในเค้กที่มีสิทธิ์กลุ่มเดียวกัน


3
ทำไม chmod g + s จึงเรียกซ้ำ
Ben Rogmans

ไม่รู้เกี่ยวกับ g + s มีประโยชน์มาก!
FRAGA

1
ผู้ใช้สามารถทำอะไรกับไฟล์ที่สร้างโดย www-data ในเค้กเองและไฟล์ที่สร้างโดย www-data ในไดเร็กทอรีที่สร้างโดย www-data ตัวอย่างเช่นเกี่ยวกับการแก้ไขเปลี่ยนชื่อลบการดำเนินการ? ตามที่ฉันเข้าใจการเปลี่ยนชื่อและการลบไม่สามารถทำได้ในไดเร็กทอรีที่สร้างโดย www-data และผู้ใช้ไม่สามารถแก้ไขไฟล์ที่สร้างโดย www-data ได้เลย
qdinar

49

ตามที่ระบุไว้ในบทความโดย Slicehost :

การตั้งค่าผู้ใช้

เริ่มต้นด้วยการเพิ่มผู้ใช้หลักในกลุ่มผู้ใช้ Apache:

sudo usermod -a -G www-data demo

ซึ่งจะเพิ่ม "การสาธิต" ของผู้ใช้ลงในกลุ่ม "www-data" ตรวจสอบให้แน่ใจว่าคุณใช้ทั้งอ็อพชัน -a และ -G ด้วยคำสั่ง usermod ที่แสดงด้านบน

คุณจะต้องออกจากระบบและกลับเข้าสู่ระบบอีกครั้งเพื่อเปิดใช้งานการเปลี่ยนแปลงกลุ่ม

ตรวจสอบกลุ่มทันที:

groups
...
# demo www-data

ตอนนี้ฉันเป็นสมาชิกของสองกลุ่ม: ของฉันเอง (สาธิต) และกลุ่ม Apache (www-data)

การตั้งค่าโฟลเดอร์

ตอนนี้เราต้องตรวจสอบให้แน่ใจว่าโฟลเดอร์ public_html เป็นของผู้ใช้หลัก (สาธิต) และเป็นส่วนหนึ่งของกลุ่ม Apache (www-data)

มาตั้งค่ากัน:

sudo chgrp -R www-data /home/demo/public_html

ในขณะที่เรากำลังพูดถึงสิทธิ์ฉันจะเพิ่มบันทึกย่อเกี่ยวกับคำสั่ง sudo: เป็นนิสัยที่ดีในการใช้เส้นทางสัมบูรณ์ (/ home / demo / public_html) ดังที่แสดงไว้ด้านบนแทนที่จะเป็นเส้นทางสัมพัทธ์ (~ / public_html) ช่วยให้มั่นใจได้ว่า sudo ถูกใช้ในตำแหน่งที่ถูกต้อง

หากคุณมีโฟลเดอร์ public_html ที่มี symlink อยู่แล้วให้ระวังคำสั่งนั้นด้วยเพราะมันจะเป็นไปตาม symlinks ในกรณีของโฟลเดอร์ public_html ที่ใช้งานได้ให้เปลี่ยนแต่ละโฟลเดอร์ด้วยตนเอง

Setgid

ดีมาก แต่จำคำสั่งที่เราให้ไว้มีผลกับโฟลเดอร์ที่มีอยู่เท่านั้น มีอะไรใหม่บ้าง?

เราสามารถตั้งค่าความเป็นเจ้าของเพื่อให้สิ่งใหม่ ๆ อยู่ในกลุ่ม "www-data" ด้วย

คำสั่งแรกจะเปลี่ยนสิทธิ์สำหรับไดเร็กทอรี public_html เพื่อรวมบิต "setgid":

sudo chmod 2750 /home/demo/public_html

เพื่อให้แน่ใจว่าไฟล์ใหม่ ๆ จะได้รับกลุ่ม 'www-data' หากคุณมีไดเรกทอรีย่อยคุณจะต้องเรียกใช้คำสั่งนั้นสำหรับแต่ละไดเรกทอรีย่อย (การอนุญาตประเภทนี้ใช้ไม่ได้กับ '-R') โชคดีที่ไดเรกทอรีย่อยใหม่จะถูกสร้างขึ้นโดยตั้งค่าบิต 'setgid' โดยอัตโนมัติ

หากเราต้องการอนุญาตให้เขียนเข้าถึง Apache เช่นไปยังไดเร็กทอรีอัพโหลดจากนั้นตั้งค่าการอนุญาตสำหรับไดเร็กทอรีนั้นดังนี้:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

ต้องตั้งค่าสิทธิ์เพียงครั้งเดียวเนื่องจากไฟล์ใหม่จะได้รับการกำหนดความเป็นเจ้าของที่ถูกต้องโดยอัตโนมัติ


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