Tôi tìm thấy ví dụ này, có tiêu đề: ACL và MASK trong linux . Trong bài viết này, các ví dụ sau đây được trình bày mà tôi nghĩ giúp tìm hiểu cách ACL và umask
tương tác với nhau.
Lý lịch
Khi một tệp được tạo trên hệ thống Linux, các quyền mặc định 0666
được áp dụng trong khi khi thư mục được tạo, các quyền mặc định 0777
được áp dụng.
ví dụ 1 - tập tin
Giả sử chúng ta đặt ô của mình thành 077 và chạm vào một tệp. Chúng ta có thể sử dụng strace
để xem những gì thực sự xảy ra khi chúng ta làm điều này:
$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile
Trong ví dụ này, chúng ta có thể thấy rằng cuộc gọi hệ thống open()
được thực hiện với các quyền 0666, tuy nhiên khi umask 077
hạt nhân được áp dụng thì các quyền sau sẽ bị xóa ( ---rwxrwx
) và chúng ta còn lại với rw-------
aka 0600.
ví dụ - 2 thư mục
Khái niệm tương tự có thể được áp dụng cho các thư mục, ngoại trừ thay vì các quyền mặc định là 0666, chúng là 0777.
$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777) = 0
drwxr-xr-x 2 saml saml 4096 Jul 9 10:55 testdir
Lần này chúng tôi đang sử dụng mkdir
lệnh. Các mkdir
lệnh sau đó được gọi là cuộc gọi hệ thống mkdir()
. Trong ví dụ trên, chúng ta có thể thấy rằng mkdir
lệnh được gọi là mkdir()
cuộc gọi hệ thống với các quyền mặc định 0777
( rwxrwxrwx
). Lần này với một loạt 022
các quyền sau đây đã bị xóa ( ----w--w-
), vì vậy chúng tôi còn lại 0755 ( rwxr-xr-x
) khi các thư mục được tạo.
ví dụ 3 (Áp dụng ACL mặc định)
Bây giờ, hãy tạo một thư mục và chứng minh điều gì xảy ra khi ACL mặc định được áp dụng cho nó cùng với một tệp bên trong nó.
$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir
$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx #effective:rwx
group::r-x #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx #effective:rwx
default:group::r-x #effective:r-x
default:mask::rwx
default:other::r-x
Bây giờ hãy tạo tập tin , aclfile
:
$ strace -s 128 -fvTttto luvly touch acldir/aclfile
# view the results of this command in the log file "luvly"
$ less luvly
Bây giờ có được quyền của tệp mới được tạo:
$ getfacl --all-effective acldir/aclfile
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
Chú ý mặt nạ mask::rw-
,. Tại sao nó không mask::rwx
giống như khi thư mục được tạo?
Kiểm tra luvly
tệp nhật ký để xem các quyền mặc định đã được sử dụng để tạo tệp:
$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>
Đây là nơi nó có một chút khó hiểu. Với mặt nạ được đặt thành rwx
khi thư mục được tạo, bạn sẽ mong đợi hành vi tương tự cho việc tạo tệp, nhưng nó không hoạt động theo cách đó. Đó là vì kernel đang gọi open()
hàm với quyền mặc định là 0666
.
Tóm tắt
- Các tệp sẽ không được cấp quyền thực thi (che dấu hoặc có hiệu lực). Không quan trọng chúng tôi sử dụng phương pháp nào: ACL, umask, hoặc mask & ACL.
- Các thư mục có thể có quyền thực thi, nhưng nó phụ thuộc vào cách đặt trường mặt nạ.
- Cách duy nhất để đặt quyền thực thi cho một tệp nằm dưới quyền ACL là đặt thủ công chúng bằng cách sử dụng
chmod
.
Người giới thiệu
mask::rw-
. Nhưng đó không thực sự là câu hỏi của bạn, đúng không?