ฉันจะบังคับกลุ่มและการอนุญาตสำหรับไฟล์ที่สร้างขึ้นภายในไดเรกทอรีที่ระบุได้อย่างไร


27

สำหรับไฟล์ที่สร้างจากบัญชีtestuserในไดเรกทอรี / var / www ฉันต้องการให้มีg + rwxเป็นสิทธิ์และwww-dataเป็นกลุ่ม

ฉันจะบรรลุสิ่งนี้ได้อย่างไร

ฉันกำลังสร้างไฟล์ผ่าน SSH


1
วิธีการเป็นผู้ใช้ของคุณสร้างไฟล์? ผ่าน FTP stor/ appe? ผ่าน HTTP PUTหรือไม่ ผ่านบัญชีเชลล์? รายละเอียดเหล่านี้มีความสำคัญเนื่องจากมีผลกระทบอย่างมากต่อคำตอบที่เป็นไปได้และจำเป็นต้องอยู่ในคำถามของคุณ
JdeBP

ขอบคุณสำหรับการป้อนข้อมูล :) ฉันกำลังสร้างทุกอย่างผ่านทาง SSH
Mr.Gando

คำตอบ:


53

ในการตั้งกลุ่มให้setgidบิต:/var/www

chgrp www-data /var/www
chmod g+s /var/www

หากต้องการปรับไดเรกทอรีย่อยด้วย: find /var/www -type d -exec chmod g+s {} +

สิ่งนี้จะทำให้ไฟล์ที่สร้างขึ้นใหม่ทั้งหมดสืบทอดกลุ่มของพาเรนต์ไดเร็กทอรีแทนที่จะเป็นของผู้ใช้


การกำหนดสิทธิ์กลุ่มเริ่มต้นคุณจะต้องใช้ACL ของ ตั้งค่า "เริ่มต้น" ACL:

setfacl -m "default:group::rwx" /var/www

หากต้องการปรับไดเรกทอรีย่อยด้วย: find /var/www -type d -exec setfacl -m d:g::rwx {} +

หมายเหตุ: ระบบไฟล์ต้องเปิดใช้งานการสนับสนุน ACL บางครั้งก็เปิดตามค่าเริ่มต้น ในext3หรือext4คุณอาจได้รับ "ไม่รองรับการทำงาน" ซึ่งในกรณีนี้จะต้องเปิดใช้งานด้วยตนเอง:

  • สำหรับระบบไฟล์ที่เมาท์ในปัจจุบัน: mount -o remount,acl /

  • อย่างถาวร - หนึ่งในวิธีการด้านล่าง:

    • ที่ระดับ fstab: แก้ไข/etc/fstabให้มีaclในฟิลด์ตัวเลือก

    • ที่ระดับระบบไฟล์: tune2fs -o acl /dev/diskname


คุณไม่สามารถรับไดเรกทอรีย่อยด้วย chmod -R g + s / var / www? ดูเหมือนว่าคุณไม่จำเป็นต้องมีคำสั่ง find
bobpaul

4
@ บ๊อบพอล: ไม่เพราะchmodจะได้รับไฟล์ทั้งหมดด้วย
grawity

โปรดทราบว่าโดยเฉพาะอย่างยิ่งบางคำสั่งinstallจะจัดการเพื่อหลีกเลี่ยงไดเรกทอรีเริ่มต้น ACL
Ulrich Schwarz

@ grawity นี่เป็นคำตอบที่ดีมากและฉันแน่ใจว่ามีวิธีแก้ปัญหาสำหรับปัญหาของฉัน แต่ฉันไม่สามารถเข้าใจได้ ฉันมี/var/www/html/projectsโฟลเดอร์และเมื่อ www-data สร้างไฟล์มันจะมีrw-rw-rสิทธิ์ แต่เมื่อฉันทำอะไรในคอนโซลมันจะสร้างไฟล์rw-r--rขึ้นมา ฉันจะบังคับไฟล์ที่สร้างใหม่ให้มีrw-rw-rสิทธิ์ได้อย่างไร
lewis4u

@ lewis4u: ทั่วโลกหรือต่อไดเรกทอรี? ทั่วโลก (ดีต่อกระบวนการ) umaskสิทธิ์เริ่มต้นจะถูกควบคุมโดย สิทธิ์เริ่มต้นต่อไดเรกทอรีสามารถเปลี่ยนแปลงได้โดยใช้setfaclในการโพสต์หลัก
grawity

3

นี่อาจทำให้คนไม่กี่คนที่ติดอยู่กับคำตอบ 'grawity' ใน setgid หากกลุ่มของโฟลเดอร์นั้นแตกต่างจากของคุณคุณอาจต้องใช้ chmod เป็น root แต่คุณจะไม่ได้รับข้อผิดพลาดใด ๆ ที่ระบุว่าคุณต้องทำสิ่งนี้

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

ฉันดึงผมออกมาก่อนที่จะเจอสิ่งนี้ ขอบคุณ
AndrewStevens

0

กลุ่มของไฟล์ที่สร้างโดยผู้ใช้คือกลุ่มของผู้ใช้นั้น (ใน / etc / group) การอนุญาตถูกควบคุมโดยพารามิเตอร์ UMASK ดูสิ่งนี้

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