Làm cách nào để sử dụng chmod trên máy Mac để tạo các tệp mới kế thừa quyền truy cập thư mục mẹ?


23

Tôi đang ở trên Mac. Tôi muốn làm cho nó để bất kỳ tệp / thư mục mới nào được tạo trong một thư mục cụ thể có cùng quyền (không phải nhóm, đã được xử lý) như các thư mục mẹ. Trên Linux, tôi thường sử dụng setfacl, nhưng có vẻ như chmod trên Mac có thể làm được những gì tôi đang tìm kiếm. Tôi đã đọc qua trang man cho chmod nhưng tôi vẫn không thể tìm ra cách định dạng đúng lệnh để có được thứ tôi muốn.


Tôi muốn các tập tin / thư mục mới có thể đọc được và ghi được.

Câu trả lời:


33

Đầu tiên, một chút nền tảng để giải thích những gì đang diễn ra: Các tệp trong OS X có thể có hai loại cài đặt quyền khác nhau được áp dụng cho chúng: POSIX và ACL.

Các tệp luôn luôn (tốt, hầu như luôn luôn) được áp dụng quyền POSIX, bao gồm chủ sở hữu, nhóm và những người khác (với sự kết hợp giữa đọc, ghi và thực thi cho từng quyền). Không có cách nào để kiểm soát sự kế thừa của các quyền POSIX: các mục mới luôn được sở hữu bởi bất kỳ người dùng nào đã tạo ra chúng, việc gán nhóm được kế thừa từ thư mục mà chúng đang ở và quyền truy cập được xác định bởi ô (luôn luôn là khá nhiều: chủ sở hữu được quyền truy cập đầy đủ, nhóm và những người khác chỉ đọc + thực thi cho các thư mục). Vì vậy, quyền POSIX sẽ không hoạt động cho những gì bạn đang cố gắng làm.

Các tập tin cũng có thể được áp dụng danh sách kiểm soát truy cập (ACL). Đây là danh sách các mục kiểm soát truy cập (ACE), mỗi mục áp dụng cho người dùng hoặc nhóm, chỉ định các loại quyền truy cập (rất chi tiết), cho dù chúng có được phép hoặc bị từ chối hay không và liệu ACE cũng nên được sao chép vào các mục được tạo bên trong thư mục. Đó là phần cuối cùng làm cho điều này hữu ích cho bạn; bạn cần tạo một ACE trên thư mục chỉ định nhóm bạn muốn, các loại quyền truy cập bạn muốn và kế thừa đầy đủ.

chmod trên OS X có thể thao tác các ACE với các tùy chọn quyền + a, -a, v.v. Nếu tôi hiểu những gì bạn muốn, bạn sẽ sử dụng cái này (với tên nhóm và đường dẫn thư mục được thay thế) để tạo ra ACE:

chmod +a "group:examplegroup allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" /path/to/folder

Lưu ý rằng sự kế thừa không phải là "trực tiếp", tức là nó không áp dụng cho các mục được tạo trước khi bạn gán ACE và nó không áp dụng cho các mục được tạo ở nơi khác và sau đó được chuyển vào thư mục. Bạn có thể áp dụng nó cho các nội dung hiện có bằng cách sử dụng -R ( chmod -R +a ...). Tôi không biết một cách nào (ngoại trừ các công cụ quản trị máy chủ của Apple) để buộc kế thừa các mục được chuyển vào thư mục.


Cảm ơn lời giải thích tuyệt vời. Tôi vừa mới thử nó và nó vẫn chỉ tạo một tệp mới với người dùng đọc / ghi, mọi người khác đều đọc quyền. Thư mục mẹ (ngoài trời) được đặt thành 775 quyền với người dùng của tôi (jhicks) là chủ sở hữu và _www là nhóm. Tôi đã thêm mình vào nhóm _www. drwxrwxr-x + 13 jhicks _www 438B ngày 16 tháng 11 09:47 ngoài trời Tôi đã chạy lệnh của bạn như sau: chmod + a "nhóm: thư mục_inherit "ngoài trời
Jeremy Hicks

ls -lchỉ hiển thị quyền POSIX (mặc dù "+" sau các quyền cho biết rằng có ACL hiện diện). Sử dụng ls -leđể hiển thị ACL là tốt.
Gordon Davisson

Nếu tên nhóm có một khoảng trắng trong đó, bạn có thể sử dụng: làm dấu phân cách. Ví dụ: "nhóm: nhóm của tôi có khoảng trắng: cho phép"
Doug Richardson

Theo chmod +a ...lệnh, sau đó tôi tạo một abc.txt trong thư mục. Chuyển sang người dùng khác và chỉnh sửa bằng TextEdit, tệp được chỉ định là Đã khóa và không thể chỉnh sửa.
ohho

Tôi đã từng chơi một số trò này Tôi nghĩ rằng bạn buộc phải thừa kế với + ai
Robin

4

Hãy thử thêm -Rvào lệnh của @ gordon, như vậy:

chmod -R +a "group:_www allow list,add_file,search,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,file_inherit,directory_inherit" outdoors

Các -Rtùy chọn di chúc (như đã nêu ở đây ):

Recurse: Thay đổi chế độ phân cấp tệp gốc trong các tệp thay vì chỉ các tệp.

Thay đổi cấu trúc phân cấp tệp dường như là những gì bạn đang tìm kiếm (đối với các tệp, thư mục mới, v.v.).

Bạn cũng có thể kiểm tra bài đăng Apple.SE này , bao gồm một tình huống tương tự như của bạn (ngoại trừ liên quan đến thư mục dùng chung), yêu cầu xử lý sudoở mặt trước.


4

Điều này (-R) không phải là điều mà hầu hết mọi người tìm cách làm; hầu hết thời gian họ muốn thay đổi ACL trên thư mục trên cùng và làm một điều gì đó kỳ diệu để buộc tất cả các đối tượng có chứa các cờ theo ACL mà họ đã chỉ định trên thư mục gốc của cây con đó. Điều này thanh lịch hơn nhiều vì các ACL trên các đối tượng sẽ sắp xếp các ACE được kế thừa theo chính sách.

Và vâng, tôi đã phải viết một kịch bản python để làm điều này, tôi cũng không tìm thấy bất cứ điều gì phù hợp.


2
Bạn có quan tâm để chia sẻ (ví dụ như trên một ý chính ? Nếu bạn không phiền, tôi nghĩ đó là một cử chỉ tốt đẹp.
myhd


0

Trên máy Mac, hãy thử sử dụng Path Downloader , giúp dễ dàng đặt ACL và POSIX. Nếu bạn đang lưu trữ WordPress trên máy chủ Mac, bạn cũng cần phải đặt define('FS_METHOD', 'direct');trong wp-config.php để cài đặt plugin và nâng cấp sẽ không hỏi bạn chi tiết về FTP.

Vì vậy, về cơ bản, bạn giữ các quyền POSIX mặc định và thêm người dùng _www (không phải nhóm) vào ACL, sau đó nhấp vào Quyền truyền bá trong cửa sổ ACL.

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.