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), • /sbin – thư mục này lưu lại các tập tin thực thi của hệ thống (system binaries) • /sys – thư mục này lưu các tập tin của hệ thống (system files), • /tmp – thư mục này lưu lại các tập tin được tạo ra tạm thời (temporary files), • /usr – thư mục này lưu và chứa những tập tin của các ứng dụng chính đã được cài đặt cho mọi người dùng (all users), • /var – thư mục này lưu lại tập tin ghi các số liệu biến đổi (variable files) như các tập tin dữ liệu và tập tin bản ghi (logs and databases). Ổ đĩa và các Partition được xác định theo dạng tập tin có quy ước như sau: • /dev/hda Ổ đĩa cứng IDE đầu tiên (chính) • /dev/hdb Ổ đĩa cứng IDE thứ hai (thứ cấp) • /dev/sda Ổ đĩa cứng SCSI đầu tiên • /dev/sdb Ổ đĩa cứng SCSI thứ hai • /dev/fd0 Ổ đĩa mềm đầu tiên • /dev/fd1 Ổ đĩa mềm thứ hai Trong đó quy tắc phân vùng có đặc điểm khá phức tạp điển hình lấy vd chúng ta có một ổ cứng IDE chính sẽ có tên tập tin là /dev/had tuy nhiên nếu chúng ta phân vùng ổ đĩa thì sẽ có quy ước theo mã số như sau phần vùng chính sẽ có tên tập tin hda1 và phân vùng logic sẽ co tên tập tin là hda5. Hay đơn giản hơn chỉ có thể có 4 phân vùng chính có số thứ tự từ 1 à 4 (hda1, hda2, hda3, hda4) trong khi đó các phân vùng logic thì bắt đầu từ 5 (hda5,hda6…) Thông qua lệnh ls chúng ta sẽ có được thông tin của một tập tin trong hệ thống. Ví dụ chúng ta có thông tin một tập tin như sau: P/s: để xem thông tin một file dùng lệnh ls-l <file path> 1. Xác định thông tin các quyền truy cập tập tin • Dấu ‘-‘ đầu tiên xác định loại tập tin Ký hiệu Ý nghĩa - Tập tin thông thường b Tập tin đặc biệt Block c Tập tin đặc biệt ký tự d Thư mục l Tập tin liên kết (mềm/cứng) • 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 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 đó. 3. 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 đó. Ví dụ: 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ách 1: 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 Ví dụ: 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ách 2: 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: Ví dụ: chmod 567 myfile (ó chmod u=rx,g=wx,o=rwx myfile) chmod 640 myfile (ó chmod u=wx,g=x,o=- myfile) Ngoài 3 chữ số cho quyền r, w, x còn có thể có thêm chữ số cho UID, GID, Sticky bit đứng đầu như trong lệnh chmod 1640 myfile SUID, SGID, sticky bit Ngoài 3 quyền cơ bản là là read, write, execute; còn có 3 quyền đặc biệt khác là setUID, setGID, sticky bit. 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à AccountDepart. Root tạo cho ba người một thư mục dùng chung là SharedDir để ba người chia sẻ công việc với nhau; ShareDir có nhóm chủ sở hữu là AccountDepart. Nếu root không set GID cho thư mục ShareDir, thì khi Lan tạo một file, theo mặc định file đó có nhóm chủ sở hữu là primary group của Lan tức là group có tên cũng là Lan. Lúc đó user Thanh, Ba vì không thuộc về group Lan nên cũng chỉ có quyền như những người khác không thuộc phòng kế toán (không thuộc group AccountDepart). Để giải quyết bất tiện này hoặc mỗi lần tạo file, Lan phải đặt lại nhóm chủ sở hữu của file đó thành AccountDepart (bằng lệnh chgrp); hoặc đơn giản hơn là root chỉ việc set GID cho thư mục ShareDir. Khi đó mọi file, thư mục con mà Lan, Thanh, Ba tạo ra trong ShareDir đều có nhóm chủ sở hữu là AccountDepart. Mọi người trong phòng kế toán (thuộc group AccountDepart) sẽ có quyền với một file nào đó của phòng khác hẳn với những người không thuộc phòng kế toán. Một thư mục khi được set GID, ở vị trí xuất hiện chữ “x” thứ hai trong tập quyền của nó sẽ có chữ “s” Ví dụ lệnh ls –l cho một thư mục đã được set GID drwxrwsr-x 2 root AccountDepart 1674 Apr 15 08:05 ShareDir Sticky bit Bit này chỉ hệ thống biết sau khi dừng chương trình cần lưu lại nó trong bộ nhớ, tiện khi cho những chương trình thường gọi vì sẽ tiết kiệm được thời gian nạp chương trình vào bộ nhớ mỗi lần chạy. Bit này còn quy định mọi người dùng có quyền write trên nó, nhưng chỉ có chủ sở hữu mới có quyền xóa nó. Đối với file, sticky bit thường chỉ được dùng với các thực thi thôi và thường thì chỉ có root hoặc các users có quyền hạn cao mới được bật hay tẳt sticky bit cho file! Khi một file thực thi có sticky bit được bật, file này sẽ được nạp vào swap-space(không gian swap) của Unix để có thể chạy nhanh. Bạn hãy để ý, các chương trình như vi, vim, pico, pine thường được bật sticky bit vì người dùng thường sử dụng các chương trình này thường xuyên mà! Đối với thư mục, Khi nhiều người cùng có quyền write với một thư mục tức là có quyền tạo mới, xóa, đổi tên file, thư mục con của thư mục đó thì xảy ra vấn đề: một file được tạo trong thư mục bởi người này nhưng người khác lại có quyền xóa hoặc sửa chữa. Để đảm bảo mọi file/thư mục con của một thư mục X chỉ bị xóa hoặc sửa đổi bởi chỉ người chủ sở hữu của file/thư mục 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 mydir) có nhóm chủ sở hữu là nhóm chủ sở hữu của mydir Sticky bit1 +t - File/thư mục con (của thư mục mydir) được bảo đảm chỉ bị xóa/sửa đổi bởi chính chủ sở hữu của file/thư mục con 2. Số liên kết đến tập tin . 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. các quyền truy cập tập tin • Dấu ‘-‘ đầu tiên xác định loại tập tin Ký hiệu Ý nghĩa - Tập tin thông thường b Tập tin đặc biệt Block c Tập tin đặc biệt ký tự d Thư mục l Tập tin liên kết (mềm/cứng) •. 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’