ACL tính toán các quyền hiệu quả trên một tệp như thế nào?


11

Tôi đã chạy lệnh sau để cấp quyền cho wheelnhóm rwxtrên các tệp và thư mục con mới được tạo:

[belmin@server1]$ ls -la
total 24
drwxr-sr-x+   2 guards guards  4096 Aug 27 15:30 .
drwxr-xr-x  104 root   root   12288 Aug 27 15:19 ..

[belmin@server1]$ sudo setfacl -m d:g:wheel:rwX .

[belmin@server1]$ getfacl .
# file: .
# owner: guards
# group: guards
# flags: -s-
user::rwx
group::r-x
group:wheel:rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:wheel:rwx
default:mask::rwx
default:other::r-x

Tuy nhiên, khi tôi tạo một tệp với quyền root, tôi không hoàn toàn rõ ràng về cách tính các effectivequyền:

[belmin@server1]$ sudo touch foo

[belmin@server1]$ getfacl foo
# file: foo
# owner: root
# group: guards
user::rw-
group::r-x                      #effective:r--
group:wheel:rwx                 #effective:rw-
group:guards:rwx                #effective:rw-
mask::rw-
other::r--

Ai đó có thể giải thích về điều này có nghĩa là gì?

Câu trả lời:


8

effectivequyền được hình thành bằng cách ANDing quyền thực tế (thực?) với mask. Vì masktệp của bạn là rw-, tất cả các effectivequyền đều xbị tắt bit.


5
Và mặt nạ đến từ đâu?
Tonin

Vì vậy, nó trông giống như nhân đôi: người ta chỉ có thể đặt chính xác các quyền thực sự thay vì thay đổi chúng bằng mặt nạ
Josef Klimuk

7

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 setfaclsau 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 touchtạo tệp không thay đổi cho toàn bộ ví dụ OP.

  1. 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ỏ).

  2. 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.

  1. 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 setfacltà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".

  1. 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.


Kiểm tra câu trả lời này unix.stackexchange.com/a/165304/146978 . Tôi nghĩ rằng nó đã giải thích rõ ràng lý do tại sao bit 'x' hầu như luôn bị thiếu.
Yifeng Mu
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.