Câu hỏi "Umask" là gì và nó hoạt động như thế nào?


Tôi tin rằng umask là cái gì đó điều khiển quyền tệp, nhưng không hoàn toàn hiểu nó.

Sau khi chạy umask 0644 trong một thiết bị đầu cuối, Tôi không thể đọc các tệp tôi tạo bằng trình chỉnh sửa văn bản dòng lệnh nano. Tôi nhận thấy rằng quyền của tệp đó được đặt thành 0022 thay vì mặc định 0755.

Umask hoạt động như thế nào? Tôi nghĩ rằng tôi có thể chỉ cần loại bỏ từng chữ số trong umask từ 0777, 7 - 6 = 1 và 7 - 4 = 3, vì vậy tôi mong đợi các quyền 0133, nhưng rõ ràng, đây không phải là trường hợp.

  1. Umask chính xác là gì? Giải thích cho tôi như tôi là một "Linux noob"
  2. Làm thế nào để tính toán với umask?
  3. Trường hợp sử dụng cho umask là gì?

160
2018-05-22 20:42


gốc


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


Các câu trả lời:


Umask hoạt động như một tập hợp các quyền mà các ứng dụng không thể đặt trên các tệp. Đó là mặt nạ tạo chế độ tệp cho quy trình và không thể được đặt cho chính các thư mục. Hầu hết các ứng dụng sẽ không tạo các tệp có bộ quyền thực thi, vì vậy chúng sẽ có mặc định 666, sau đó được sửa đổi bởi umask.

Khi bạn đã đặt umask để loại bỏ các bit đọc / ghi cho chủ sở hữu và các bit đọc cho người khác, một mặc định chẳng hạn như 777 trong các ứng dụng sẽ dẫn đến quyền truy cập tệp 133. Điều này có nghĩa là bạn (và những người khác) có thể thực thi tập tin, và những người khác sẽ có thể ghi vào nó.

Nếu bạn muốn làm cho các tập tin không được đọc / ghi / thực thi bởi bất kỳ ai trừ chủ sở hữu, bạn nên sử dụng một umask như 077 để tắt các quyền đó cho nhóm và những người khác.

Ngược lại, một umask của 000 sẽ làm cho các thư mục mới được tạo ra có thể đọc được, ghi được và có thể đọc được cho tất cả mọi người (các quyền sẽ được 777). Umask như vậy là rất không an toàn và bạn không bao giờ nên đặt umask 000.

Umask mặc định trên Ubuntu là 022 điều đó có nghĩa là các tệp mới được tạo có thể đọc được bởi tất cả mọi người, nhưng chỉ có thể ghi bởi chủ sở hữu:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

Xem và sửa đổi umask

Để xem cài đặt umask hiện tại của bạn, mở một thiết bị đầu cuối và chạy lệnh:

umask

Để thay đổi thiết lập umask của shell hiện tại thành một cái gì đó khác, hãy nói 077, chạy:

umask 077

Để kiểm tra xem cài đặt này có hoạt động hay không, bạn có thể tạo Mới tệp (quyền tệp của tệp hiện có sẽ không bị ảnh hưởng) và hiển thị thông tin về tệp, chạy:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Cài đặt umask được kế thừa bởi các quá trình bắt đầu từ cùng một trình bao. Ví dụ: bắt đầu trình soạn thảo văn bản GEdit bằng cách thực thi gedit trong thiết bị đầu cuối và lưu tệp bằng gedit. Bạn sẽ nhận thấy rằng tệp mới được tạo bị ảnh hưởng bởi cùng một thiết lập umask như trong terminal.

Trường hợp sử dụng: hệ thống đa người dùng

Nếu bạn đang sử dụng một hệ thống được nhiều người dùng chia sẻ, họ mong muốn những người khác không thể đọc tệp trong thư mục chính của bạn. Đối với điều đó, một umask là rất hữu ích. Chỉnh sửa ~/.profile và thêm một dòng mới với:

umask 007

Bạn cần phải đăng nhập lại để thay đổi umask này ~/.profile có hiệu lực. Tiếp theo, bạn cần thay đổi quyền truy cập tệp hiện có của các tệp trong thư mục chính của bạn bằng cách xóa bit đọc, ghi và thực thi cho thế giới. Mở một thiết bị đầu cuối và thực hiện:

chmod -R o-rwx ~

Nếu bạn muốn cài đặt umask này được áp dụng cho tất cả người dùng trên hệ thống, bạn có thể chỉnh sửa tệp hồ sơ trên toàn hệ thống tại /etc/profile.


125
2018-05-22 20:59



Vì vậy, những chữ số trong umask nghĩa là gì? Tại sao 777 có nghĩa là nhóm và những người khác sẽ có thể viết thư cho nó, trong khi 077 có nghĩa là họ không thể? - HelloGoodbye
Ngoài ra, bạn nói rằng nếu umask là 000, quyền của tệp sẽ là 777. Vì vậy, với một mặt nạ mặc định của 022, không nên cho phép tệp 755, tương ứng với -rwxr-xr-x, không phải -rw-r--r--? - HelloGoodbye
Phải thừa nhận, lời giải thích này làm tôi bối rối hơn nó đã giúp tôi. - Connel Hooley
chú thích cái đó Umask mặc định của Ubuntu đã thay đổi thành 0002 chỉ một tháng sau khi câu trả lời này được đăng. - Jeff Puckett
@ HelloGoodbye nếu umask là 000 thì sẽ không có quyền nào bị xóa. các ứng dụng như touch và nano tạo tệp với mặc định 666 để cho phép tệp sẽ vẫn 666 nhưng một umask của 022 sẽ xóa các bit ghi cho nhóm và những người khác, vì vậy 666 được giảm xuống 644 hay còn gọi là -rw-r--r-- Xem xét mkdir chế độ tạo mặc định của 777 với một umask của 022 sẽ giảm quyền truy cập vào 755 - Jeff Puckett


Ngoài các cuộc thảo luận tốt trong câu trả lời được chấp nhận, nó là giá trị thêm một số điểm thêm về umask, với tham chiếu đến cách nó được quản lý trong 12.04 trở đi.

Umask và pam_umask

Umask mặc định hiện có trong /etc/login.defs và không ở /etc/profile, như là lưu ý chính thức trong /etc/profile lần đọc:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask được giải thích ngắn gọn bên dưới và có thể nói rằng tệp mặc định cho người dùng đặt cài đặt umask tùy chỉnh của họ vẫn còn ~/.profile.

Pam_umask là một trong nhiều điều quan trọng Mô-đun PAM điều đó rất quan trọng trong hoạt động của Ubuntu (chạy apropos '^pam_' để tìm các trang dành cho những người khác). bên trong manpage cho pam_umask nó được lưu ý rằng

pam_umask là một mô-đun PAM để thiết lập mặt nạ tạo chế độ tập tin của môi trường hiện tại. Umask ảnh hưởng đến          các quyền mặc định được gán cho các tệp mới được tạo.

Một ghi chú trên umask mặc định

Thư mục mới trong $HOME có thể được tạo bởi mkdir với 775 quyền và tệp mặc định được tạo bằng touch với quyền mặc định 664 ngay cả khi umask mặc định là 022. Điều này có vẻ, lúc đầu, mâu thuẫn và đáng để giải thích.

Mặc dù umask mặc định là 022 trên Ubuntu, đây không phải là toàn bộ câu chuyện, vì có một cài đặt trong /etc/login.defs cho phép umask là 002 đối với người dùng không phải root nếu đáp ứng điều kiện (xem đoạn trích bên dưới). Trên một cài đặt bình thường, /etc/login.defs chứa cài đặt USERGROUPS_ENAB yes. Đây là những gì

Cho phép thiết lập các bit nhóm umask giống như bit của chủ sở hữu    (ví dụ: 022 -> 002, 077 -> 007) cho người dùng không phải root, nếu uid là    giống như gid và tên người dùng giống với tên nhóm chính.

Do đó tại sao bạn thấy những điều sau đây stat khi một thư mục mới được tạo bằng mkdir trên một hệ thống người dùng duy nhất như của tôi (uid và gid là như nhau):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Để biết thêm thông tin, hãy xem man pam_umask và Ubuntu manpages trực tuyến.


35
2018-04-02 00:16



Có vẻ như phần thứ hai của bạn thiếu một cái gì đó? (USERGROUP_ENABLE?) +1 cho thông tin cập nhật - Lekensteyn
@Lekensteyn Kỳ lạ đủ, các thiết lập trong /etc/login.defs Chắc chắn USERGROUPS_ENAB yes sau khi kiểm tra nó. Cú pháp của tệp đó hơi khác thường.
Tôi chỉ cần kiểm tra các tập tin và nguồn và bạn là đúng, điều này (và một số khác) cài đặt được gây nhầm lẫn có tên "_ENAB". - Lekensteyn


Điều này là khá cũ, nhưng điều này là đáng nói đến. Để tính toán cho umask, không giống như quyền của hệ thống tệp. Các umask bát phân được tính toán thông qua bitwise AND của bổ sung unary của đối số sử dụng bitwise NOT. Các ký hiệu bát phân như sau:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Sau đó, bạn có thể tính toán để thiết lập umask phù hợp tiền hoa hồng như:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Tính toán quyền cuối cùng cho các tệp

Bạn chỉ có thể trừ umask từ các quyền cơ sở để xác định quyền cuối cùng cho tệp như sau:

666 – 022 = 644
  • Quyền cơ sở tệp: 666
  • giá trị umask: 022
  • trừ để có được quyền của tập tin mới (666-022) : 644 (rw-r–r–)

Tính toán giấy phép cuối cùng cho các thư mục

Bạn chỉ có thể trừ umask từ các quyền cơ sở để xác định quyền cuối cùng cho thư mục như sau:

777 – 022 = 755
  • Quyền cơ sở thư mục: 777
  • giá trị umask: 022
  • Trừ để nhận quyền của thư mục mới (777-022) : 755 (rwxr-xr-x)

30
2018-04-06 08:27



Tôi không nghĩ đó là cách tính toán cuối cùng, nếu giá trị mặt nạ là gì 077 bạn sẽ trừ như thế nào 666-077 trong trường hợp đó ? - Sufiyan Ghori
Giải thích @SufiyanGhori Baron không hoàn thành để cho phép tệp. Trong trường hợp của bạn và bất kỳ phép tính nào trong tương lai, để dễ nhớ, bạn nên ghi nhớ để trừ chúng theo cách này: 6-0 6-7 6-7 nếu bất kỳ kết quả nào của ba số đó là -1 thì hãy để nó là 0. Vì vậy, chúng tôi có kết quả cuối cùng 600 - Huy.PhamNhu
@ Huy.PhamNhu Điều đó cũng không chính xác. Với sự cho phép cơ sở của 666 và umask của 033 bạn chắc chắn sẽ không nhận được 633 ra. - maaartinus
Không không không. Bạn không thể sử dụng phép trừ để tính umask (nó hoạt động với các giá trị nhất định, nhưng không phải tất cả). Bạn phải suy nghĩ của umask là "vô hiệu hóa bit". Xem các câu trả lời khác của Sufiyan và Wisbucky. - wisbucky


Những người khác trả lời đã giải thích thực sự tốt khái niệm umasking và tại sao nó là cần thiết. Hãy để tôi thêm hai xu của tôi và cung cấp cho bạn một ví dụ toán học về cách các quyền thực sự được tính toán.

Trước hết, "Mặt nạ" không có nghĩa là "trừ", theo nghĩa số học - không có mượn hoặc mang theo, thứ hai, umask là mặt nạ; nó không phải là một số được trừ.

Thứ ba, mặt nạ tắt bit quyền. Nếu họ đã tắt, umask không thay đổi quyền,

Ví dụ: giả sử bạn phải vạch mặt 077 từ hệ thống mặc định cho các tệp 666 và các thư mục 777.

Lệnh bạn sẽ sử dụng là,

umask 077

(giá trị mặt nạ trong nhị phân, 000 111 111)

Điều gì sẽ làm điều này là nó sẽ tắt bất kỳ của sáu LSB đầu tiên (bit quan trọng nhất) nếu chúng là 1 và sẽ không thay đổi nếu có ai trong số họ đã tắt.

Dưới đây là cách tính quyền cuối cùng:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Quan sát cả hai 110 giá trị đã thay đổi thành 000.

Tương tự,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



đây sẽ là câu trả lời! - Abdelouahab
@SufiyanGhori Vì vậy, nếu umask 177 (001 111 111), nó sẽ tắt 7 bit quan trọng đầu tiên nếu chúng là 1 - Kasun Siyambalapitiya
đó là chính xác @KasunSiyambalapitiya - Sufiyan Ghori


Khái niệm cơ bản:

Nếu bạn giống như hầu hết mọi người và không hiểu những gì heck "bát phân bát phân được tính toán thông qua bitwise AND của bổ sung unary của đối số bằng cách sử dụng bitwise NOT" có nghĩa là, đây là lời giải thích đơn giản của tôi:

Trước hết, hãy nghĩ về "mặt nạ" là gì. Một mặt nạ chặn một cái gì đó. Hãy nghĩ đến băng che. Trong trường hợp này, umask giống như che băng để chặn / vô hiệu hóa quyền khi tạo tệp hoặc thư mục mới.

Các quyền mặc định khi tạo một thư mục mới là octal 777 (111 111 111)và một tệp mới là octal 666 (110 110 110). Chúng tôi đặt umask để chặn / vô hiệu hóa các quyền nhất định.

  • Một chút mặt nạ của 1 có nghĩa là để chặn / vô hiệu hóa sự cho phép đó (đặt băng che phủ trên bit đó).
  • Một chút mặt nạ của 0 sẽ cho phép giấy phép đi qua (không có băng che trên bit đó).

Vì vậy, một octal 022 (000 010 010) mặt nạ có nghĩa là vô hiệu hóa group write và others writevà cho phép tất cả các quyền khác đi qua.

Phép tính:

Dưới đây là một phép tính ví dụ cho một tệp mới (quyền 666 mặc định) với một umask 022:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Vì vậy, đó là cách bạn kết thúc với kết quả của 644 khi bạn tạo một tập tin mới.

Cách dễ dàng hơn:

Nhưng nếu tính toán mặt nạ nghịch đảo chỉ gây nhầm lẫn cho bạn, có một cách dễ dàng hơn bằng cách sử dụng ký hiệu umask tượng trưng. Khi bạn sử dụng phương pháp này, bạn chỉ cần chỉ định các bit truyền qua thay vì các bit mặt nạ.

  • umask u=rwx,g=rx,o=rx có nghĩa là cho phép đi qua cho user rwx, group rx, other rx. Điều này ngụ ý vô hiệu hóa group w, others w. Nếu bạn chạy lệnh này thì hãy kiểm tra umask, bạn sẽ nhận được 022.
  • umask u=rwx,g=,o= có nghĩa là cho phép đi qua cho user rwx. Điều này ngụ ý vô hiệu hóa tất cả quyền truy cập cho group và others. Nếu bạn chạy lệnh này thì hãy kiểm tra umask, bạn sẽ nhận được 077.

Tính toán tiền thưởng:

Nếu bạn thực sự muốn hiểu những gì "bát phân bát phân được tính toán thông qua bitwise AND của bổ sung unary của đối số bằng cách sử dụng bitwise NOT" có nghĩa là, đây là một số bảng logic có thể giúp chứng minh. Hãy nhớ rằng, một chút mặt nạ 1 có nghĩa là vô hiệu hóa, 0 có nghĩa là đi qua.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Nếu bạn làm bảng với NOT(mask), bây giờ nó chỉ đơn giản AND bảng logic!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Vì vậy, công thức cho nó là: result = perm AND (NOT mask)


9
2018-04-03 22:30