ฉันจะคัดลอก ACLs บน Mac OS X ได้อย่างไร


13

ส่วนที่คล้ายคลึงกันของยูนิกซ์สามารถคัดลอก ACL จากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งด้วย:

getfacl filename1 | setfacl -f - filename2

น่าเสียดายที่ Mac OS X ไม่มีคำสั่ง getfacl และ setfacl เนื่องจากมีการจัดการ ACL ไปยัง chmod chmod -E ยอมรับรายการของ ACLs บน stdin แต่ฉันไม่พบคำสั่งที่จะพ่น ACLs ออกมาในรูปแบบที่เหมาะสมกับ stdout สิ่งที่ดีที่สุดของฉันคือ:

ls -led filename1 | tail +2 | sed 's/^ *[0-9][0-9]*: *//' | chmod -E filename2

มีวิธีแก้ปัญหาที่แข็งแกร่งกว่านี้ไหม?

คำถามโบนัส: มีวิธีที่ดีที่จะทำใน Python โดยไม่ต้องใช้โมดูลใด ๆ ที่ไม่ได้จัดส่งด้วย 10.6 หรือไม่?


ดังนั้นก็ตอนนี้ในปี 2020 และยังคงมี MacOS ไม่มี/getfacl setfaclค่อนข้างน่าทึ่ง github.com/jvscode/getfaclอายุ 10 ปีฉันไม่สามารถใช้งานได้ serverfault.com/a/303752/104173ดูซับซ้อนและฉันไม่ชัดเจนว่าจะพยายามเปลี่ยนget/setfaclฟังก์ชันการทำงานหรือไม่ ฉันเข้าใจว่า macOS ไม่ใช่แพลตฟอร์มเซิร์ฟเวอร์ แต่ก็ยังสามารถประสบกับความปลอดภัยได้ มันคุ้มค่าที่จะเริ่มการสนทนานี้ใหม่บนapple.stackexchange.com ?
Johnny Utahh

คำตอบ:


8

ls -e พิมพ์ Access Control List (ACL) ที่เชื่อมโยงกับไฟล์หากมีอยู่ในเอาต์พุตแบบยาว (-l)

สิ่งนี้ให้ผลเช่น ...

drwxr-xr-x@ 19 localadmin   646B Aug  4 00:21  APPBUNDLE
0: user:localadmin allow add_file,add_subdirectory,writeattr,writeextattr,writesecurity
                   ⬆    ⇧                      ⇶                                     ⬆

โดยส่วนตัวฉันมี "ส่งออก" ในของฉัน ~/.bash_profile

export FILE_ALL="read,write,append,execute,delete,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"
export DIR_ALL="list,search,add_file,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown"

ที่ทำให้เป็นchmodไปได้ ...

sudo chmod + a "อนุญาต localadmin $ DIR_ALL" / APPBUNDLE

จากchmodหน้าคนเรามีข้อมูลแบบนี้ ... ที่บอกเป็นนัย ๆ ว่าคุณอาจจะทำอะไรบางอย่างเหมือนกับที่คุณอธิบาย ..

"ACL ถูกจัดการโดยใช้ส่วนขยายไปยังไวยากรณ์โหมดสัญลักษณ์แต่ละไฟล์มีหนึ่ง ACL ที่มีรายการเรียงลำดับของรายการแต่ละรายการอ้างอิงถึงผู้ใช้หรือกลุ่มและมอบหรือปฏิเสธชุดสิทธิ์ในกรณีที่ผู้ใช้และ กลุ่มที่มีชื่อเดียวกันชื่อผู้ใช้ / กลุ่มสามารถนำหน้าด้วย "ผู้ใช้:" หรือ "กลุ่ม:" เพื่อระบุประเภทของชื่อ "

chmod -E อ่านข้อมูล ACL จาก stdin ซึ่งเป็นรายการลำดับของ ACE โดยคั่นด้วยบรรทัดใหม่ หากข้อมูลแยกวิเคราะห์อย่างถูกต้องข้อมูลที่มีอยู่จะถูกแทนที่

นอกจากนี้ผมจะให้ตะโกนออกไปBatchModเป็น oldie แต่ Goodie สำหรับของ ACL เช่นเดียวกับTinkerToolSystem


สิ่งนี้ใช้งานได้สำหรับฉัน แต่ฉันต้องเปลี่ยนคำสั่ง chmod เป็น: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(เปลี่ยนชื่อผู้ใช้และallow)
E. Moffat


1

อาจจะมีลักษณะที่https://github.com/jvscode/getfacl


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