ฉันสามารถแทนที่ umask ของฉันโดยใช้ ACL เพื่อสร้างไฟล์ทั้งหมดในไดเรกทอรีที่กำหนดให้โลกอ่านได้หรือไม่


12

สมมติว่า umask ของฉันคือ 0077

ฉันมีไดเรกทอรีfooซึ่งฉันต้องการให้ใช้การอนุญาตพิเศษกับมัน ไฟล์ทั้งหมดที่ฉันสร้างขึ้นfooควรอ่านได้ทั่วโลกและไดเรกทอรีทั้งหมดควรอ่านได้และปฏิบัติได้

ปัจจุบันถ้าฉันสร้างไฟล์มันจะเป็น 0600 และไดเรกทอรีจะเป็น 0700:

$ cd foo/
$ touch file
$ mkdir directory
$ ls -l
drwx------ 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw------- 1 nfm nfm    0 2012-01-12 16:15 file

ฉันต้องการไฟล์เป็น 0644 และไดเรกทอรี 0755 โดยไม่คำนึงถึง umask ของฉัน:

drwxr-xr-x 2 nfm nfm 4096 2012-01-12 16:16 directory
-rw-r--r-- 1 nfm nfm    0 2012-01-12 16:15 file

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


คุณไม่ได้ลอง googling "umask ต่อ directory" ใช่ไหม? ถ้าฉันมีสิทธิ์ที่ฉันต้องการ downvote คุณนี้เพราะตีสามคือทุบตีสับที่จะทำสิ่งที่คุณต้องการ (รับเฉพาะสำหรับคุณไม่ได้สำหรับผู้ใช้งานอื่น.)
เบร็ท Dikeman

3
@BeeDee ฉันเห็นว่า ฉันสนใจวิธีอื่นในการทำหวังว่าจะใช้ ACL ฉันไม่ควรตรวจสอบ / เปลี่ยน umask ของฉันในทุก cd หรือแทนที่ฟังก์ชั่นทุบตี
stickmangumby

คำตอบ:


15

ใช่ acl สามารถทำได้

  1. ตรวจสอบให้แน่ใจว่าระบบไฟล์ของคุณติดตั้งด้วย acl mountการตรวจสอบนี้พิมพ์ คุณจะเห็น 'acl' ปรากฏอยู่ในรายการการอนุญาตอื่นเช่น:

    /dev/sda1 on / type ext4 (rw,errors=remount-ro,acl)
    

    หากไม่ได้ติดตั้งด้วย acl ให้เปิด / etc / fstab และเพิ่ม 'acl' ลงในรายการตัวเลือก:

    # /etc/fstab: static file system information.
    #
    # <file system> <mount point>   <type>   <options>       <dump>  <pass>
    /dev/sda1       /          ext3     noatime,errors=remount-ro,acl 0       1
    

    ตอนนี้ติดตั้งระบบไฟล์ที่กำลังรันอีกครั้งด้วยตัวเลือกใหม่:

    mount -v -o remount /
    
  2. ติดตั้งยูทิลิตี้ acl บน Ubuntu / debian นี่คือ:

    sudo apt-get install acl
    
  3. เพื่อนใหม่ของคุณเป็นและsetfacl getfaclใช้setfaclเพื่อเปลี่ยน acl เริ่มต้นสำหรับไดเรกทอรี:

    setfacl -d -m o:r foo
    

    -dตั้งค่าเริ่มต้น-mปรับเปลี่ยน acl และo:rให้สิทธิ์ในการอ่าน "อื่น ๆ " การตั้งค่าเริ่มต้นในไดเรกทอรีนั้นเทียบเท่ากับการตั้งค่าsetgidในไดเรกทอรี แต่แทนที่จะสร้างไฟล์ใหม่ที่สืบทอดกลุ่มพวกเขาจะสืบทอด acl ร่วมกัน setgid และ acl สามารถมีประสิทธิภาพเพราะคุณสามารถให้สิทธิ์เริ่มต้นกับกลุ่มและรับไฟล์ที่สร้างขึ้นใหม่เพื่อเป็นของกลุ่มนั้นสำหรับ umask ตามไดเรกทอรีกลุ่มที่มีประสิทธิภาพ

  4. ตรวจสอบงานของคุณ: ls -lตอนนี้ควรแสดงเครื่องหมาย "+" พิเศษเพื่อระบุว่ามี acl เพิ่มเติมจากการอนุญาตไฟล์มาตรฐาน

    % ls -la foo/
    drwxr--r--+
    

    คุณจะได้รับข้อมูลรายละเอียดใน ACL getfaclโดยใช้

    % getfacl foo
    # file: foo
    # owner: you
    # group: you
    user::rwx
    group::r--
    other::r--
    default:user::rwx
    default:group::---
    default:other::r--
    

1
ดูเหมือนจะไม่ได้ผลสำหรับฉัน setfaclและgetfaclจะกลับมาส่งออกที่คาดหวัง แต่เพียงไดเรกทอรี (ไม่ใช่ไฟล์) ภายในไดเรกทอรีแม่จะสืบทอด acl และแม้แล้ว umask ของฉันคือการมีความสำคัญมากกว่าค่าเริ่มต้น (ถ้าพวกเขาจะไม่สามารถอ่านได้ในโลกที่default:other::r--ไม่อนุญาตให้ผู้ใช้อื่น เข้าถึงพวกเขา) ฉันคิดถึงบางสิ่งที่ชัดเจนหรือไม่
stickmangumby

สิ่งหนึ่งที่ฉันพบ (อาจเป็นปัญหา): facl ดูเหมือนจะใช้ตัวแรกของ (ผู้ใช้กลุ่มอื่น ๆ ) ที่ผู้ใช้ปัจจุบันตรงกัน นั่นคือถ้าคุณอยู่ในกลุ่มของไฟล์ acl สำหรับกลุ่มจะถูกประมวลผลไม่ใช่ acl สำหรับกลุ่มอื่น acl ควรยังคงสืบทอดถ้าคุณใช้ไดเรกทอรีด้วย -d, แม้ว่า ....
user67641

1
อืมเพิ่งลองอีกครั้งและทุกอย่างทำงานได้ดี ขออภัยไม่แน่ใจว่าฉันทำผิดครั้งแรก! ขอบคุณ :)
stickmangumby โดย

3

คุณสามารถบังคับ umask สำหรับไดเรกทอรีได้ด้วยการตั้งค่า mask ACL-property เช่นนี้:

setfacl -d -m mask:07 .

-4

เพียงติดตั้งOnDirและกำหนดค่าอย่างเหมาะสมตามความต้องการของคุณ ฉันได้ตอบปัญหาที่คล้ายกันอยู่ที่นี่


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