setfacl: คำสั่งทั้งสองนี้เหมือนกันหรือไม่


10

ฉันมีสคริปต์การปรับใช้ (ขึ้นอยู่กับตัวพิมพ์ใหญ่) ที่ตั้งค่าการอนุญาตบนเซิร์ฟเวอร์เฉพาะสำหรับการติดตั้ง Symfony2 มันมีสองคำสั่งต่อไปนี้เพื่อทำสิ่งนี้สำหรับหลายไดเรกทอรี:

setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache

คำสั่งสองคำสั่งเหล่านี้อยู่ในไซต์ Symfony2 เพื่อแก้ไขสิทธิ์อย่างไรก็ตามสิ่งเหล่านี้ดูคล้ายกับฉันมาก ดังนั้นฉันจึงได้ดู manpages สำหรับsetfaclและจากสิ่งที่ฉันสามารถเข้าใจคำสั่งที่สองทำสิ่งที่คนแรกทำกับตัวเลือกเพิ่มเติม (ซึ่งฉันไม่เข้าใจ) คำถามของฉันคือสมมติฐานของฉันถูกต้อง? ถ้าเป็นเช่นนั้นจะมีผลเหมือนกันหรือไม่ถ้าฉันลบคำสั่งแรกออก

คำตอบ:


15

คำสั่งแรกจะเปลี่ยนการอนุญาตของไฟล์ / ไดเรกทอรีที่มีอยู่แล้ว -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) คำสั่งที่สองจะตั้งค่าการอนุญาตหรือไม่ หากไม่ใช่กรณีนี้ฉันควรจะข้ามคำสั่งที่สองได้หรือไม่
Hosh Sadiq

1
@HoshSadiq - ไม่มี-Rคำสั่งซ้ำดังนั้นการอนุญาตใช้ ตัว-dป้องกันถ้ามีคนกำลังสร้างไดเร็กทอรีหรือย้ายบางไดเร็กทอรีไปยังทรีในภายหลังเพื่อที่จะให้ ACL นี้ใช้เช่นกัน
slm

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