Kể từ khi ra đời, Linux được điều chỉnh hỗ trợ môi trường đa user. Với nhiều user và group trên hệ thống làm việc, rất thường gặp thư mục chia sẻ giữa user cùng group, và vấn đề nảy sinh từ chia sẻ file trong thư mục. Bài này thảo luận cách dùng sticky bit tinh chỉnh quyền truy cập file trên thư mục chia sẻ.
Mục đích minh họa, hệ thống có ba user – john1, john2, john3, đều thành viên group chung "johns".
Giả sử "john1" tạo thư mục mới "shared-dir" để chia sẻ cho tất cả user group "johns".
Với lệnh ls, xem quyền "shared-dir", dịch như bảng sau:
Chỉ "john1" đọc nội dung thư mục và ghi vào thư mục. Vì làm việc thư mục chia sẻ, muốn tất cả user group ghi vào "shared-dir".
Vì vậy, sửa quyền dùng lệnh chmod. Thêm quyền "write" (ghi) cho tất cả user group "johns" như dưới:
Xem quyền cập nhật "shared-dir" như dưới. Phần gạch dưới vàng cho thấy group "johns" được cấp quyền "write".
Thêm File Vào Thư Mục Chia Sẻ
Giờ "john1" thêm hai file (j1_file1.txt, j1_file2.txt) vào "shared-dir".
Để dễ hiểu, hai ký tự đầu tên file đồng nghĩa với tên user.
Tương tự, "john2" cũng "write" vào thư mục "shared-dir".
Giờ có bốn file trong "shared-dir".
Có Vấn Đề Với Thiết Lập Hiện Tại?
File "j1_file1.txt" do "john1" tạo, làm "john1" thành chủ sở hữu file. Giờ "john2" đăng nhập và cố xóa file này, anh ta sẽ làm được.
"john1" là chủ sở hữu file, nhưng "john2" xóa được vì quyền "write" cấp cho tất cả thành viên group "johns".
Tình huống này không lý tưởng. Muốn tất cả user ghi vào thư mục, nhưng chỉ chủ sở hữu file mới xóa được file. Làm sao đạt được?
Giới Thiệu Sticky Bit
Sticky bit là quyền đặc biệt đặt trên thư mục có quyền "write" cho group truy cập. Bit này đảm bảo tất cả thành viên group ghi vào thư mục, nhưng chỉ người tạo file, tức chủ sở hữu file, mới xóa file.
Lệnh chmod với cờ +t dùng đặt sticky bit trên thư mục.
Quyền cập nhật thấy dưới.
Giờ nếu "john2" cố xóa file "j1_file2.txt" do "john1" tạo, thao tác không được phép.
Nếu bỏ quyền "execute" (thực thi) cho "others", như dưới:
sự tồn tại sticky bit trên thư mục biểu diễn bằng chữ "T" in hoa phần "others" chuỗi quyền. Hành vi sticky bit trên thư mục giữ nguyên.
Biến Thể Của Lệnh "chmod"
Dạng số của lệnh chmod cũng dùng đặt sticky bit trên thư mục.
chmod nxyz <file_name>
trong đó,
- n = 1, chỉ sticky bit. Giá trị khác "n" chỉ quyền đặc biệt khác.
- x : quyền cho chủ sở hữu file
- y : quyền cho group truy cập file
- z : quyền cho others
Để đặt sticky bit trên "shared-dir", dùng lệnh:
chmod 1755 shared-dir
cho kết quả giống dùng +t trên quyền mặc định hiện có.
Việc dùng sticky bit chỉ đúng cho thư mục, không có ý nghĩa dùng cho file.