Làm thế nào để umask ảnh hưởng đến ACL?


12

Ai đó có thể giải thích cho tôi về việc umaskảnh hưởng đến mặt nạ mặc định của các tệp mới được tạo nếu ACL được kích hoạt không? Có một số tài liệu về điều này?

Thí dụ:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

Tôi mong chờ mask:rwx. Trên thực tế sau khi thiết lập umaskđể ví dụ 027tôi nhận được hành vi mong đợi.


Với số ô 077, bạn sẽ nhận được a mask::rw-. Nhưng đó không thực sự là câu hỏi của bạn, đúng không?
slm

@slm Đây là một phần câu hỏi của tôi. Tôi muốn biết làm thế nào mặt nạ của các tập tin mới phụ thuộc vào ô. Tôi đã khá ngạc nhiên khi với 077 tôi nhận được mask::rw-và không phải mask::rwxlà mặt nạ mặc định của thư mục.
jofel

OK, tôi đang cập nhật câu trả lời của mình ngay bây giờ với các ví dụ sẽ giúp làm rõ điều này. Hãy cho tôi một vài phút.
slm

Câu hỏi này liên quan chặt chẽ.
jofel

Câu trả lời:


10

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à umasktươ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 077hạ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 mkdirlệnh. Các mkdirlệ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 mkdirlệ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 022cá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::rwxgiống như khi thư mục được tạo?

Kiểm tra luvlytệ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 rwxkhi 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


@jofel - Hãy cho tôi biết nếu điều này có ý nghĩa.
slm

@sIm cảm ơn bạn rất nhiều vì câu trả lời chi tiết của bạn. Nó mang tôi đến gần hơn với vấn đề thực tế của tôi: Sự cho phép của nhóm trong tòa nhà chmod ảnh hưởng đến mặt nạ của tệp ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx). Có lẽ tôi nên bắt đầu một câu hỏi mới về điều này ...
jofel

@jofel - vâng, nghe có vẻ như một câu hỏi khác.
slm

@sIm và nó đã được trả lời ở đây .
jofel

"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 ..." - điều đó không chính xác, vì nó tùy thuộc vào ứng dụng tạo.
ilkkachu

2

vì mục đích bảo mật, hệ điều hành linux không cho phép tạo tệp tự động với bit thực thi. Điều này là để ngăn chặn những kẻ tấn công mạng viết chương trình vào các tệp như vậy và thực thi chúng nếu chúng có quyền truy cập vào máy chủ của bạn. Đó chỉ là một biện pháp phòng ngừa an toàn. Bạn sẽ mãi mãi phải tự thiết lập bit thực thi trên các tệp sau khi tạo chúng bằng tiện ích chmod

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.