Trong bài biết này chúng ta sẽ tìm hiểu cách phân quyền cho file và thư mục trong linux một cách đầy đủ và dễ hiểu nhất
1. Tìm hiểu hệ thống quản lý file trong linux
Mỗi tập tin (file) có một chủ sở hữu (owner), xác định người dùng (user) sở hữu của file. Mỗi file cũng có một nhóm (group), xác định nhóm người dùng của file. Bất kỳ người dùng hệ thống nào không phải là chủ sở hữu và không thuộc cùng một nhóm đều được xác định là thuộc lớp khác (others).
Mỗi người dùng thuộc 1 trong ba nhóm owner, group, other sẽ được chỉ định các quyền read (đọc – khả năng mở và xem nội dung của file), write (ghi – khả năng mở và sửa đổi nội dung của file) và execute (thực thi – khả năng chạy file như một chương trình thực thi khác nhau.
Để xem cấu trúc của một tập tin, thư mục, chúng ta gõ lệnh sau:
# ls -la
Giải thích ý nghĩa của từng chỉ số
-rw-r--r-- 1 root root 0 Mar 6 21:04 .autofsck
-rw-r--r-- 1 root root 0 Dec 2 11:41 .autorelabel
dr-xr-xr-x. 2 root root 4096 Mar 6 21:06 bin
dr-xr-xr-x. 4 root root 4096 Dec 2 11:38 boot
__________________________________________
^ ^ ^ ^ ^ ^ ^ ^ ^-- Ngày tháng tạo ra file và tên file
| | | | | | | |
| | | | | | | \--- Dung lượng của file/folder
| | | | | | \-------- Tên group sở hữu
| | | | | \--------------- Tên user sở hữu
| | | | \---------------------- Hard link, thể hiện nhiều file hoặc thư mục có cùng sử dụng chung inode
| | | |
| \--\--\----------------------------- Các chỉ số phân quyền
\------------------------------------- Loại file (chữ d nghĩa là thư mục)
2. Phân quyền cho tập tin và thư mục
Trong Linux có 3 quyền cơ bản của 1 user và group đó là:
- r (read) – quyền đọc file/folder
- w (write) – quyền ghi/sửa nội dung file/folder
- x (execute) – quyền thực thi (truy cập) thư mục. Đối với thư mục thì bạn cần phải có quyền execute thì mới dùng lệnh cd để truy cập vào được
- – (Deny) – Không có quyền
Các quyền này cũng có thể xác định bằng các con số tương ứng:
- r (read) – được biểu diễn bằng số 4.
- w (write) – được biểu diễn bằng số 2.
- x (execute) – được biểu diễn bằng số 1.
- – (Deny) – được biểu diễn bằng số 0
Cấu trúc chỉ số phân quyền
- u (owner): Quyền của user mà chủ sở hữu của file này.
- g (group): Quyền của những users thuộc group mà chủ sở hữu của file này.
- o (other): Quyền của tất cả các user khác trên máy.
- a (all): tất cả user
Ví dụ file test1 có thông số như sau
- owner có quyền r+w+- = 4+2+0 = 6
- group có quyền r+-+- = 4+0+0 = 4
- other có quyền r+-+- = 4+0+0 = 4
Thông số file test2 như sau
- owner có quyền r+w+x = 4+2+1 = 7
- group có quyền r+-+x = 4+0+1 = 5
- other có quyền r+-+x = 4+0+1 = 5
Thông số file test3 như sau
- owner có quyền r+w+x = 4+2+1 = 7
- group có quyền r+w+- = 4+2+0 = 6
- other có quyền r+w+- = 4+2+0 = 6
Chỉ số phân quyền của 3 file sẽ là test1=644, test2=755, test3=766
Để thay đổi phân quyền cho file và thư mục ta sẽ dử dụng lệnh chmod
# chmod <tùy chọn> <chỉ số phân quyền> <tên tập tin/thư mục>
Các tùy chọn
- -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi quyền là hiển thị một lần
- -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
- -R : Áp dụng luôn vào các file/folder nằm bên trong folder được phân quyền (chỉ áp dụng cho thư mục)
Ví dụ: Bạn muốn phân quyền cho file test1
# chmod 777 test1 <Cấp quyền truy cập đầy đủ cho mọi đối tượng người dùng.>
# chmod 775 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống và nhóm quản trị, đối tượng người dùng chỉ có quyền đọc (read) và chạy (execute) file.>
# chmod 755 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống, chỉ cho phép nhóm quản trị và đối tượng người dùng đọc và chạy các file trong thư mục.>
# chmod 700 test1 <Chỉ cấp quyền truy cập đầy đủ cho chủ hệ thống và chặn truy cập với mọi đối tượng khác.>
# chmod 500 test1 <Không cho phép nhóm quản trị và người dùng truy cập vào file trong thư mục, đồng thời giới hạn quyền chủ hệ thống chỉ đọc và chạy để tránh xóa và thay đổi các file trong thư mục này.>
# chmod 660 test1 <Cho phép chủ hệ thống và nhóm quản trị đọc, sửa, xóa và ghi dữ liệu vào file, nhưng không phân quyền truy cập cho những người dùng khác.>
Ngoài cách phân quyền thông qua chỉ số, chúng ta có thể sử dụng cách phân quyền qua các ký hiệu tượng trưng:
Ví dụ:
Cho chủ sở hữu quyền đọc/ghi/thực thi nhưng nhóm và các người dùng khác chỉ có quyền đọc/thực thi:
# chmod u=rwx,g=rw,o=rw test1
Khi gán cùng một quyền cho nhiều lớp, bạn có thể kết hợp chúng:
# chmod u=rwx,go=rw test1
Nhưng lợi ích của việc sử dụng ký hiệu tượng trưng sẽ được thấy rõ khi bạn chỉ muốn thêm hoặc xóa quyền cho một hành động cụ thể đối với một lớp.
Ví dụ, lệnh sau thêm quyền thực thi cho chủ sở hữu file:
# chmod u+x test1
Và lệnh này loại bỏ quyền ghi và thực thi cho người dùng khác:
# chmod o-wx tes1
Nếu bạn cần cấp quyền cho toàn bộ 1 thư mục thì nhớ thêm tuỳ chọn -R
Cho phép toàn bộ file và thư mục con trong thư mục dir1 có toàn quyền với tất cả mọi user
# chmod -R a+rws dir1
3. Thay đổi chủ sở hữu cho tập tin thư mục
Mặc định tập tin và thư mục đều có user group riêng của nó, nếu bạn muốn thay đổi bạn sẽ dùng lệnh chown
# chown <tùy chọn> <tên user>:<tên group> <tên tập tin/thư mục>
Các tùy chọn
- -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi chủ sở hữu là hiển thị một lần
- -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
- -R : Áp dụng luôn vào các file/folder nằm bên trong folder được đổi chủ (chỉ áp dụng cho thư mục)
Ví dụ:
Bạn muốn thay đổi chủ sở hữu cho file test1
# chown user1:group1 test1 <Thay đổi cả user và group cho test1>
# chown user1 test1 <Thay đổi user cho test1>
# chown :group1 test1 <Thay đổi group cho test1>
Thay đổi chủ sở hữu cho một thư mục dir1
#chown -R user1:group1 dir1
4. Tổng kết
Đối với các bạn mới làm quen với hệ thống linux thì việc phân quyền file và thư mục có vẻ khá phức tạp, tuy nhiên nếu bạn hiểu rõ cơ chế hoạt động cũng như làm thử các thao tác sẽ thấy việc phân quyền này không khó như bạn nghĩ. Chúc các bạn thành công!