Như Gilles chỉ ra, các setfacl
quyề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ẽ rw
trừ 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ụ gcc
cho các tệp thực thi và cp
nế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 setfacl
cho phép X
chí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 setfacl
bạ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 '{}' ';'