CodeGym /Các khóa học /Docker SELF /Quản lý quyền truy cập bằng ACL (`setfacl`, `getfacl`)

Quản lý quyền truy cập bằng ACL (`setfacl`, `getfacl`)

Docker SELF
Mức độ , Bài học
Có sẵn

Quản lý quyền truy cập bằng ACL setfacl, getfacl

1. Giới thiệu về ACL

Hãy tưởng tượng bạn là người tổ chức tiệc (hoặc quản trị viên hệ thống). Bạn muốn khách có thể vào một số phòng nhất định, còn các phòng khác thì chỉ có thể vào khi có sự cho phép của bạn. Quyền cơ bản trong Linux rwx cho phép bạn quản lý quyền truy cập chỉ cho ba loại: chủ sở hữu (user), nhóm (group) và tất cả những người còn lại (others). Nhưng nếu bạn muốn cho một người bạn đặc biệt vào phòng thì sao? Người giữ mô hình quyền tiêu chuẩn sẽ nói bạn: "Này, không làm được đâu". Đây chính là lúc ACL đến giúp bạn.

ACL (Access Control Lists) giải quyết vấn đề hạn chế của hệ thống quyền truy cập ba cấp độ, cho phép bạn chỉ định quyền truy cập cho từng người dùng và nhóm cụ thể.

Các tính năng chính của ACL:

  1. Cài đặt quyền riêng cho các tệp và thư mục cho từng người dùng và nhóm cụ thể.
  2. Kế thừa quyền cho các tệp mới trong thư mục.
  3. Thiết lập linh hoạt hơn so với cách tiếp cận truyền thống chmod.

2. Làm sao để biết ACL đã được kích hoạt chưa?

Trước khi bắt đầu quản lý ACL, hãy kiểm tra xem hệ thống của bạn có hỗ trợ chúng hay không. Bạn có thể kiểm tra bằng lệnh sau:

mount | grep acl

Nếu hệ thống tập tin đã được mount với tùy chọn acl, bạn sẵn sàng làm việc rồi! Ngược lại, bạn cần remount phân vùng với việc thêm tùy chọn acl:

sudo mount -o remount,acl /your/mount/point

Xong rồi, bây giờ bạn đã sẵn sàng. Đã đến lúc thực hành nhé.


3. Các lệnh chính để làm việc với ACL

Lệnh Mô tả
getfacl Nhận danh sách ACL hiện tại cho tệp hoặc thư mục.
setfacl Thiết lập hoặc sửa đổi ACL cho tệp hoặc thư mục.
setfacl -m Thay đổi (modify) quyền truy cập hiện tại.
setfacl -x Xoá (remove) quyền truy cập cụ thể.
setfacl -b Xoá tất cả các bản ghi ACL cho tệp hoặc thư mục.
setfacl -d Thiết lập quyền mặc định cho thư mục, những quyền này sẽ được kế thừa bởi các tệp.

Giờ hãy cùng xem từng lệnh này qua ví dụ nhé!


Nhận ACL hiện tại với getfacl

Giả sử chúng ta có một tệp example.txt. Bạn muốn xem các quyền truy cập hiện tại sử dụng ACL. Chỉ cần một lệnh đơn giản:

getfacl example.txt

Kết quả dự kiến sẽ giống thế này:

# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---

Danh sách này cho thấy các quyền tiêu chuẩn: chủ sở hữu user1 có thể đọc và ghi, nhóm group1 chỉ có thể đọc, và người dùng khác thì không có quyền truy cập.


Thiết lập quyền truy cập cá nhân (setfacl)

Giờ đây, giả sử bạn cần cho phép người dùng user2 ghi vào tệp example.txt. Bạn có thể làm vậy:

sudo setfacl -m u:user2:rw example.txt

Lệnh này có nghĩa là:

  • -m: sửa đổi quyền.
  • u:user2:rw: thêm hoặc thay đổi quyền cho người dùng user2 (read-write).

Kiểm tra kết quả:

getfacl example.txt

Giờ đây kết quả sẽ như sau:

# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw  # Quy tắc bổ sung!
group::r--
other::---

Xoá quyền truy cập cá nhân setfacl -x

Nếu bạn quyết định rằng người dùng user2 không còn cần quyền ghi nữa, bạn có thể xoá quyền:

sudo setfacl -x u:user2 example.txt

Kiểm tra:

getfacl example.txt

Không còn bất kỳ quy tắc bổ sung nào cho user2!


Thiết lập quyền cho nhóm

ACL cho phép bạn thiết lập quyền không chỉ cho người dùng riêng lẻ mà còn cho cả nhóm. Ví dụ, để cho phép nhóm devteam quyền đọc và ghi, hãy chạy:

sudo setfacl -m g:devteam:rw example.txt

Thiết lập quyền mặc định setfacl -d

Đôi khi cần thiết lập quyền tự động cho tất cả các tệp và thư mục mới trong một thư mục cụ thể. Ví dụ, bạn muốn tất cả các tệp trong thư mục project_dir có quyền ghi cho người dùng developer. Trong trường hợp này:

sudo setfacl -d -m u:developer:rw project_dir

Kiểm tra quyền bằng cách chạy:

getfacl project_dir

Bây giờ tất cả các tệp và thư mục con mới trong project_dir sẽ tuân theo quy tắc mặc định này.


Xoá tất cả ACL setfacl -b

Nếu bạn muốn xoá hoàn toàn tất cả ACL cho tệp:

sudo setfacl -b example.txt

Bây giờ tệp sẽ trở lại với mô hình quyền truy cập tiêu chuẩn user:group:others.


4. Ứng dụng thực hành ACL

Kịch bản: Làm việc chung trong dự án

Giả sử bạn có một dự án được lưu trữ trong thư mục /project. Ba người làm việc:

  • Alice cần có toàn quyền (đọc, ghi, thực thi).
  • Bob chỉ cần quyền đọc file.
  • Eve không được phép thấy thư mục này.

Thiết lập điều này với ACL:

  1. Cấp cho Alice toàn quyền:

    sudo setfacl -m u:alice:rwx /project
    
  2. Cấp cho Bob chỉ quyền đọc:

    sudo setfacl -m u:bob:r-- /project
    
  3. Với Eve, không làm gì cả — cô ấy mặc định sẽ không có quyền truy cập.

Xem danh sách ACL hiện tại:

getfacl /project

Kết quả:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

Bây giờ Alice có thể làm việc mà không bị giới hạn, Bob chỉ có thể xem file, còn Eve đứng ngoài cuộc.


5. Các lỗi tiềm năng và cách khắc phục

  1. ACL không hoạt động, mặc dù bạn đã cấu hình. Có thể phân vùng không được mount với tùy chọn acl. Sử dụng mount để kiểm tra và remount nếu cần.

  2. Xung đột giữa quyền tiêu chuẩn và ACL. ACL luôn có ưu tiên hơn so với quyền tiêu chuẩn. Ví dụ, ngay cả khi "others" bị cấm đọc, ACL có thể cho phép người dùng cụ thể truy cập.

  3. Quên mất ACL kế thừa. Nếu bạn đã cấu hình quyền -d (default), hãy kiểm tra xem các quy tắc này có được kế thừa bởi các tập tin mới hay không.

Tại sao điều này quan trọng?

Quản lý quyền qua ACL cho phép bạn cấu hình truy cập linh hoạt cho các người dùng và nhóm khác nhau. Điều này cực kỳ hữu ích trên các server công việc, nơi cần phân chia quyền truy cập dựa trên vai trò. Ví dụ, trong các công ty, ACL thường được sử dụng để hạn chế truy cập chỉ dành cho những người "biết chuyện" — đây là một trong những chìa khóa của bảo mật.

Bạn có thể tham khảo thêm hướng dẫn chính thức về ACL để hiểu rõ hơn về các khả năng của chúng.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION