คำสั่งแรกจะเปลี่ยนการอนุญาตของไฟล์ / ไดเรกทอรีที่มีอยู่แล้ว -d
ในคำสั่งที่สองมีความสำคัญต่อการตั้งค่าสิทธิ์เริ่มต้นก้าวไปข้างหน้าสำหรับไดเรกทอรีใด ๆ ซึ่งจะให้ชุดเริ่มต้นของ ACL ของไฟล์ใด ๆ ภายในไดเรกทอรีเหล่านี้
หมายเหตุ:ในทั้งสองกรณีคำสั่งจะทำงานซ้ำ ๆ ผ่าน-R
สวิตช์
เกี่ยวกับ-d
สวิตช์จากsetfacl
หน้าคน:
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the
input set are promoted to Default ACL entries. Default ACL entries
in the input set are discarded. (A warning is issued if that happens).
ข้อความที่ตัดตอนมานี้ยังอธิบายได้ค่อนข้างดี:
มี ACL สองประเภท: เข้าถึง ACL และ ACL เริ่มต้น ACL การเข้าถึงเป็นรายการควบคุมการเข้าถึงสำหรับไฟล์หรือไดเรกทอรีที่ระบุ ACL เริ่มต้นสามารถเชื่อมโยงกับไดเรกทอรีเท่านั้น หากไฟล์ภายในไดเร็กทอรีไม่มี ACL การเข้าถึงไฟล์จะใช้กฎของ ACL ดีฟอลต์สำหรับไดเร็กทอรี ACL เริ่มต้นเป็นตัวเลือก
ที่มา: 8.2 ตั้งค่าการเข้าถึง ACLs
ตัวอย่าง
สมมติว่าฉันมีโครงสร้างไดเรกทอรีนี้
$ tree
.
|-- dir1
| |-- dirA
| | `-- file1
| `-- fileA
`-- file1
2 directories, 3 files
ตอนนี้เรามาตั้งค่าการอนุญาตโดยใช้setfacl
คำสั่งแรกในคำถามของคุณ:
$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .
ซึ่งผลลัพธ์ในสิ่งต่อไปนี้:
$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
หากไม่มี-dR
คำสั่งทำงานที่นี่ไดเรกทอรีใหม่จะไม่ครอบคลุมโดย ACL ของคุณ:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x
แต่ถ้าเราลบไดเรกทอรีนี้และเรียกใช้setfacl -dR ...
คำสั่งและทำซ้ำการดำเนินการด้านบน:
$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .
ตอนนี้สิทธิ์ดูแตกต่างกันมาก:
$ getfacl dir1/ file1
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--
และตอนนี้ไดเรกทอรีที่สร้างขึ้นใหม่ของเราจะรับสิทธิ์ "เริ่มต้น" เหล่านี้:
$ mkdir dir2
$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x
มีสิทธิ์เหล่านี้ในสถานที่dir2
จะบังคับใช้สิทธิ์เหล่านี้ในไฟล์ภายในdir2
เช่นกัน:
$ touch dir2/fileA
$ getfacl dir2/fileA
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx #effective:rw-
user:samtest:rwx #effective:rw-
group::rwx #effective:rw-
mask::rw-
other::r--
app/cache
ที่มีไดเรกทอรีที่เรียกว่าdev
คำสั่งแรกจะถูกนำไปใช้กับที่ แต่ไม่ใช่ที่สอง? และหากภายหลังมีการเพิ่มไดเรกทอรีอื่น (เช่นprod
) คำสั่งที่สองจะตั้งค่าการอนุญาตหรือไม่ หากไม่ใช่กรณีนี้ฉันควรจะข้ามคำสั่งที่สองได้หรือไม่