Tìm hiểu sâu hơn về Linux permissions
Mục lục
Quan sát và nhận định
Đôi khi bạn thấy các ký hiệu khác r, w, x thông thường khi xem xét quyền đối với file trên Linux. Thay vì rwx cho chủ sở hữu, nhóm và các trường khác trong chuỗi quyền, bạn có thể thấy s hoặc t, như trong ví dụ sau:
Chúng ta cùng thử kiểm tra quyền của file /usr/bin/passwd
# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 Mar 22 14:32 /usr/bin/passwd
Kết quả xuất hiện ký tự 's' trong chuỗi permission
Thêm nữa, cùng thử kiểm tra quyền của folder /tmp :
# ls -l -d /tmp # option -d là để hiển thị thông tin quyền hạn của một folder
drwxrwxrwt. 8 root root 4096 Apr 15 04:44 /tmp
Kết quả xuất hiện ký tự 't' trong chuỗi permission
Điều này cho thấy có hơn 9 bit được gán cho file permissions. Thực tế, có 12. Và ba bit bổ sung đó cung cấp một cách để gán quyền ngoài việc đọc, ghi và thực thi thông thường - ví dụ: 3777 (binary 011111111111) cho biết có thêm hai cài đặt bổ sung.
SUID Bit, SGID Bit và Sticky Bit
SUID Bit = Set owner User ID up on execution Bit
111111111111
^
Bit thứ 1 (như trên) đại diện cho SUID cấp quyền tạm thời cho người dùng sử dụng file với tư cách là chủ sở hữu file
Khi chạy một executable file, nó chạy dưới quyền sở hữu của người dùng đã thực thi nó. SUID Bit ghi đè hành vi này. Nếu SUID Bit được đặt trên một application, thì application đó sẽ chạy với tư cách là chủ sở hữu của file đó, bất kể ai đang thực thi nó.
SGID Bit = Set Group ID up on execution Bit
011111111111
^
Bit thứ 2 (như trên) đại diện cho SGID (đặt ID nhóm) và chỉ định quyền tạm thời để execute file hoặc sử dụng folder với quyền của nhóm được liên kết. SGID cấp quyền tạm thời cho người sử dụng file như một thành viên của nhóm đó.
Không giống như SUID Bit, SGID Bit hoạt động trên cả file và folder, nhưng nó có ý nghĩa khác trong cả hai trường hợp.
Trên file
Đối với file, nó có ý nghĩa tương tự như SUID Bit, tức là khi bất kỳ người dùng nào thực thi một file có đặt SGID Bit trên đó, nó sẽ luôn được thực thi với quyền sở hữu nhóm của file đó, bất kể ai đang chạy nó.
Trên folder
SGID trên các folder được sử dụng để tạo các folder làm việc chung. Xét tình huống sau:
Giả sử ba user nguyen, phan và quan đang làm việc cùng nhau trong một dự án. Tất cả họ đều thuộc về một nhóm có tên là javaproject. Họ cần chia sẻ tất cả các file liên quan đến dự án. Tất cả họ phải được quyền xem file của nhau. Điều này có thể được thực hiện đơn giản bằng cách cung cấp quyền đọc ở cấp độ nhóm. Giả sử rằng folder được sử dụng cho dự án là "/javaproject".
Ở đây, một vấn đề nảy sinh là khi một file được tạo ra, nó thuộc về nhóm chính của user đã tạo file. Vì vậy, khi những user khác nhau tạo file của họ trong folder này, những file đó sẽ không có quyền sở hữu nhóm của nhóm javaproject.
Những gì chúng ta cần làm là đặt nhóm folder /javaproject thành nhóm javaproject và đặt SGID Bit trên đó. Khi SGID Bit được đặt trên một folder, tất cả các file và sub folder được tạo trong nó có quyền sở hữu nhóm của nhóm được liên kết với folder đó. Có nghĩa là sau khi thiết lập SGID Bit trên folder /javaproject, tất cả các file và folder được tạo trong folder này sẽ có quyền sở hữu nhóm của nhóm "javaproject". Hơn nữa, hành vi này là đệ quy, tức là các folder được tạo trong folder này cũng sẽ có SGID Bit. Các quyền cho folder mới cũng sẽ giống như quyền của folder /javaproject
Sticky Bit
011111111111
^
Bit thứ 3 (như trên) là Sticky Bit. Nó đảm bảo rằng chỉ chủ sở hữu của file mới có thể xóa hoặc đổi tên file hoặc folder.
Một trong những cách sử dụng phổ biến của các bit quyền đặc biệt là với các lệnh như lệnh passwd. Nếu nhìn vào file /usr/bin/passwd, chúng ta sẽ thấy rằng bit SUID đã được đặt, cho phép bất kỳ user nào thay đổi mật khẩu của họ (thay đổi nội dung của file /etc/shadow) ngay cả khi là một người dùng bình thường và không có quyền truy cập đọc hoặc ghi vào file này. Tất nhiên, lệnh passwd đủ thông minh để không cho phép bạn thay đổi mật khẩu của người khác trừ khi bạn thực sự đang chạy dưới quyền root hoặc sử dụng sudo.
# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 63736 Mar 22 14:32 /usr/bin/passwd
# ls -l /etc/shadow
-rw-r----- 1 root shadow 2195 Apr 22 10:46 /etc/shadow
Cách phân quyền đặc biệt cho file hoặc folder
Lệnh chmod cho phép chúng ta thay đổi quyền bằng 2 cách: Dùng số hoặc dùng chữ, như bên dưới:
# chmod 6775 file1 # 6 (binary: 110) ứng với SUID và SGID, bỏ số 6 nếu muốn xóa
# chmod ug+s file1 # u cho SUID và g cho SGID, +s set execution, -s nếu muốn xóa
# chmod 2775 file1 # 2 (binary: 010) ứng với SGID, bỏ số 2 nếu muốn xóa
# chmod g+s file1 # g cho SGID, +s set execution, -s nếu muốn xóa
# chmod 4775 file1 # 4 (binary: 100) ứng với SUID, bỏ số 4 nếu muốn xóa
# chmod u+s file1 # u cho SUID, +s set execution, -s nếu muốn xóa
# chmod 1750 /opt/dump/ # 1 (binary: 001) ứng với Sticky Bit, bỏ số 1 nếu muốn xóa
# chmod o+t /opt/dump/ # o cho Others, +t cho Sticky Bit, -t nếu muốn xóa
Bình luận gần đây