(Tham khảo từ Google với từ khóa chính là tiêu đề của bài viết)
Bài viết cung cấp nền tảng và chức năng chính của ACLs trong hệ thống file của Linux. Bạn cũng sẽ học được cách mở rộng các khái niệm permissions truyền thống với ACLs và những thuận lợi trong việc cung cấp khái niệm này.
Thuận lợi của ACLs
Thông thường 1 file trong Linux có 3 quyền: r, w, x với 3 nhóm người dùng: owner, group, other. 9 bits này được sử dụng để xác định đặc tính cho tất cả các hệ thống file trong Linux. Thêm vào đó, SUID, SGID, sticky bit có thể được dùng trong các trường hợp đặc biệt.
ACLs được sử dụng trong trường hợp mà các khái niệm permission của file thông thường không có hiệu lực. Chúng cho phép gán quyền cho một người, hoặc một nhóm cá nhân thậm chí không tương ứng với owner hoặc owning group. ACLs hỗ trợ các hệ thống file ReiserFS, Ext2, Ext3, JFS, XFS.
Bạn có thể thấy rõ thuận lợi của ACLs khi thay thế 1 server chạy Windows bằng 1 server chạy Linux. Một số trạm kết nối vẫn có thể chạy trên Windows ngay cả sau khi chuyển đổi. Hệ thống Linux sẽ chuyển các file và dịch vụ về clients chạy windows với Samba. Samba cũng hỗ trợ ACLs và lúc đó quyền của người dùng có thể được cấu hình trên cả Linux và Windows bằng GUI. winbindd còn có khả năng gán quyền cho user chỉ tồn tại trên Windows domain mà ko có account nào trên Linux server. Mặt khác bạn có thể chỉnh sửa ACLs với getfacl và setfacl
Định nghĩa
POSIX sử dụng 3 lớp người dùng để gán quyền cho hệ thống file.
Access ACL: áp dụng cho cả file và thư mục
Default ACL: chỉ áp dụng cho thư mục. Chúng xác định quyền kế thừa từ thư mục cha khi được tạo.
ACL entry: Mỗi ACL sẽ bao gồm 1 tập hợp ACL entries. Một ACL entry sẽ chứa 1 loại, 1 hạn định mà user hoặc group nó tham chiếu đến, và một tập hợp các quyền.
Handing ACLs
Cấu trúc của ACLs entries
Về cơ bản, ACL chia thành 2 lớp: minimum ACL chỉ đơn giản gồm các quyền như hệ thống file truyền thống. Extended ACL mở rộng hơn, nó chứa đựng 1 mask entry, và có thể bao gồm các entries cho loại named user, named group. Các permission được định nghĩa trong owner và other luôn luôn có hiệu lực. Ngoại trừ mask entry thì các entries khác luôn có hiệu lực hoặc là được masked. Nếu các quyền tồn tại trong 1 hoặc 1 số entry trên được mask thì chúng cũng có hiệu lực. Permission chỉ chứa mask hoặc duy nhất 1 entry thực sự thì sẽ không có hiệu lực.
ACL entries và File mode permission bits
ACL được cấu tạo theo 3 khối:
Không có mask: owning group map với group class
có mask: mask map với group class
Quá trình map này đảm bảo việc tương tác giữa các ứng dụng được và không được hỗ trợ bởi ACLs. Quyền truy cập được gán bởi bit quyền đại diện cho giới hạn cao nhất. Tất cả các quyền không phản ánh ở đây hoặc là ko được gán trong ACL hoặc là không có hiệu lực.
Một thư mục với truy cập ACL
Việc xử lý ACL được giải thích theo 3 bước:
+ Tạo file
+ Chỉnh ACL
+ Dùng masks
Trước khi bạn tạo thư mục hãy dùng umask để xác định quyền truy cập ban đầu.
Code:
$ umask 027
Sau đó tạo mydir:
Code:
$ mkdir mydir
Sau khi tạo mydir hãy dùng ls -dl để kiểm tra lại là quyền đã được gán chính xác:
Code:
$ ls -dl mydir/
drwxrwx---+ 2 quanta quanta 4096 2007-12-29 22:53 mydir/
Kiểm tra trạng thái khởi đầu của ACL và chèn một new user và new group entry
Code:
$ getfacl mydir/
# file: mydir
# owner: quanta
# group: quanta
user::rwx
group::r-x
other::---
Đầu tiên hãy thử chỉnh sửa bằng cách: gán quyền đọc, ghi, thi hành cho user kitty và group friends:
Code:
$ setfacl -m user:kitty:rwx,group:friends:rwx mydir/
Tuỳ chọn -m sẽ nhắc setfacl chỉnh sửa một ACL đã tồn tại.
Thử xem kết quả với lệnh getfacl xem sao:
Code:
$ getfacl mydir/
# file: mydir
# owner: quanta
# group: quanta
user::rwx
user:kitty:rwx
group::r-x
group:friends:rwx
mask::rwx
other::---
Ngoài các entries khởi tạo cho user kitty và group friends, mask entry cũng được tạo ra. mask entry này được gán tự động để giảm thiểu số lượng các entries trong group class để gọi tên thông thường. mask định nghĩa quyền truy cập có hiệu lực lớn nhất cho tất cả các entries trong group class: named user, named group, owning group. Do đó, mask entry tương ứng với bit quyền của group class - được hiển thị bằng lệnh ls -dl
Code:
$ ls -dl mydir/
drwxrwx---+ 2 quanta quanta 4096 2007-12-29 22:53 mydir/
Bạn chú ý, cột đầu tiên của output chứa đựng một dấu +, đây là ký tự đại diện cho một extended ACL
Theo output trên, permission của mask entry cũng bao gồm quyền write, theo đó owning group cũng có quyền write thư mục mydir.
Bây giờ thử dùng chmod hoặc setfacl để disabled quyền write của group class xem sao, output của lệnh ls cho thấy mask bits đã được điều chỉnh với chmod:
Code:
$ sudo chmod g-w mydir/
Code:
$ getfacl mydir/
# file: mydir
# owner: quanta
# group: quanta
user::rwx
user:kitty:rwx #effective:r-x
group::r-x
group:friends:rwx #effective:r-x
mask::r-x
other::---
Một thư mục với default ACL
default ACL định nghĩa tất cả các quyền truy cập kế thừa từ thư mục này khi nó được tạo. default ACL ảnh hưởng đến các thư mục con cũng như là các files.
Ảnh hưởng của Default ACLs
Về cơ bản quyền của ACL được handled theo 2 cách:
+ 1 thư mục kế thừa default ACL từ thư mục cha
+ 1 file kế thừa từ default ACL và nó sở hữu Access ACL
Tất cả các hệ thống tạo file đều sử dụng mode parameter để định nghĩa quyền truy cập cho file mới được tạo:
+ Nếu thư mục không có default ACL,một sự giao nhau giữa các quyền trong mode parameter và trong umask hiện tại sẽ được tạo và gán cho đối tượng
+ Nếu default ACL tồn tại trong thư mục cha, bit quyền được xác định theo sự giao nhau giữa giá trị của mode parameter và quyền định nghĩa trong default ACL, và được gán cho đối tượng.
Ứng dụng của default ACLs
+ Tạo một default ACL cho một thư mục đã tồn tại
+ Tạo một thư mục con trong thư mục có default ACLs
+ Tạo một file trong thư mục có default ACLs
Thêm một default ACLs vào một thư mục đã tồn tại mydir:
Code:
$ setfacl -d -m group:friends:r-x mydir/
Tuỳ chọn -d sẽ nhắc setfacl thực hiện một "chỉnh sửa" trên default ACLs
Xem kết quả của lệnh này:
Code:
$ getfacl mydir/
# file: mydir
# owner: quanta
# group: quanta
user::rwx
user:kitty:rwx #effective:r-x
group::r-x
group:friends:rwx #effective:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:friends:r-x
default:mask::r-x
default:other::---
getfacl sẽ trả về cả access ACL và default ACL.
Tiếp theo thử tạo một thư mục con trong mydir, bạn sẽ thấy thư mục con này kế thừa default ACL từ mydir:
Code:
$ mkdir mydir/mysubdir
Code:
$ getfacl mydir/mysubdir/
# file: mydir/mysubdir
# owner: quanta
# group: quanta
user::rwx
group::r-x
group:friends:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:friends:r-x
default:mask::r-x
default:other::---
Bạn thấy rõ là access ACL của mysubdir phản ánh chính xác default ACL của mydir.
Sử dụng touch để tạo một file trong thư mục mydir:
Code:
$ touch mydir/myfile
Code:
$ ls -l mydir/myfile
-rw-r-----+ 1 quanta quanta 0 2008-01-07 00:59 mydir/myfile
Code:
$ getfacl mydir/myfile
# file: mydir/myfile
# owner: quanta
# group: quanta
user::rw-
group::r-x #effective:r--
group:friends:r-x #effective:r--
mask::r--
other::---