Hệ thống tập tin của unix
16 Tháng 3
Hệ thống tập tin của Linux và Unix được tổ chức theo một hệ thống phân bậc tương tự cấu trúc
của một cây phân cấp. Bậc cao nhất của hệ thống tập tin là thư mục gốc, được ký hiệu bằng gạch
chéo “/” (root directory). Đối với các hệ điều hành Unix và Linux tất các thiết bị kết nối vào máy
tính đều được nhận dạng như các tập tin, kể cả những linh kiện thiết bị như ổ đĩa cứng, các phân
vùng đĩa cứng và các ổ USB. Điều này có nghĩa là tất cả các tập tin và thư mục đều nằm dưới
thư mục gốc, ngay cả những tập tin biểu tượng cho các ổ đĩa cứng.
Nằm dưới thư mục gốc (/) có một loạt các thư mục quan trọng của hệ thống tập tin được công
nhận ở tất cả các bản phân phối Linux khác nhau. Sau đây là danh sách các thư mục thông
thường được nhìn thấy dưới thư mục gốc (/) :
• /bin – chứa các ứng dụng quan trọng (binary applications),
• /boot – các tập tin cấu hình cho quá trình khởi động hệ thống (boot configuration files),
• /dev – chứa các tập tin là chứng nhận cho các thiết bị của hệ thống (device files)
• /etc – chứa các tập tin cấu hình của hệ thống, các tập tin lệnh để khởi động các dịch vụ
của hệ thống…
• /home – thư mục này chứa các thư mục cá nhân của những người có quyền truy cập vào
hệ thống (local users’ home directories),
• /lib – thư mục này lưu các thư viện chia sẻ của hệ thống (system libraries)
• /lost+found – thư mục này được dùng để lưu các tập tin không có thư mục mẹ mà được
tìm thấy dưới thư mục gốc (/) sau khi thực hiện lệnh kiểm tra hệ thống tập tin (fsck).
• /media – thư mục này được dùng để tạo ra các tập tin gắn (loaded) tạm thời được hệ
thống tạo ra khi một thiết bị lưu động (removable media) được cắm vào như đĩa CDs,
máy ảnh kỹ thuật số…
• /mnt – thư mục này được dùng để gắn các hệ thống tập tin tạm thời (mounted
filesystems),
• /opt – thư mục dùng dể chứa các phần mềm ứng dụng (optional applications) đã được cài
đặt thêm,
• /proc – đây là một thư mục đặc biệt linh động để lưu các thông tin về tình trạng của hệ
thống, đặc biệt về các tiến trình (processes) đang hoạt động,
• /root – đây là thư mục nhà của người quản trị hệ thống (root),
• Chuỗi còn lại chia ra 3 đoạn tương ứng với mỗi đoạn là quyền xác định cho chủ sở hữu,
nhóm sử dụng và người dùng khác đối với mỗi đối tượng như thế tồn tại 3 quyền căn bản
là read – writer – execute ký hiệu tương ứng là r-w-e còn ký hiệu ‘-‘ chứng tỏ không có
quyền.
Ở 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ì
1. 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.
2. 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.
3. 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” 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 file đó.
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:
1. 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.
2. 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
Set UID và Set GID cho file
SUID (set User ID) hoặc SGID (set Group ID) là việc cấu hình cho một file để khi bất kì một
user hoặc một process nào thực thi file đó đều có quyền như thể user hoặc process đó là chủ sở
hữu hoặc thuộc nhóm chủ sở hữu của file.
Ví dụ: root sở hữu file “program” (executable file); root đặt quyền execute cho mọi user. Do đặc
tính của program mà khi được thực thi nó cần người thực thi là root. Nếu một normal user chạy
(thực thi) program thì sẽ bị báo lỗi không là root. Do vậy để một user bất kì có thể chạy được
program thì root cần set user id cho program.
Set user id cho một file: chmod u+s myfile (hoặc dạng tắt chmod +s
myfile)
Set group id cho một file: chmod g+s myfile
Nếu dùng lệnh ls-l cho một file đã được set UID hoặc GID thì sẽ thấy kí tự x chỉ quyền execute
đã được thay thế bằng kí tự s. Ví dụ:
-rws–x–x 1 root root 14024 Sep 9 1999 file1
-rwxr-sr-x 1 root mail 12072 Aug 16 1999 file2
Ở đây file1 đã được set UID, file2 đã được set GID. Khi file1 được thực thi thì user thực thi file1
như thể là root. Khi file2 được thực thi thì user thực thi file2 như thể là thuộc nhóm mail.
Việc set UID và set GID chỉ có ý nghĩa khi file được đặt quyền execute cho đối tượng o (tức là
các user không cùng nhóm chủ sở hữu). Ở ví dụ trên nếu tập quyền của file1 và file2 không có
chữ “x” ở cuối thì việc có chữ “s” là vô nghĩa.
Set GID cho thư mục
Ở trên đã nói về set UID, GID cho file. Với thư mục, không có thao tác set UID mà chỉ có thao
tác set GID; Lệnh set GID cho thư mục cũng giống như set GID cho file: chmod g+s mydir
nhưng ý nghĩa của nó thì khác hẳn.
Khi một file/thư mục (con) được tạo mới trong một thư mục cha, theo mặc định file/thư mục đó
có nhóm chủ sở hữu là primary group của user tạo ra file/thư mục đó. Nhưng nếu thư mục cha
được set GID thì mọi file/thư mục con của thư mục đó khi được tạo mới sẽ có nhóm chủ sở hữu
chính là chủ sở hữu của thư mục.
Việc set GID cho thư mục rất hữu ích như ở ví dụ sau. Giả sử hệ thống có user Lan, Thanh, Ba
cùng làm việc ở phòng kế toán và ba user này được root đặt thuộc cùng một group là
con đó (và dĩ nhiên cả root) thì sticky bit cho thư mục X cần được thiết lập.
Đặt sticky bit cho một thư mục: chmod +t mydir
Một thư mục khi đã được đặt sticky bit thì kí tự “x” cuối cùng trong tập quyền của thư mục đó sẽ
được thay thế bằng kí tự “t”.
Ví dụ: lệnh ls –l cho một thư mục
drwxrwxrwt 13 root root 4096 Apr 15 08:05 tmp
Thư mục /tmp trong Linux được mặc định đặt sticky bit.
Kí hiệu SUID, SGID, Sticky bit bằng chữ số
Ba quyền đặc biệt SUID, SGID, Sticky bit có thể được kí hiệu bằng chữ số 4, 2, 1 và được đặt
trước 3 chữ số kí hiệu cho 3 quyền cơ bản r, w, x.
Ví dụ 1: chmod 1457 myDir ó chmod u=x,g=rx,o=rwx,+t myDir
Chú ý: Không thể đảo +t lên trước chuỗi u=x,g=rx,o=rwx được, đây là qui ước.
Chữ số 1 ở đây là chỉ +t chứ không phải quyền +r.
Ví dụ 2: chmod 6777 myFile ó chmod ugo=rwx,u+s,g+s myFile
Tổng kết lại về quyền đặc biệt:
Quyền Chữ số kí
hiệu
Kí tự kí
hiệu
Với file myfile Với thư mục mydir
SUID 4 u+s Một user bất kì thuộc nhóm
o (others) thực thi myfile
như thể là chủ sở hữu của
file
-
SGID 2 g+s Một user bất kì thuộc nhóm
o (others) thực thi myfile
như thể user đó thuộc nhóm
chủ sở hữu của file
File/thư mục con (của thư mục