Hướng dẫn dùng umask trong PHP

Hướng dẫn dùng umask trong PHP

Giới thiệu umask

Umask được hiểu là các giá trị mặc định khi bạn tạo ra một file mới hoặc một thư mục mới. Bạn có thể kiểm soát quyền mặc định của các file khi tạo ra bằng cách chỉnh sửa /etc/bashrc hoặc /etc/profile. Khi bạn chạy lệnh umask trong linux sẽ trả về kết quả gồm 4 cơ số trong hệ cơ số 8.

[[email protected] ~]# umask

0022

[[email protected] ~]# umask -S

u=rwx,g=rx,o=rx

Mỗi file/forder mới được tạo ra sẽ dựa trên umask và base permission để tính phân quyền cho đối tượng mới vừa được tạo.

Nếu bạn muốn gán các quyền mặc định cho tất cả các tệp hoặc thư mục mới bạn sẽ sử dụng lệnh sau:

[[email protected] ~]# umask 022

Cách tính giá trị umask

Để giải thích về 022, bạn sẽ có cách tính như sau:

Quyền mặc định (base permission) của hệ thống cho file là 666 và cho thư mục là 777 trừ cho giá trị umask => bạn sẽ có quyền tạo cho file và thư mục mới.

777 – 022 = 755
666 – 022 = 644

Permission

Umask cheat
0 — no permission
1 –x execute
2 -w- write
3 -wx write and execute
4 r—read
5 r-x read and execute
6 rw- read and write
7 rwx read, write and execute

0 rwx rw-

1 rw- rw-

2 r-x r–

3 r– r–

4 -wx -w-

5 -w- -w-

6 –x —

7 — —

Ví dụ umask = 123 tính quyền truy cập cho phép
Bài giải:
base permission: 666 = 111 111 111
Giá trị umask: 123 = 001 010 011
=> NOT (Giá trị umask) = NOT (001 010 011) = 110 101 100
Quyền truy cập cho phép = 111 111 111 AND 110 101 100 = 110 101 100 = 543

Cài đặt umask cho user

Để đặt vĩnh viễn giá trị umask trên tất cả user hệ thống bạn sẽ mở file /etc/profile sau đó sửa/thêm vào dòng sau:

umask 022

sau đó chạy lệnh source /etc/profile để cài đặt có hiệu lực.

Ví dụ gán umask = 123 cho user oracle

vim /home/oracle/.bashrc

thêm dòng sau và lưu lại.

umask 123

THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST:

>> SERVERCOLOCATION – CDN

>> CLOUD – VPS

>> HOSTING

>> EMAIL

>> WEBSITE

>> TÊN MIỀN

>> SSL

Was this article helpful?

Hỏi:

Trong Linux, khi ta tạo ra 1 file hoặc thư mục thì các quyền hạn (permission) được gán mặc định cho chúng được tính như thế nào?

Và ta có thể thay đổi thiết lập về quyền hạn mặc định sẽ gán cho file, thư mục khi chúng mới được tạo không?

Bài viết dưới đây sẽ giải đáp cho câu hỏi trên.

1-   Umask (viết tắt của user file-creation mode mask hay user-mask) Base Permission là gì?

Trong Linux, khi một file hay một thư mục được tạo ra thì các quyền hạn truy cập đối với chúng là (read, write, execute) cho các chủ thể (owner, group, other) sẽ được xác định dựa trên hai giá trị là quyền truy nhập cơ sở (base permission) và mặt nạ (mask).

  •  Base Permission là giá trị được thiết lập sẵn từ trước, và ta không thể thay đổi được

+ đối với file thông thườnggiá trị base perm là 666 (rw-rw-rw-)

+ đối với thư mục (file đặc biệt) giá trị base perm là 777 (rwxrwxrwx)

  • Mask là giá trị đựợc thiết lập bởi người dùng bằng lệnh umask

Giá trị Mask sẽ “che đi” một số bit trong Base Permission để tạo ra quyền truy cập chính thức cho file (tương tự như cơ chế của subnet mask).

Cụ thể, quyền truy cập chính thức được tính bằng cách lấy“giá trị nhị phân của Base permission ”AND“ dạng biểu diễn bù 1 của mask”

Ví dụ:

Vì Base Permission của file bất kỳ luôn là 666 (tức 110110110 khi chuyển sang dạng nhị phân), nên nếu giá trị mask là 022 (có dạng nhị phân là 000010010 => dạng bù 1 của nó thì chuyển 1->0, 0->1 nên ta được 111101101) thì quyền truy nhập chính thức của file sẽ là:

110 110 110 AND 111 101 101 = 110 100 100 = 644 (rw-r–r–)

Cũng có thể tính quyền truy cập chính thức đơn giản hơn bằng cách lấy 666 – 022 = 644



2- Giá trị mask được thiết lập như thế nào?

Câu trả lời là sử dụng lệnh umask. Dưới đây là 1 ví dụ minh họa việc giá trị mask quyết định các quyền hạn trên file.txt như thế nào.

$ umask 077

$ touch file.txt

$ ls -l file.txt

Output:

-rw——- 1 uit uit 0 2010-02-01 11:10 file.txt

Ban đầu, nếu bạn chưa thay đổi giá trị cho umask thì:

  • Giá trị mask mặc định chouser thông thường là 002

Với mask này thì quyền hạn truy cập mặc định cho thư mục là 775 và file là 664

  • Giá trị mask mặc định cho user root là 022

Với mask này thì quyền hạn truy cập mặc định cho thư mục là 755 và filelà 644

Giá trị mask được thiết lập lại nhờ lệnh umasktrên terminal hoặc bằng hàm hệ thống umask(). Các file được tạo ra sau lệnh umask sẽ chịu tác động của giá trị mask mới.

Cơ chế làm việc của umask khiến chúng ta không thể tạo ra các file với quyền execute mặc định. Vì Base permission của file luôn là 666, tức các bit ứng với quyền execute đều bằng 0, nên bất kể giá trị mask bằng bao nhiêu thì quyền truy nhập chính thức của file đều không có execute. Chúng ta buộc phải cấp thêm quyền execute cho file sau khi chúng đã được tạo ra bằng cách sử dụng lệnh chmod.

3- Quyền truy cập trên file và một số lệnh phổ biến

– Lệnh cp: Khi được sao chép sang vị trí mới, quyền truy cập chính thức của file được tính theo công thức trình bày ở trên với giá trị mask tại vị trí đích. Trong trường hợp trùng tên file và bạn quyết định ghi đè thì quyền truy cập của file ở vị trí đích sẽ được bảo lưu. Sử dụng tùy chọn –p trong lệnh cp để lấy quyền truy cập của file nguồn.

– Lệnh tar: Khi giải nén các file, lệnh tar lấy quyền truy cập của từng file làm quyền truy nhập cơ sở cho file đó.

–manthang