Umask và quyền hạn truy cập mặc định trong Linux


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

9 comments

    1. Nguyên tính cài XAMPP trên phiên bản Linux nào? (CentOS, Ubuntu, Fedora…).

      Theo bài viết trong link trên thì:

      - Lệnh su dùng để chuyển sang quyền của root (user có quyền admin trên linux). và sau đó cậu phải gõ vào pass của root thì lệnh su này mới thực hiện được.
      Cậu có thể thay thế bằng cách gõ lệnh sau:

      sudo su -

      rồi nhập vào pass của user mà cậu đang làm việc (chứ không phải pass của root nữa).

      - Trước khi thực hiện câu lệnh tar thì Nguyên cần di chuyển đến thư mục chứa bộ cài XAMPP (file có đuôi .tar.gz) bằng lệnh cd, ví dụ:

      cd /path/to/XAMPP-setup/

      Dưới đây là video hướng dẫn cài XAMPP trên Ubuntu (có giao diện đồ họa) với bộ cài nằm ở Desktop

  1. Cảm ơn bạn nhiều!
    Nguyên có một câu hỏi nữa là làm sao cho cái Ibus nó chạy khi khởi động Ubuntu luôn. Tình hình là máy N giờ mở lên, phải vào khởi động cái Ibus bằng tay nó mới chạy.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s