Vietnamese Developers' Blog

Umask và quyền truy nhập file

Posted in Unix/Linux/BSD by kiennguyen on the August 14th, 2009

Umask là gì?

Trong Unix, khi một file hay một thư mục được tạo ra thì quyền truy nhập đối với chúng (r, w, x) 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). Quyền truy nhập cơ sở là giá trị được thiết lập sẵn từ trước, đối với file là 666 (rw-rw-rw) và thư mục là 777 (rwxrwxrwx). Mặt nạ là giá trị đựợc thiết lập bởi người dùng bằng lệnh umask. Giá trị mặt nạ sẽ “che đi” một số bit trong quyền truy nhập cơ sở để tạo ra quyền truy nhập chính thức cho file (tương tự như cơ chế của subnet mask).

Cụ thể, quyền truy nhập chính thức được tính bằng cách lấy giá trị nhị phân của quyền truy nhập cơ sở AND với dạng biểu diễn bù 1 của mặt nạ. Ví dụ: Vì quyền truy nhập cơ sở của file là 666 (tức 110110110), nên nếu giá trị mask là 022 (000010010) 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–)

Như vậy, các bit trong quyền truy nhập cơ sở ứng với các bit 1 của mask sẽ bị xóa. Cũng có thể tính quyền truy nhập chính thức đơn giản hơn bằng cách lấy 666 – 022 = 644.

Giá trị mặt nạ được thiết lập như thế nào?

Giá trị mask được thiết lập nhờ lệnh umask trê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ị mặt nạ 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 executable mặc định. Vì quyền truy nhập cơ sở của file là 666, tức các bit ứng với quyền executable đề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ó executable. Chúng ta buộc phải cấp thêm quyền executable cho file sau khi chúng đã được tạo ra.

Quyền truy nhập 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 nhập 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 thì quyền truy nhập của file ở vị trí đích sẽ được bảo lưu. Sử dụng tùy chọn –p để lấy quyền truy nhậ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 nhập của từng file làm quyền truy nhập cơ sở cho file đó.

Tagged with:

Leave a Reply