- Back to Home »
- Linux Basic , Linux PC »
- File permissions
Saturday, June 20, 2015
Bài viết liên quan: Users and Groups
1. File permissions
Với mỗi file,thư mục trong Linux, người dùng có thể có quyền r(read), w(write), x(excute).
Thường một normal user có thể không có đủ 3 quyền trên với một số file, thư mục nào đó. Riêng root có tất cả các quyền r, w, x với tất cả các file, thư mục trong hệ thống (dù hệ thống đang ở trạng thái single user hay multi-user).
Với mỗi file, người dùng được xếp vào một trong 3 loại đối tượng:
- Chủ sở hữu file, kí hiệu là u (user).
- Cùng group với nhóm chủ sở hữu file, kí hiệu là g (group). Tất cả các user thuộc nhóm chủ sở hữu file có cùng một quyền với file
- Khác với 2 loại trên, kí hiệu là o (other)
Mỗi loại đối tượng trên sẽ có một số quyền trong 3 quyền r, w, x. Lệnh ls -l cho biết quyền của mỗi loại đối tượng trên theo format như dưới đây:
Ex:
[ninhld@localhost docs]$ ls -l
total 14544
-rwxrwxr-x. 1 ninhld ninhld 1449498 Jun 13 2013 Building Embedded Linux Systems.pdf
drwxrwxr-x. 2 ninhld ninhld 4096 Jun 23 21:02 mydir
Khi một file được tạo ra thì mặc định chủ sở hữu file chính là user tạo ra file, nhóm chủ sở hữu file là primary group của user tạo ra file. Khi một user copy file X thành file Y thì file Y được coi là user X tạo ra do đó chủ sở hữu, nhóm chủ sở hữu của Y chính là user X, primary group của X. Chỉ có root mới có quyền thay đổi chủ sở hữu của file, ngay cả chủ sở hữu của một file cũng không thể chuyển quyền sở hữu của mình cho người khác. Tuy nhiên chủ sở hữu của file có quyền thay đổi nhóm chủ sở hữu của file. Để thay đổi chủ sở hữu, nhóm chủ sở hữu:
chown [chủ] [.nhóm] <file>chown là viết tắt của "change own"
Ex:
User "lan" vừa tạo ra file "document", user "lan" trở thành chủ sở hữu của file "document". Primary group của user "lan" là "lan" trở thành nhóm chủ sở hữu của file "document". Nếu user "lan" muốn chuyển quyền sở hữu sang user "thanh" thì user "lan" cần đăng nhập bằng root và thực hiện lệnh:
chown thanh documentNếu user "lan" muốn thay đổi nhóm chủ sở hữu từ "lan" sang "ITdepart" thì user "lan" cần đăng nhập bằng root và thực hiện lệnh:
chown .ITdepart documentHai lệnh trên có thể gộp lại thành:
chown thanh.ITdepart document(chú ý dấu chấm viết ngay sau chủ sở hữu mới)
Nếu chỉ thay đổi nhóm chủ sở hữu có thể dùng lệnh
chgrp <nhóm> <file>(chgrp là viết tắt của "changegroup")
Vẫn ở ví dụ trên khi đổi nhóm chủ sở hữu có thể dùng lệnh:
chgrp ITdepart documentKhi thay đổi chủ sở hữu đối với thư mục cần thêm tham số -R
Ex: thay đổi chủ sở hữu, nhóm chủ sở hữu cho thư mục Dir
chown -R .ITdepart Dir
hoặc
chgrp -R ITdepart Dir
Ở trên đã đề cập đến 3 loại quyền truy cập đối với file là read, write, execute; cụ thể hơn thì:
- read: quyền đọc file và do đó có thể sao chép lại file. Khi có quyền đọc file thì không có nghĩa là có quyền ghi (sửa đổi) file nhưng vì có thể sao chép lại file nên có thể sửa đổi bản sao chép
- write: quyền ghi file. Chú ý rằng có thể có quyền ghi mà không có quyền đọc một file. Ví dụ: có file text "document.txt". Nếu có quyền đọc và quyền ghi file này thì người dùng có thể dùng trình soạn thảo văn bản vi, emacs,...để hiển thị toàn bộ nội dung file và tìm những chỗ không vừa ý để sửa chữa. Nếu chỉ có quyền ghi file mà không có quyền đọc thì người dùng không thể dùng trình soạn thảo để sửa chữa file nhưng người dùng có thể dùng lệnh cat >> document.txt để ghi thêm vào cuối file hoặc cat > document.txt để ghi đè lên toàn bộ nội dung của file
- execute: quyền thực thi file. Có hai loại file có thể thực thi được là:
(1) file chứa các lệnh máy mà CPU có thể thực thi luôn được, những file kiểu này gọi là executable file
(2) file text chứa các lệnh cần thực hiện, những file kiểu này được gọi là script. Quyền thực thi file độc lập với quyền đọc và ghi file. Ví dụ có file script "Procedure.sh" với quyền thực thi mà không đọc, ghi; người dùng có thể thực thi các lệnh chứa trong file này nhưng không thể mở file ra xem các lệnh đó là gì và cũng không thể thêm bớt, sửa chữa các lệnh trong file này. Việc xóa, đổi tên một file không được quyết định bởi quyền ghi với file đó mà bởi quyền ghi với thư mục chứa filed đó.
Ba quyền read, write, execute cũng được áp dụng với thư mục nhưng ý nghĩa của chúng thì khác hoàn toàn:
- read: quyền đọc một thư mục là quyền liệt kê các file, thư mục con của một thư mục.
- write: quyền ghi một thư mục là quyền tạo mới, xóa, đổi tên file và thư mục con của thư mục. Có thể xảy ra trường hợp: có quyền ghi một file tức là sửa chữa nội dung của file nhưng lại không có quyền đổi tên, xóa file nếu như không có quyền ghi với thư mục chứa file đó.
- execute: quyền thực thi một thư mục là quyền "đi vào" thư mục, chẳng hạn bằng lệnh cd. Có thể xảy ra trường hợp: có quyền thực thi nhưng lại không có quyền đọc một thư mục. Khi đó có thể "cd" một thư mục nhưng lại không thể "ls" nó ra. Khi thư mục không có quyền excute thì không thể truy cập nội dung các file trong thư mục đó.
Ex:
Giả sử user U1 có file FileOfU1 đặt trong /home/U1 muốn chia sẻ với các user khác nên đã đặt quyền r,w cho file. Tuy nhiên bản thân thư mục /home/U1 khi được tạo ra đã bị mặc định là không có quyền excute nên các user khác không thể đọc, ghi file /home/U1/FileOfU1 được.
Chủ sở hữu và root có quyền thay đổi quyền truy cập đối với cả 3 loại đối tượng: chủ sở hữu (user), nhóm chủ sở hữu (group), những user khác không thuộc 2 loại trên (others).
Lệnh thay đổi quyền truy cập:
chmod <quyền> <file>(viết tắt chmod = change mode)
Có 2 cách biểu diễn <quyền>: bằng kí tự hoặc bằng chữ số
- Cách1: Biểu diễn quyền bằng kí tự: quyền được biểu diễn bằng tổ hợp 3 loại kí tự sau
Ex:
chmod u+r,o+s myfile
chmod uo=rx,g=-myfile
chmod a=rwx myfile (chmod ugo=rwx myfile)
chmod +x myfile (chmod u+x,g+x,o+x myfile)
Chú ý: chmod u+r,o+x myfile và chmod u=r,o=x myfile là hai lệnh khác nhau
- Cách2: Biểu diễn quyền bằng chữ số octal: dùng 3 chữ số để biểu diễn quyền của 3 loại đối tượng u,g,o. Giá trị mỗi chữ số octal biểu diễn một quyền theo bảng sau:
Ex:
chmod 567 myfile (chmod u=rx,g=wx,o=rwx myfile)
chmod 640 myfile (chmod u=wx,g=x,o=- myfile)
Note: Khi chmod đối với thư mục, nếu muốn áp dụng quyền nào đó cho tất cả các file và thư mục con trong đó thì cần thêm option là "-R"
Ex:
chmod 755 -R mydir
+ Link 1