Đặt các ACL khác nhau trên các thư mục và tệp


15

Tôi muốn thiết lập quyền mặc định cho chia sẻ tệp để mọi người đều có thể rwxtất cả các thư mục và để tất cả các tệp mới được tạo rw.

Mọi người đang truy cập vào chia sẻ này đều thuộc cùng một nhóm, vì vậy đây không phải là vấn đề đáng lo ngại.

Tôi đã xem xét việc này thông qua ACL mà không thay đổi tất cả các nhiệm vụ của người dùng và như vậy. Dưới đây là những lời mời hiện tại của tôi:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

Vấn đề của tôi là khi tôi muốn tất cả các mới được tạo ra thư mục con được rwx, tôi chỉ muốn vừa được tạo ra file được rw.

Có ai có một phương pháp tốt hơn để đạt được kết quả cuối cùng mong muốn của tôi không? Có một số cách để đặt ACL trên các thư mục riêng biệt với các tệp, trong một tĩnh mạch tương tự chmod +xso với chmod +X?

Cảm ơn

Câu trả lời:


12

Như Gilles chỉ ra, các setfaclquyền mặc định chỉ định các quyền tối đa, về cơ bản thay thế umask. Vì vậy, các tệp mới được tạo sẽ rwtrừ khi ứng dụng tạo tệp được yêu cầu đặc biệt để có thể thực thi được.

$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--

$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x                         #effective:r--
group:mygroup:rwx                  #effective:rw-
mask::rw-
other::r--

Lưu ý các perm hiệu quả ở trên. (Chỉ có một vài chương trình sẽ yêu cầu thiết lập bit thực thi trên các tệp mà nó tạo ra, ví dụ gcccho các tệp thực thi và cpnếu tệp được sao chép có thể thực thi được.)

Hay bạn có nghĩa là lệnh setfacl đầu tiên hoạt động theo cách bạn muốn, nhưng lệnh thứ hai thì không? Nói cách khác, bạn đang tìm cách sửa chữa các quyền trên các tệp cũ, đảm bảo rằng các thư mục có thể duyệt được mà không cho các tệp thông thường khác thực thi quyền?

Phiên bản của tôi setfaclcho phép Xchính xác như bạn muốn, ví dụ:

setfacl g:mygroup:rwX

$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513    4 drwxr-xr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-r--r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxr-xr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rwxr--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513    4 drwxrwxr-x   3 myuser    myuser        4096 Dec 22 01:56 test
107539    0 -rw-rw-r--   1 myuser    myuser           0 Dec 22 01:56 test/oldfile
107529    4 drwxrwxr-x   2 myuser    myuser        4096 Dec 22 01:56 test/olddir

Nếu phiên bản của setfaclbạn không hỗ trợ điều đó, tại sao không sử dụng find?

ghi đè quyền, đặt chúng thành rw cho tệp và rwx cho thư mục

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

đặt quyền ACL của nhóm dựa trên quyền của nhóm hiện có

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Bạn có thể muốn kiểm tra xem mặt nạ nhóm có cung cấp quyền hiệu quả không. Nếu không, bạn cũng sẽ phải chạy cái này:

$ find . -type d -exec chmod g+rwX '{}' ';'

4

Đối với những người đọc trong tương lai, để sử dụng setfacltrên các tệp / thư mục hiện có mà không cần thêm bit thực thi vào tệp của bạn, giải pháp là phần này trong câu trả lời của @ Mikel :

Phiên bản setfacl của tôi cho phép X chính xác như bạn muốn, ví dụ:

setfacl g:mygroup:rwX

Đoạn trích liên quan từ setfacltài liệu :

Trường perms là sự kết hợp của các ký tự chỉ ra các quyền: read (r), write (w), exec (x), chỉ thực thi nếu tệp là một thư mục hoặc đã có quyền thực thi cho một số người dùng (X) .


2

Theo như tôi hiểu về các ACL của Linux, setfacl -Rdm g:mygroup:rwx share_namethực hiện chính xác những gì bạn muốn. Thí nghiệm:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

Sau đó, như một người dùng khác trong nhóm mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

Chuyện gì đang xảy ra vậy?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

ACL hiệu quả mygrouplà kết quả của và là ACL_GROUPmục nhập cho mygroup( rwx) với mục nhập ACL_MASK ( rw-).

Các acl (5) người đàn ông giải thích cách tính này dưới “Truy cập các thuật toán kiểm tra”. Nó không giải thích làm thế nào ACL_MASKcác mục được tạo ra, nhưng trong thực tế điều đúng dường như xảy ra.

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.