Friday, July 26, 2013

File Permission trong Linux

Một trong những thành phần chính của hệ điều hành Linux là hệ thống quyền hạn truy cập (permission) áp dụng cho mọi đối tượng (file, thư mục, link…). Hệ thống này đóng 1 vai trò quan trọng trong việc đem lại mức an ninh cao cho Linux.
Mỗi 1 đối tượng gắn với 3 loại quyền: read (đọc), write (sửa đổi) vàexecute (thực thi). Và mỗi quyền này lại được chỉ định cho 3 loại user:
+ owner: chủ sở hữu của đối tượng – mặc định ban đầu là user tạo ra đối tượng đó.
+ group: 1 nhóm các user có các quyền hạn giống nhau đối với đối tượng – mặc định ban đầu là group mà owner ở trên thuộc về.
+ other: tất cả các user không thuộc 2 nhóm trên
Ý nghĩa của 3 loại quyền trên là:
+ Đối với thư mục:
  • Read: chỉ cho phép sử dụng lệnh ls để xem tên các đối tượng có trong thư mục, nếu muốn xem thêm các thông tin như: kích thước, quyền hạn truy cập, chủ sở hữu, ngày khởi tạo… bạn cần cấp thêm cho thư mục quyền execute.
  • Write: cho phép tạo và xóa các đối tượng trong thư mục.
  • Execute: chỉ cho phép chuyển vào thư mục sử dụng lệnh cd.
+ Đối với file:
  • Read: cho phép xem nội dung của file.
  • Write: cho phép chỉnh sửa nội dung, xóa file.
  • Excute: cho phép chạy file, quyền này thường được gán các file nhị phân thực thi (tương tự như file .exe trong Windows).
User root có đủ cả 3 quyền đối với mọi đối tượng trên hệ thống. Ngoài ra, root có thể thay đổi (cấp hoặc tước) quyền hạn truy cập đối tượng cho bất kỳ user nào và còn có thể chuyển quyền sở hữu đối tượng qua lại giữa các user.
Các quyền trên được ký hiệu như sau:
- Read: ký hiệu là r hoặc số 4
- Write: ký hiệu là w hoặc số 2
- Excute: ký hiệu là x hoặc số 1
Vì mỗi đối tượng có 3 loại quyền cho mỗi loại user nên có tất cả 9 bit thông tin về quyền hạn tương ứng với mỗi đối tượng. Mỗi bit trong 9 bit này nhận 1 trong 2 giá trị: được phép (allow) hoặc bị cấm (deny).
Các quyền hạn của 1 đối tượng được biểu diễn theo 2 cách:
a) Cách 1: bao gồm 1 chuỗi 10 ký tự, theo thứ tự từ trái sang phải thì
• Ký tự đầu thể hiện loại file: ví dụ, d cho thư mục (được coi là file đặc biệt), - cho file thông thường, l cho các link (hard link, symbolic link)…
• 3 ký tự kế tiếp là các quyền cho owner, kế đến là 3 ký tự biểu diễn các quyền cho group, còn lại 3 ký tự cuối dành cho other
• Bit nào mang giá trị allow thì với read sẽ là r, write là w, excute là e. Vị trí các bit mang giá trịdeny được biểu diễn bằng dấu 
Sử dụng lệnh ls –l filename để biết thông tin về các quyền của đối tượng tên filename. VD:
-rwxrw-r–
+ đây là file thông thường
+ owner có quyền đủ 3 quyền read, write, excute; group có 2 quyền read và write; other chỉ có quyền read
d-w-r-xr-x
+ đây là thư mục
+ owner chỉ có quyền write; cả group và other có quyền read và excute
b/ Cách 2: ngắn gọn hơn, gồm 3 số hệ bát phân
Số đầu cho owner, số thứ 2 cho group, số còn lại cho other. Mỗi 1 số nhận 1 trong 8 giá trị sau
+ 0 : cấm tất cả các quyền                   + 1 : execute               + 2 : write
+ 3 : execute + write                           + 4 : read                     + 5 : read + execute
+ 6 : read + write                                 + 7 : read + write + execute
————-
  • Để thay đổi quyền hạn lên đối tượng cho các user sử dụng lệnh chmod (bạn phải là owner của file hặc có quyền root)
  • Để thay đổi owner cho đối tượng sử dụng lệnh chown (bạn phải có quyền root)
  • Để thay đổi group cho đối tượng sử dụng lệnh chgrp nhưng phải thỏa 1 trong 2 điều kiện:
- chạy lệnh chgrp với quyền root
- bạn là owner của file đồng thời cũng thuộc Group (có tên là Group_Name trong lệnh) mà bạn muốn thay đổi Group cho file
Chi tiết về cách sử dụng các lệnh trên cũng như là bàn về các bit đặc biệt: SUID, GUID, Sticky sẽ được giới thiệu trong các kỳ tiếp theo…