Trang chủ / Linux / Bài 7: File Types và Permissions trong Linux

Bài 7: File Types và Permissions trong Linux

Giới thiệu.

Trong bài này mình sẽ trình bày về các loại file (file types) và phân quyền trên file (file permissions) trong hệ thống Linux. Đây là một phần cơ bản và rất quan trọng đối với người quản trị Linux server. Những kiến thức này sẽ giúp ích rất nhiều trong quá trình làm việc và bảo mật hệ thống của bạn.

Nếu bạn sử dụng lệnh ls để liệt kê các file và folder trong thư mục nào đó:

Bạn sẽ dễ dàng nhận thấy file types và file permissions thể hiện ở 10 ký tự đầu tiên theo dạng drwxr-xr-x. Ký tự đầu tiên thể hiện file types và chín ký tự phía sau thể hiện file permissions.

File types.

Ký tự đầu tiên trong dãy 10 ký tự thể hiện file types. Và có những kiểu file như sau:

  • : dấu gạch này thể hiện đó là một file bình thường. Có thể là file chứa dữ liệu, text, hoặc file thực thi binary.
  • d : Chữ d thể hiện đó là một thư mục (Directory).
  • l : Chữ L thể hiện đó là một Link (tưởng tượng nó như cái shortcut trong Windows vậy).
  • c : Chữ c thể hiện Character devices (kiểu thiết bị như bàn phím, chuột, card màn hình, card âm thanh…).
  • b : Chữ b thể hiện Block devices (dạng thiết bị lưu dữ liệu như ổ cứng, usb…).
  • s : Chữ s thể hiện Socket – một loại file đặc biệt dùng cho việc trao đổi thông tin giữa các process.
  • p : Chữ p thể hiện Named pipe – dùng cho trao đổi thông tin giữa các process. Mình có giới thiệu về pipe trong series Linux cơ bản rồi đó. Đại khái thì pipe sẽ đưa output của process trước vào thành input của process sau.

File permissions.

Chín ký tự tiếp theo mô tả quyền truy cập được gán cho file hoặc folder. Nó quy định một user hoặc group được phép làm gì trên file hoặc folder đó. Phân quyền trên file và folder là một kiến thức về bảo mật căn bản nhất trong Linux.

Những permissions thông dụng nhất là:

  • r (read) : có giá trị là 4 thể hiện quyền đọc file hoặc folder.
  • w (write) : có giá trị là 2 thể hiện quyền tạo mới file trong folder hoặc là chỉnh sửa nội dụng file.
  • x (execute) : có giá trị là 1 thể hiện quyền thực thi một file.

Những permissions trên thường được áp dụng cho các đối tượng:

  • u: User
  • g: Group
  • o: Other or everyone
  • a: All
File types và permissions trong Linux
File types và permissions trong Linux

1. Thay đổi permissions cho file hoặc folder.

Để thay đổi permission hoặc còn gọi là phân quyền cho file hoặc folder. Chúng ta sử dụng lệnh chmod. Chúng ta có thể sử dụng dạng chữ hoặc số thập phân để phân quyền.

Ví dụ: Mình muốn phân quyền trên file text.txt như sau:

  • User sở hữu file text.txt có quyền đọc, viết, thực thi.
  • Group sở hữu file text.txt có quyền đọc, viết, thực thi.
  • Other user không có quyền gì cả.

Mình có thể phân quyền bằng dạng số thập phân như sau:

Hoặc phân quyền bằng dạng chữ như sau:

2. Khái niệm umask.

Có một khái niệm cần biết đó là umask. Bạn có thể hiểu đơn giản nó được dùng để phân quyền mặc định cho file hoặc folder khi nó vừa được tạo ra.

Mặc định thì:

  • Giá trị umask là 0002.
  • Khi chúng ta tạo ra một file permission sẽ là 0666 – 0002 = 0664. Nghĩa là user và group sở hữu nó có quyền đọc và ghi, other user chỉ được đọc.
  • Khi chúng ta tạo mới một folder permission sẽ là 0777 – 0002 = 0775. Nghĩa là user và group sở hữu nó có đầy đủ quyền, other user chỉ có quyền đọc và thực thi.

Chúng ta có thể thay đổi giá trị umask bằng lệnh:

3. SETUID, SETGID và STICKY BIT permissions.

Có hai loại permissions mở rộng cho file và folder đó là SETUID / SETGIDSTICKY BIT. Nó cũng rất quan trọng và bạn cần phải nắm.

a. SETUID / SETGID.

SETUID / SETGID permission cho phép một user thực thi một file giống như user đó là chủ sở hữu của file đó. Có nghĩa là nó cho phép user thực hiện những việc mà có thể khi bình thường nó bị cấm.

Một ví dụ điển hình nhất là khi chúng ta cần đổi mật khẩu. Khi sử dụng lệnh passwd để đổi mật khẩu nó cần phải viết lại thông tin vào file password mà chúng ta thì không có quyền. Bằng việc gán SETUID / SETGID cho nó chúng ta có thể thực thi nó như là user root vậy.

Khi chúng ta sử dụng lệnh ls -la để xem thông tin phân quyền của file passwd. Chúng ta sẽ thấy chỗ quyền thực thi của user thay vì là x thì sẽ là s.

Để bật SETUID /SETGID cho một file bạn có thể sử dụng lệnh:
Trong chuỗi 4 số đó thì số đầu tiên để gán SETUID /SETGID (với SETUID có giá trị là 4 / SETGID có giá trị là 2) còn 3 số đằng sau là phân quyền cho user, groupother user.

Có một kiểu tấn công hệ thống sau đó SETUID / SETGID cho những file thực thi đặc biệt để có thể leo thang đặc quyền trong hệ thống.

Thông thường bạn sẽ không mong muốn một user không có quyền mà vẫn thực thi được lệnh đâu.

b. STICKY BIT

STICKY BIT là một permission được gán cho folder (nó chả có ý nghĩa gì khi gán cho file). Khi một folder được bật STICKY BIT thì những file trong folder đó chỉ có thể được xóa hoặc thay đổi bởi chủ sở hữu nó hoặc root mà thôi. Chúng ta thường áp dụng khi tạo ra một folder share dùng chung cho nhiều user trên một file server chẳng hạn. Ở trong folder này thì ai cũng có quyền được tạo file nhưng chỉ xóa được file do mình tạo ra thôi.

Để quan sát một thư mục được bật STICKY BIT chúng ta có thể quan sát thư mục /tmp trong hệ thống. Có thể nhận thấy là ở quyền execute cho other user thay vì là x thì sẽ là t.

Để bật STICKY BIT cho folder thì bạn có thể sử dụng lệnh:

Thay đổi quyền sở hữu file và folder.

Để thay đổi quyền sở hữu file và folder từ user/group này thành user/group khác thì ta dùng lệnh:

Xem video hướng dẫn.

Giới thiệu chipchip

Chipchip là một chú gà con đam mê công nghệ và ham học hỏi. Thích màu hồng. Câu nói yêu thích "Kiến thức không của riêng ai, kiến thức là để chia sẻ"

Đọc thêm

Ubuntu 17.04 Beta 1 đã ra mắt người dùng

Theo kế hoạch phát hành của Canonical, phiên bản chính thức của Ubuntu 17.04 sẽ …

Gửi phản hồi

Nhắn tin cho chúng tôi