Làm cách nào để sao chép ACL trên Mac OS X?


13

Hầu hết các dẫn xuất unix có thể sao chép ACL từ tệp này sang tệp khác với:

getfacl filename1 | setfacl -f - filename2

Thật không may, Mac OS X không có lệnh getfacl và setfacl, vì chúng đã xử lý ACL thành chmod. chmod -E chấp nhận một danh sách các ACL trên stdin, nhưng tôi không tìm thấy một lệnh nào sẽ nhổ ACL theo một định dạng phù hợp trên thiết bị xuất chuẩn. Điều tốt nhất tôi nghĩ ra là:

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

Có một giải pháp mạnh mẽ hơn?

Câu hỏi bổ sung: có một cách hay để làm điều đó trong Python, mà không sử dụng bất kỳ mô-đun nào không được cung cấp với 10.6?


Vì vậy, bây giờ là năm 2020 và macOS vẫn chưa có getfacl/ setfacl. Khá đáng chú ý. github.com/jvscode/getfacl đã 10 tuổi Tôi chưa thể làm cho nó hoạt động. serverfault.com/a/303752/104173 có vẻ phức tạp và tôi không rõ liệu nó có cố thay thế get/setfaclchức năng hay không. Tôi hiểu rằng macOS không phải là một nền tảng máy chủ, nhưng nó vẫn có thể gặp phải sự xâm nhập bảo mật. Có đáng để bắt đầu lại cuộc trò chuyện này trên apple.stackexchange.com không?
Johnny Utahh

Câu trả lời:


8

ls -e In Danh sách điều khiển truy cập (ACL) được liên kết với tệp, nếu có, ở đầu ra (-l) dài.

điều này mang lại một kết quả như ...

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

Cá nhân tôi có "xuất khẩu" trong ~/.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"

điều đó làm cho chmodcó thể ...

sudo chmod + một "cho phép localadmin $ DIR_ALL" / APPBUNDLE

Từ chmodtrang người đàn ông, có một chút thông tin này ... gợi ý rằng thực sự có thể làm được điều gì đó giống như bạn mô tả ..

"ACL được xử lý bằng cách sử dụng các phần mở rộng cho ngữ pháp chế độ biểu tượng. Mỗi tệp có một ACL, chứa danh sách các mục nhập theo thứ tự. Mỗi mục nhập liên quan đến người dùng hoặc nhóm và cấp hoặc từ chối một bộ quyền. Trong trường hợp người dùng và người dùng nhóm tồn tại cùng tên, tên người dùng / nhóm có thể được thêm tiền tố với "user:" hoặc "group:" để chỉ định loại tên. "

chmod -E Đọc thông tin ACL từ stdin, như một danh sách tuần tự của các ACE, được phân tách bằng các dòng mới. Nếu thông tin phân tích chính xác, thông tin hiện có sẽ được thay thế.

Ngoài ra, tôi sẽ hét to với BatchMod , một người già , nhưng là một người tốt cho ACL, cũng như TinkerToolSystem .


Điều này làm việc cho tôi, nhưng tôi đã phải thay đổi lệnh chmod thành: sudo chmod +a "localadmin allow $DIR_ALL" /APPBUNDLE(chuyển tên người dùng và tên allow)
E. Moffat


1

Có thể có một cái nhìn tại https://github.com/jvscode/getfacl .


Tham khảo tốt. Than ôi, dự án này dường như đã 10 tuổi, không có setfacl(chỉ getfacl) và getfaclchức năng dường như khá hạn chế. Thật không may, tôi không tìm thấy một giải pháp tốt hơn.
Johnny Utahh
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.