Cách đặt ACL mặc định của Linux khác nhau cho các thư mục và tệp


9

Tôi có một số ACL được định nghĩa trên một thư mục như vậy:

# owner: root
# group: root
user::rwx
group::r--
mask::r-x
other::r--
default:user::r--
default:group::r--
default:mask::r-x
default:other::r--

Tôi muốn bất kỳ tập tin mới nào được tạo trong thư mục đó là u: apache: r-- và bất kỳ thư mục mới nào là u: apache: rx. Làm cách nào để xác định ý định sử dụng ACL?

Tôi đã thử -dm u:apache:rXvà nó dường như không làm gì khác so với chỉrx

overt htdocs # getfacl .
# file: .
# owner: root
# group: root
user::rwx
user:apache:r--
group::r--
mask::r-x
other::r--
default:user::r--
default:user:apache:r--
default:group::r--
default:mask::r--
default:other::r--

overt htdocs # setfacl -dm u:apache:rx .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

overt htdocs # rm blah.txt
overt htdocs # setfacl -dm u:apache:rX .
overt htdocs # touch blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r-x                 #effective:r--
group::r--
mask::r--
other::r--

Quyền vốn X dường như chỉ hữu ích cho việc đặt quyền hiện tại, không phải để đặt quyền mặc định:

overt htdocs # setfacl -x u:apache blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
group::r--
mask::r--
other::r--

overt htdocs # setfacl -m u:apache:rX blah.txt
overt htdocs # getfacl blah.txt
# file: blah.txt
# owner: root
# group: root
user::r--
user:apache:r--
group::r--
mask::r--
other::r--

Câu trả lời:


6

Chà, nhưng ví dụ của bạn làm chính xác những gì bạn muốn;)

Nhìn vào cái thứ hai:

overt htdocs # setfacl -dm u: apache: rx.
vượt qua htdocs # chạm blah.txt
vượt qua htdocs # getfacl blah.txt
# tệp: blah.txt
# chủ sở hữu: root
# nhóm: root
người dùng :: r--
người dùng: apache: rx #effective: r--
nhóm :: r--
mặt nạ :: r--
khác :: r--

Dòng quan trọng là:

user:apache:r-x #effective:r--

Mặc dù acl được đặt thành rx nhưng nó thực sự là r-- cho các tệp. Đó là vì mặt nạ.

Và mặt nạ sẽ luôn chỉ rw- cho các tệp nếu người dùng tạo nó với quyền rw- cho người dùng. (Tôi không chắc chắn 100% nhưng mặt nạ không thể hạn chế hơn các quyền cơ bản).

Vì vậy, hiệu quả bạn nhận được r-- cho các tập tin và rx cho các thư mục.
Bởi vì thư mục đã tạo sẽ có người dùng: rx -> mask sẽ là rx -> quyền hiệu quả sẽ là rx.
Đối với các tệp: chúng sẽ có r-- vì vậy mặt nạ sẽ là r-- và các quyền hiệu quả cho ACL cũng sẽ là r--. (Nếu bạn tạo một tệp và cấp cho người dùng quyền :: rx, thì mặt nạ sẽ được sửa đổi và người dùng mẫu acl cũng sẽ nhận được x)


Hoàn toàn bỏ lỡ #effectivevăn bản! Cảm ơn đã giải thích làm thế nào các mặt nạ có hiệu lực quyền.
joshperry

2

Thật không may, không có cách nào để làm điều này với Linux ACL. Đúng là mặt nạ sẽ xuất hiện để làm chính xác những gì bạn muốn, cho đến khi có quyền hiệu quả. Nhưng lần tới khi bạn thực hiện một thao tác tính toán lại mặt nạ quyền, bam , tất cả các tệp của bạn sẽ được thực thi.

Bạn cũng có thể từ chức chính mình để mong tất cả các tệp trong ACL có thể được thực thi. Đó thực sự chỉ là một tiện ích chứ không phải là một tính năng bảo mật và miễn là bạn không đặt các thư mục đó trong $ PATH của mình, thì đó không phải là vấn đề. Nếu nó vẫn làm phiền bạn, lựa chọn duy nhất là đặt các thư mục được điều khiển ACL của bạn trên một hệ thống tệp được gắn mà không có tùy chọn thực thi.


1

-d (hoặc --default) được sử dụng để đặt mặc định trên thư mục để những thứ được tạo trong đó thừa hưởng các perm (như bạn dường như đang làm).

Dưới đây là một cái nhìn tổng quan nhanh chóng. http://www.vanemery.com/Linux/ACL/linux-acl.html#default

Không thể có các tệp có một mặc định và các thư mục có một mặc định khác.

Bạn có thể chạy một tập lệnh ra khỏi cron thực hiện setfacl trên tất cả các thư mục mỗi phút - mặc dù đó là lý tưởng của một giải pháp.

tìm / đường dẫn / đến / đầu / dir -type d -exec setfacl -dm u: apache: rx {} \;

hoặc là

tìm / đường dẫn / đến / đầu / dir -type d | xargs setfacl -dm u: apache: rx


1

Bài đăng này trên ACL và Mặt nạ thực sự giúp tôi hiểu làm thế nào để làm những gì tôi muốn, và tại sao.

Một phần còn thiếu trong sự hiểu biết của tôi là khi tạo một tệp, kernel sử dụng bộ quyền mặc định là 0666 và cho các thư mục mới 0777. Vì vậy, theo mặc định các thư mục sẽ có tập bit thực thi (traverse).

Mặt nạ ACL về cơ bản là một cách để đặt một umaskcấp độ thư mục / tệp / người dùng.

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.