Skip to the content.

Tìm hiểu phân quyền trong Linux

I. Phân quyền cơ bản.

1.Quyền hạn là gì và tại sao phải phân quyền trên Linux?

Quyền hạn trong linux là khả năng truy cập vào một ““file” của một người dùng trong hệ thống. Vì các hệ điều hành đều hướng đến hỗ trợ nhiều người dùng sử dụng đồng thời nên việc phân quyền là rất quan trọng.

2.Các loại file.

Tất cả mọi thứ trong linux đều được coi là file. Khi sử dụng lệnh ls -l, có 10 ký tự hiển thị trước người và nhóm sở hữu. Ký tự đầu tiên là loại file. Trong đó, file thông thường là -, thư mục là d, symbolic link là l, đường ống là p, c là các character device, các block device là b, và socket là s

3.Sở hữu tập tin

3.1. User owner và Group owner.

Các user và group có thể sở hữu các file. Và mọi file đều có user owner và group owner, có thể xem chúng bằng câu lệnh ls -l.

3.2 chgrp và chown.

Sử dụng lệnh chgrp để thay đổi group owner của một file.

root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 root root 0 Thg 6  7 09:10 file1
root@m4700:/tmp# chgrp it file1
root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 root it 0 Thg 6  7 09:10 file1

Sử dụng lệnh chown để thay đổi user owner của file.

root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 root it 0 Thg 6  7 09:10 file1
root@m4700:/tmp# chown lam file1
root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 lam it 0 Thg 6  7 09:10 file1

Có thể sử dụng chown để thay đổi cả user và group owner.

root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 lam it 0 Thg 6  7 09:10 file1
root@m4700:/tmp# chown root:root file1
root@m4700:/tmp# ls -l file1
-rw-r--r-- 1 root root 0 Thg 6  7 09:10 file1

4. Quyền

4.1. rwx

Chín ký tự sau ký tự kiểu file tượng trưng cho quyền trong ba bộ ba. Quyền ở một bộ ba có thể có r là quyền đọc, w là quyền ghi, x là quyền thực thi. Với thư mục, quyền r là để xem nội dung trong thư mục, x là để vào thư mục, và w để tạo hoặc xóa file ở trong thư mục.

permission trên một file trên một thư mục
r (read) read file contents (cat) read directory contents (ls)
w (write) change file contents (vi) create files in (touch)
x (execute) execute the file enter the directory (cd)

Lệnh output của lệnh ls -l bắt đầu với 10 ký tự, chức năng của nó được liệt kê trong bảng dưới đây.

Vị trí Chức năng
1 Hiển thị loại file
2-4 Quyền cho user owner
5-7 quyền cho the group owner
8-10 quyền cho những user khác

Ví dụ:

 $ ls -lh
total 12K
drwxr-xr-x 2 paul paul 4.0K 2007-02-07 22:26 AllEnter_UserCreateDelete
-rwxrwxrwx 1 paul paul 0 2007-02-07 22:21 EveryoneFullControl.txt
-r--r----- 1 paul paul 0 2007-02-07 22:21 OnlyOwnersRead.txt
-rwxrwx--- 1 paul paul 0 2007-02-07 22:21 OwnersAll_RestNothing.txt
dr-xr-x--- 2 paul paul 4.0K 2007-02-07 22:25 UserAndGroupEnter
dr-x------ 2 paul paul 4.0K 2007-02-07 22:25 OnlyUserEnter

4.2. Thiết lập quyền (chmod)

Quyền có thể được thay đổi với lệnh chmod <mode> <tên file>. Với trong câu lệnh trên bao gồm ba phần:

  1. Đối tượng cần thay đổi quyền:
    • Với u tượng trưng cho user owner.
    • Với g là group owner.
    • Với o là những user khác.
    • Với a hoặc để chống là cho tất cả các đối tượng.
  2. Kiểu thay đổi quyền:
    • Để thêm quyền dùng +.
    • Để xóa quyền dùng -.
    • Để thiết lập rõ ràng quyền dùng dấu =.
  3. Những quyền cần thay đổi:
    • Sử dụng các ký tự r,w,x để thêm hoặc xóa các quyền được đề cập.
    • Đối với thiết lập quyền rõ ràng, những quyền mà bạn nhập sẽ thay đổi hoàn toàn quyền của đối tượng muốn thay đổi. Một số ví dụ: ``` $ ls -l permissions.txt -rw-r–r– 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod u+x permissions.txt $ ls -l permissions.txt -rwxr–r– 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod g-r permissions.txt $ ls -l permissions.txt -rwx—r– 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod o-r permissions.txt $ ls -l permissions.txt -rwx—— 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod a+w permissions.txt $ ls -l permissions.txt -rwx-w–w- 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod +x permissions.txt $ ls -l permissions.txt -rwx-wx-wx 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod u=rw permissions.txt $ ls -l permissions.txt -rw–wx-wx 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod u=rw,g=rw,o=r permissions.txt $ ls -l permissions.txt -rw-rw-r– 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod u=rwx,ug+rw,o=r permissions.txt $ ls -l permissions.txt -rwxrw-r– 1 paul paul 0 2007-02-07 22:34 permissions.txt
### 4.4. Phân quyền dùng số bát phân.
Những người quản trị hệ thống Unix, Linux thường dúng số bát phân để phân quyền. Với r bằng 4, w bằng 2 và x bằng 1.
![](https://i.imgur.com/s9LbzES.png)

Ví dụ khi set quyền 777 nghĩa là rwxrwxrwx, hay 644 có nghĩa là rw-r--r--. Lệnh `chmod` cũng chấp nhận những số này:

$chmod 777 permissions.txt $ ls -l permissions.txt -rwxrwxrwx 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod 664 permissions.txt $ ls -l permissions.txt -rw-rw-r– 1 paul paul 0 2007-02-07 22:34 permissions.txt $ chmod 750 permissions.txt $ ls -l permissions.txt -rwxr-x— 1 paul paul 0 2007-02-07 22:34 permissions.txt


### 4.5. umask
Khi tạo một file thi quyền mặc định sẽ được áp dụng. Quyền mặc định sẽ được xác định bởi umask. umask chỉ định quyền mà bạn không muốn thiết lập mặc định. Hiển thị số umask bằng lệnh `umask`.

Bảng sau chỉ ra một số ví dụ 
| Mark  | Quyền mặc định cho file| Quyền mặc định cho thư mục|
|-------|-------------------|---------------|
|000	|666 (rw-rw-rw-)	|777 (rwxrwxrwx)|
|002	|664 (rw-rw-r--)	|775 (rwxrwxr-x)|
|007	|660 (rw-rw----)	|770 (rwxrwx---)|
|022	|644 (rw-r--r--)	|755 (rwxr-xr-x)|
|027	|640 (rw-r-----)	|750 (rwxr-x---)|
|077	|600 (rw-------)	|700 (rwx------)|
|277	|400 (r--------)	|500 (r-x------)|
|003    |664 (rw-rw-r--)    |774 (rwxrwxr--)|

[Trang tính umask](https://wintelguy.com/umask-calc.pl)

Mặc định đối với file, sẽ không có quyễn thực thi (x) cho nên giá trị umask 022 sẽ giống với 033. Nhưng đối với thư mục, 022 sẽ loại bỏ quyền w đối với group owner và other, nhưng 033 sẽ loại bỏ cả quyền w và x với group owner và other.

### 4.6. mkdir -m
Khi tạo một thư mục bằng `mkdir` có thể sử dụng tùy chọn -m để cài đặt quyền cho nó.

$ mkdir -m 700 MyDir $ mkdir -m 777 Public $ ls -dl MyDir/ Public/ drwx—— 2 paul paul 4096 2011-10-16 19:16 MyDir/ drwxrwxrwx 2 paul paul 4096 2011-10-16 19:16 Public/ ```

4.7. cp -p

Khi copy một file thì file mới cũng được phân quyền theo umask. Để giữ lại quyền và thời gian giống file trước thì dùng cp -p:

II. File permission nâng cao.

1. Sticky bit trên thư mục.

Sticky bit được cài trên một thư mục để ngăn chặn việc xóa file hay thư mục con bên trong thư mục đó bởi người dùng không có quyền sở hữu. Sticky bit được hiển thị cùng vị trí với quyền x(execute) của nhóm người dùng o (other), được biểu diễn bởi t( có cả quyền x cho o) hoặc T (không có quyền x cho o).

Sticky bit cũng có thể được thiết lập bằng sô octal bằng cách thêm số “1” trước ba số phân quyền. ví dụ: chmod 1776 a.txt thì file a.txt sẽ có quyền là -rwxrwxrwT

2.Setgid bit trên thư mục.

setgid để đảm bảo các file trong thư mục đó đều thuộc quyền sở hữu của group owner của thư mục. Setgid được hiển thị ở vị trí quyền x của g, được đại diện bởi s ( có quyền x cho g) hoặc S( không có quyền x cho g). Setgid cũng có thể thiết lập bằng số 2 trước bộ ba số phân quyền. Ví dụ chmod 2664 a.txt thì file a.txt sẽ có quyền là -rw-rwSr--

3. Setgid và setuid trên một file

setuid cho một file thì khi file sẽ được thực thi bởi người sở hữu chứ không phải là người thực thi. Ví dụ một file được sở hữu bởi root, được setuid, khi file này được gọi bởi người dùng lam, nó sẽ thực thi bởi root.

Trong hầu hết trường hợp, setuid là đủ. setgid cho một file sẽ thực thi file với thông tin đăng nhập của group owner.

setuid on sudo: file thực thi của lệnh sudo được setuid nên những người dùng khi thực thi lệnh sudo sẽ là dùng user root để thực thi.

III. File link

1. Inode

2. Thư mục trong linux.

Khi tạo một hard link của một file với lệnh ln thì một giá trị được thêm vào thư mục. Một file name mới được gán với inode đã tồn tại.

.

Hard link và file gốc có cùng inode, nên chúng có cùng quyền và owner. Cả hai file có nội dung giống nhau, bạn có thể xóa file gốc mà hardlink sẽ vẫn tồn tại. Inode có một bộ đếm, đếm số hard link của nó.

Có thể tìm kiếm các hard link dựa trên số inode. ví dụ

Symbolic link hay soft link không link đến inode, nhưng nó tạo một tên để ánh xạ tên. Symbolic link được tạo bằng lệnh ln -s. Quyền trên symbolic link không có ý nghĩa, vì quyền trên mục tiêu được áp dụng. Hard link bị giới hạn trong phân vùng vì gán với inode, soft link có thể link đến mọi nơi(filesystem khác, hoặc cả trong mạng)

Khác biệt giữa soft link và hard link: