Câu trả lời ngắn: Nếu bạn muốn mặt nạ với bit thực thi bật, bạn phải đặt nó rõ ràng bằng cách sử dụng setfacl
sau touch
. Bảo mật cấm thiết lập ngầm của nó.
setfacl -n -m m::rwx foo
"-N" để ngăn chặn tính toán lại mặt nạ (có thể không cần thiết).
"m :: rwx" đặt giá trị mặt nạ thành 'rwx'. Lưu ý rằng "m :: x" sẽ vô hiệu hóa tất cả các lần đọc và ghi.
Tôi không thể chỉ ra lý do tại sao mặt nạ là "rw-". Tôi giả sử rằng thư mục mặc định nơi touch
tạo tệp không thay đổi cho toàn bộ ví dụ OP.
Mục nhập thư mục cho 'foo' sẽ hiển thị 'root' của chủ sở hữu (vì lệnh sudo và nhóm 'vệ sĩ' vì thư mục có tập bit SUID. Các quyền sẽ được mặc định '-rw -... r--' với các quyền của nhóm trong thư mục '-... rx ...' (do các bit SUID hiển thị dưới dạng s nhỏ).
Tiếp đến là ACLes, nên là thư mục mặc định. Do ACL kế thừa, tôi sẽ không mong đợi bất kỳ ACLe nào được tạo và mặt nạ ACLE là mặc định của thư mục, 'rwx'.
Nhưng nếu chúng được tạo, tôi sẽ hy vọng ACLe mới sẽ được mồi từ mặc định, một lần nữa để mặt nạ ở 'rwx'. Nếu chúng không được mồi từ mặc định, điều này dường như sẽ đánh bại ý tưởng về ACL mặc định - ACL "mặc định" sẽ chỉ cung cấp người dùng có tên và ACL nhóm được đặt tên.
Điều này bây giờ đặt ra câu hỏi ACLe nên là gì. Tôi hy vọng nó sẽ là 'rwx' từ mục mặt nạ mặc định. Nhưng nó có thể được tạo ra với một mặt nạ trống, và sau đó tất cả các loại hợp pháp được áp dụng.
- Với một ACL dự kiến của người dùng :: rw-, group :: rx, other :: r--, nhóm: wheel: rwx, nhóm: Guard: rwx và mask ::: (unset), chúng tôi tham khảo tài liệu cho
setfacl
, giả sử các quy tắc tương tự áp dụng để tạo tập tin.
Có một điều khoản:
Nếu một ACL chứa các mục nhập của người dùng hoặc nhóm được đặt tên và không có mục mặt nạ nào tồn tại, một mục mặt nạ chứa các quyền giống như mục nhập nhóm được tạo.
Điều này sẽ đặt mặt nạ ACL thành "rx", nếu mục nhập nhóm ACL được tạo từ mục nhập thư mục tệp hoặc "rx" nếu mục nhập nhóm ACL đến từ ACL mặc định. (Cách Ether, trong trường hợp này, kết quả là như nhau.)
Ngoài ra còn có một điều khoản:
Nếu một ACL mặc định chứa các mục nhập người dùng được đặt tên hoặc các mục nhập nhóm được đặt tên và không có mục mặt nạ nào tồn tại, một mục mặt nạ chứa các quyền tương tự như mục nhập nhóm mặc định của ACL mặc định được thêm vào. ... các quyền của mục mặt nạ được điều chỉnh thêm để bao gồm sự kết hợp của tất cả các quyền bị ảnh hưởng bởi mục nhập mặt nạ.
Nếu quy tắc này được áp dụng, mặt nạ sẽ bắt đầu là "rx" (cùng logic) như mệnh đề trước), và sau đó nó sẽ được điều chỉnh thành "liên kết của tất cả các quyền bị ảnh hưởng bởi mục mặt nạ".
"Các quyền bị ảnh hưởng bởi mục nhập mặt nạ" không được xác định trong setfacl
tài liệu lệnh. Tài liệu POSIX ACL nói:
Mặt nạ là sự kết hợp của tất cả các quyền truy cập của nhóm sở hữu và tất cả các mục nhập của người dùng và nhóm.
Cho từ "union", là phụ gia, tôi sẽ đọc "kết hợp" là hợp lý hoặc-ing. Nói cách khác, nếu bất kỳ nhóm hoặc người dùng ACLe nào có quyền "x", mặt nạ sẽ chứa "x".
- Theo tất cả logic này, giá trị mặt nạ trong ví dụ của OP phải là 'rwx', không có phương tiện nào đi theo con đường logic nào.
Lý do trên phải được thiếu sót, vì x để thực thi không xuất hiện trong mặt nạ.
Do đó, phải có một số quy tắc về cách tính mặt nạ đã được "ẩn" khỏi các nguồn tài liệu phổ biến (hoặc chúng tôi đã tìm thấy một lỗi).
Kết luận của tôi là 'x' luôn bị xóa vô điều kiện và tài liệu này rất lỏng lẻo.
Thay đổi này có thể được thực hiện dựa trên lý do "bảo mật" - không có tệp nào được thực thi hoàn toàn, nhưng phải bật bit thực thi sau khi được tạo.