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:
- 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ể.
- Kế thừa quyền cho các tệp mới trong thư mục.
- 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ùnguser2
(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:
Cấp cho
Alice
toàn quyền:sudo setfacl -m u:alice:rwx /project
Cấp cho
Bob
chỉ quyền đọc:sudo setfacl -m u:bob:r-- /project
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
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ụngmount
để kiểm tra và remount nếu cần.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.
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.
GO TO FULL VERSION