Một tính năng rất hữu ích trong Linux là "Danh Sách Kiểm Soát Truy Cập" (Access Control Lists - ACL) kiểm soát quyền truy cập vào file và thư mục. Đây là cách ACL hoạt động để kiểm soát quyền file trong Linux.
Lưu ý: Để hiểu kỹ cách ACL hoạt động, chúng ta trước tiên thiết lập một số người dùng và nhóm trên hệ thống Linux đang chạy. Bài tập sau được thực hiện trên máy ảo chạy Kali Linux. Người dùng root có quyền thêm người dùng mới vào hệ thống và phân bổ họ vào các nhóm.
Tạo Người Dùng Và Nhóm
Trước tiên, chúng ta sẽ đăng nhập với tư cách root, tạo người dùng và đưa họ vào các nhóm tương ứng như bảng dưới đây. Người dùng được đặt tên đơn giản để dễ hiểu khái niệm hơn.
| Người Dùng | Nhóm |
|---|---|
| john1 john2 john3 |
johns |
| jane1 jane2 |
janes |
Chúng ta sẽ dùng lệnh adduser để thêm người dùng mới vào hệ thống.

Lệnh id sẽ hiển thị chi tiết người dùng mới tạo. Nó sẽ hiện user id (uid), group id (gid) và tên nhóm (groups). Người dùng, khi tạo, tự động được thêm vào nhóm cùng tên với tên người dùng. Người dùng đó sẽ là thành viên duy nhất của nhóm đó.

Tương tự, người dùng "john2" và "john3" cũng được tạo.
adduser john2 adduser john3
Khi ba người dùng đã được tạo, dùng lệnh id để xem uid và gid tương ứng.

Chúng ta thấy ba người dùng ở các nhóm riêng – 1000, 1001 và 1002. Theo bảng trước, chúng ta muốn ba người dùng cùng một nhóm: johns. Vì nhóm đó chưa tồn tại, chúng ta sẽ tạo nó bằng lệnh groupadd:
groupadd -g <new_group_ID> <group_name>

ID nhóm mới được chỉ định là 5000. Nếu bỏ qua switch -g, hệ thống sẽ tự chọn group ID. Tên nhóm mới là "johns". Bây giờ ba người dùng – "john1", "john2" và "john3" – cần được thêm làm thành viên của nhóm này. Chúng ta sẽ dùng lệnh usermod cho nhiệm vụ này.
usermod -g <group_name> <user_name>
usermod thêm người dùng "user_name" vào nhóm "group_name". Hình sau hiển thị uid và gid cho "john1" trước khi đổi nhóm. Sau khi lệnh usermod chạy thành công, "john1" được thêm vào nhóm "johns" với gid 5000.

Cùng quy trình cho người dùng "john2" và "john3".
usermod -g johns john2 usermod -g johns john3
Cuối cùng, chi tiết ba người dùng trong nhóm "johns" có thể xem bằng lệnh id.

Chúng ta đã tạo thành công ba người dùng và thêm vào cùng một nhóm.
Tương tự, người dùng "jane1" và "jane2" được tạo và thêm vào nhóm "janes" với gid 6000. Chi tiết của họ có thể xem bằng lệnh id như hình dưới.

Tại Sao Cần Access Control Lists?
Giả sử người dùng "john1" đăng nhập,

tạo file mới trong thư mục Home,

và thêm nội dung vào đó.

Dùng lệnh ls, chúng ta xem metadata của file.

Vài ký tự đầu tiên trong đầu ra, - rw - r - - r - - là chuỗi quyền. Hãy phân tích nó.
| – | rw – | r – – | r – – |
|---|---|---|---|
| loại file | quyền john1 có trên file | quyền thành viên nhóm johns có trên file | quyền cho những người khác không trong nhóm johns |
Bài viết này là một primer tốt về quyền file.
Điều gì xảy ra nếu "john1", với tư cách chủ sở hữu file, muốn thêm quyền ghi chỉ cho "john2" và "jane1" nhưng giữ quyền đọc cho "john3" và "jane2"?
| rw – | r – – |
|---|---|
| john1 john2 jane1 |
john3 jane2 |
Một lựa chọn là tạo nhóm mới với quyền đọc, ghi cho "john1", "john2" và "jane1" và nhóm khác chỉ đọc cho "john3" và "jane2". Nếu john1 muốn sửa quyền thêm cho bất kỳ thành viên nhóm nào, thì cần tạo thêm nhóm. Tạo và quản lý nhiều nhóm là gánh nặng cho quản trị viên hệ thống.
Thay vào đó, một "Danh Sách Kiểm Soát Truy Cập" có thể được tạo cho file, nêu rõ thao tác mà bất kỳ người dùng nào có thể thực hiện trên file đó.
Cách Tạo Access Control List (ACL) Cho File?
Mỗi file khi tạo đã có một ACL được gán. Việc sử dụng nó hiệu quả chỉ là vấn đề sửa đổi nó. Chỉ chủ sở hữu file và root user mới có thể sửa ACL của file.
Chúng ta có thể dùng lệnh getfacl để xem ACL hiện tại:
getfacl <file_name>

Các dòng bắt đầu bằng # là dòng comment. Thông tin thực nằm ở ba dòng cuối, tương tự chuỗi quyền trước đó. Dòng "user" đề cập đến quyền gán cho chủ sở hữu file "john1". Dòng "group" đề cập đến quyền gán cho các thành viên khác trong nhóm "johns". Như bạn đoán, dòng "other" đề cập đến bất kỳ ai khác ngoài nhóm.
Hãy dùng lệnh setfacl để sửa ACL hiện có trên file.
setfacl -m entity:name:permissions <file_name>
| entity | name | permissions |
|---|---|---|
| giá trị ở đây chỉ ai là đối tượng của entry ACL: user (u) hoặc group(g) hoặc others(o) |
tên người dùng hoặc nhóm, entry ACL liên quan đến ai | quyền đọc, ghi, thực thi ký hiệu bằng chữ r,w,x |
"john2" đầu tiên được cấp quyền đọc, ghi trên file,

theo sau là "jane1".

Hãy xem ACL đã cập nhật cho "secretfile".

Chúng ta thấy quyền đọc và ghi đã được gán cho "john2" và "jane1".
Xác Thực ACL
Chúng ta thấy "john2" có thể đọc file và ghi vào nó.

Thông tin mới do "john2" nhập đã được thêm vào file.

Tương tự, "jane1" cũng có đặc quyền giống hệt – quyền đọc và ghi.

Nhưng "john3" trong cùng nhóm không thể ghi vào file.

"jane2", thuộc nhóm other, cũng không thể ghi vào file.

Kết Luận
Cùng quy trình có thể mở rộng cho thư mục. Access Control Lists cho phép quản trị viên hệ thống xử lý quyền truy cập file và thư mục một cách khéo léo.