Umask trong Linux là gì?

theanh

Administrator
Nhân viên
UMASK trong hệ thống Linux hoặc Unix được gọi là Mặt nạ người dùng hoặc còn gọi là Mặt nạ tạo tệp người dùng. Đây là quyền cơ sở hoặc quyền mặc định khi một tệp hoặc thư mục mới được tạo trong máy Linux.

Nó được sử dụng bởi nhiều lệnh trong Linux như mkdir, touch, tee và các lệnh khác để tạo tệp và thư mục. Nó tham gia vào từng bước khi một tệp hoặc thư mục mới được tạo.

Quyền tệp:​

Trước khi chúng ta đi sâu tìm hiểu umask, trước tiên hãy cùng tìm hiểu ngắn gọn về quyền tệp.

Linux nổi tiếng với tính bảo mật. Mỗi tệp hoặc thư mục trong Linux có một tập hợp quyền và quyền sở hữu cụ thể. Hãy cùng xem lớp người dùng bên dưới.

Mỗi tệp trong Linux sẽ có ba lớp người dùng được liên kết với nó.
  1. Người dùng - Người dùng sở hữu tệp - Theo mặc định, điều này cho biết ai đã tạo tệp trừ khi bạn thay đổi tệp đó.
  2. Nhóm - Điều này cho biết những người trong nhóm sẽ được chỉ định quyền đối với tệp.
  3. Khác - Điều này hạn chế những người dùng khác không phải là chủ sở hữu hoặc trong nhóm được chỉ định.
Có ba loại quyền truy cập tệp cho mỗi lớp người dùng được đề cập ở trên.
  1. r - quyền đọc - khả năng đọc nội dung của tệp
  2. w - quyền ghi - khả năng thay đổi nội dung của tệp
  3. x - quyền thực thi - khả năng thực thi tệp dưới dạng chương trình
Khái niệm trên cho bạn biết ai được phép đọc nội dung tệp, sửa đổi nội dung tệp hoặc thực thi chương trình.

Quyền xem - Chế độ tượng trưng:​

Chúng ta hãy xem quyền sở hữu tệp bên dưới. Bạn có thể lấy thông tin trên máy Linux của mình bằng cách nhập lệnh ls -l.



Ký tự đầu tiên trong hình ảnh trên hiển thị loại tệp. Có thể có nhiều loại tệp khác nhau trong Linux như sau.

-

Chỉ tệp thông thường đơn giản với các phần mở rộng khác nhau như .txt, .json, .sh, .py, .rb, v.v.

d
[TD][/TD]
Chỉ thư mục/thư mục

l
[TD][/TD]
Chỉ liên kết tượng trưng hoặc liên kết tượng trưng hoặc liên kết mềm

c
[TD][/TD]
Chỉ tệp thiết bị ký tự

b
[TD][/TD]
Chỉ tệp thiết bị khối
chín ký hiệu tiếp theo được chia thành ba phần như bên dưới.

rwx
Chủ sở hữu tệp có thể đọc nội dung, sửa đổi nội dung và thực thi tệp dưới dạng chương trình

r-x
[TD][/TD]
Các thành viên trong nhóm "người dùng" có thể đọc nội dung và thực thi tệp dưới dạng chương trình nhưng không thể sửa đổi nội dung tệp

r-x
[TD][/TD]
Người không phải là chủ sở hữu cũng không phải là thành viên của nhóm, tức là người khác , cũng có thể đọc nội dung của tệp và thực thi tệp dưới dạng chương trình nhưng không thể sửa đổi nội dung tệp

Đang xem Quyền - Chế độ số:​

Có một cách bổ sung để biểu diễn quyền bằng số được gọi là Chế độ số.

Hãy xem biểu đồ quyền tệp số bên dưới.

0

---

Không có quyền

1
[TD][/TD]
--x
[TD][/TD]
Chỉ quyền thực thi

2
[TD][/TD]
-w-
[TD][/TD]
Chỉ ghi quyền

3
[TD][/TD]
-wx
[TD][/TD]
Quyền ghi và thực thi

4
[TD][/TD]
r--
[TD][/TD]
Chỉ quyền đọc

5
[TD][/TD]
r-x
[TD][/TD]
Quyền đọc và thực thi

6
[TD][/TD]
rw-
[TD][/TD]
Đọc và ghi permission

7
[TD][/TD]
rwx
[TD][/TD]
Quyền đọc, quyền ghi và quyền thực thi
Nếu tôi tham chiếu biểu đồ quyền số này và áp dụng cho cùng một thư mục được đề cập trong hình ảnh trên, thì quyền sẽ trông như bên dưới.

rwx

4+2+1

7

r-x
[TD][/TD]
4+0+1
[TD][/TD]
5

r-x
[TD][/TD]
4+0+1
[TD][/TD]
5

Do đó, quyền số của thư mục testdir là 755.

Hiểu về UMASK:​

Hãy tạo một tệp và thư mục mới bằng cách thực hiện lệnh bên dưới.
Mã:
$ touch testfile
Mã:
$ mkdir testdir
Hãy xem các quyền của testfile và testdir bằng cách thực hiện lệnh ls -l.

$ ls -l
Mã:
Mã:
[B]Đầu ra:[/b]
Mã:
drwxr-xr-x 2 niteshb users 4096 21-03-2022 22:43 testdir
Mã:
-rw-r--r-- 1 niteshb users 0 21-03-2022 22:43 testfile
Mã:
Bạn có để ý đến các quyền không? Chúng khác nhau, đúng không? Điều này là do giá trị umask mặc định được thiết lập trong máy Linux.

Theo mặc định, trên máy Linux, quyền tạo mặc định cho một tệp là 666, cấp quyền đọc và ghi cho chủ sở hữu, nhóm và những người khác và 777 cho một thư mục, nghĩa là cấp quyền đọc, ghi và thực thi cho chủ sở hữu, nhóm và những người khác.

Như chúng ta đã biết, các thư mục không thể thực thi được. Vậy tại sao thư mục lại cần quyền thực thi? Vâng, quyền thực thi đối với thư mục là để cho phép truy cập vào nội dung trong thư mục. Nếu sử dụng lệnh chmod, chúng ta thay đổi quyền của thư mục thành 666 và thử vào thư mục bằng lệnh cd, bạn sẽ nhận được lỗi quyền bị từ chối.

Trên hầu hết các bản phân phối Linux, giá trị mặc định trên toàn hệ thống được đặt trong pam_umask.so hoặc trong tệp /etc/profile. Bằng cách thêm giá trị vào tệp ~/.bashrc trong thư mục home của người dùng, chúng ta có thể tạo giá trị umask dành riêng cho người dùng.

Để kiểm tra giá trị umask, hãy thực thi lệnh umask.
Mã:
$umask
Đầu ra:
Mã:
0022
Chúng ta có thể bỏ qua số 0 đầu tiên trong bốn số trên ngay bây giờ. Đây là một phần của quyền nâng cao trong Linux. Quyền này có thể ngăn chặn việc sửa đổi tệp ngay cả khi bạn có quyền ghi hoặc chúng ta có thể ngăn chặn việc xóa tệp ngay cả khi bạn là người dùng root. Trong blog này, chúng ta sẽ chỉ tập trung vào ba số còn lại.

Để thay đổi giá trị umask của phiên hiện tại, hãy thực hiện lệnh bên dưới theo sau là giá trị mong muốn.
Mã:
$umask 0044

Cách các tệp và thư mục có được quyền của chúng:​

Giá trị liên quan đến umask KHÔNG phải là quyền bạn nhận được cho các tệp và thư mục của mình.

Có một phép tính rất đơn giản. Như chúng tôi đã đề cập ở trên, giá trị mặc định cho một tệp là 666 và cho một thư mục là 777. Để tính toán các bit quyền cho các tệp hoặc thư mục mới, hãy trừ giá trị umask khỏi giá trị mặc định.

Ví dụ, hãy tính xem quyền của tệp hoặc thư mục mới sẽ ảnh hưởng như thế nào do umask.
  • Tệp: 666 - 022 = 644. Theo quyền, chủ sở hữu có thể đọc và thực thi tệp. Nhóm và những người khác có thể đọc tệp.
  • Thư mục: 777 - 022 = 755. Điều này có nghĩa là chủ sở hữu sẽ có tất cả quyền đọc, quyền ghi và cd vào thư mục. Nhóm và những người khác có thể đọc và liệt kê nội dung của thư mục và cd vào thư mục.
Bạn cũng có thể xem giá trị umask ở dạng số bằng cách thực hiện lệnh bên dưới.
Mã:
$umask
Đầu ra:
Mã:
u=rwx,g=rx,o=rx
Không giống như ký hiệu số, giá trị ký hiệu tượng trưng chứa các bit quyền sẽ được đặt trên các tệp và thư mục mới tạo.

Thiết lập giá trị mặt nạ:​

Mặt nạ tạo tệp có thể được thiết lập bằng ký hiệu bát phân hoặc ký hiệu tượng trưng. Để thực hiện các thay đổi vĩnh viễn, hãy đặt giá trị umask mới trong tệp cấu hình toàn cục như tệp /etc/profile sẽ ảnh hưởng đến tất cả người dùng hoặc trong tệp cấu hình shell của người dùng như ~/.profile, ~/.bashrc hoặc ~/.zshrc sẽ chỉ ảnh hưởng đến người dùng. Các tệp của người dùng có quyền ưu tiên hơn các tệp toàn cục.

Trước khi thực hiện thay đổi đối với giá trị umask, hãy đảm bảo giá trị mới không gây ra rủi ro bảo mật tiềm ẩn. Các giá trị ít hạn chế hơn 022 nên được sử dụng hết sức thận trọng. Ví dụ: umask 000 có nghĩa là bất kỳ ai cũng sẽ có quyền đọc, ghi và thực thi đối với tất cả các tệp mới được tạo.

Giả sử chúng ta muốn thiết lập quyền hạn hạn chế hơn cho các tệp và thư mục mới tạo để những người khác không thể cd đến các thư mục và đọc tệp. Quyền mà chúng ta muốn là 750 cho thư mục và 640 cho tệp.

Để tính giá trị umask, chỉ cần trừ các quyền mong muốn khỏi quyền mặc định:

Giá trị Umask: 777-750 = 027

Giá trị umask mong muốn được biểu thị bằng ký hiệu số là 027.

Để đặt giá trị mới vĩnh viễn trên toàn hệ thống, hãy mở tệp /etc/profile bằng trình soạn thảo văn bản của bạn và thay đổi hoặc thêm dòng sau vào đầu tệp:
Mã:
umask 0027
Để các thay đổi có hiệu lực, hãy chạy lệnh nguồn sau hoặc đăng xuất rồi đăng nhập:
Mã:
$source /etc/profile
Để xác minh các thiết lập mới, chúng ta sẽ tạo một tệp và thư mục mới bằng các lệnh bên dưới.
Mã:
$mkdir newtestdir
Mã:
$touch newtestfile
Nếu bạn kiểm tra quyền bằng lệnh ls, bạn sẽ thấy rằng tệp mới có 640 quyền và thư mục mới có 750 quyền, như chúng ta mong muốn:
Mã:
drwxr-xr-- 2 niteshb users 4096 21-03-2022 22:43 newtestdir
Mã:
-rw-r----- 1 niteshb users 0 21-03-2022 22:43 newtestfile
Mã:
Một cách khác để đặt mặt nạ tạo tệp là sử dụng ký hiệu tượng trưng. Ví dụ umask u=rwx,g=rx,o= giống với umask 027.

Kết luận:​

Trong hướng dẫn này, chúng tôi đã giải thích về quyền của Linux và cách sử dụng lệnh umask để thiết lập các bit quyền cho các tệp hoặc thư mục mới tạo.

Để biết thêm thông tin, hãy nhập lệnh bên dưới vào thiết bị đầu cuối của bạn.
Mã:
$man umask
 
Back
Bên trên