Khi bạn chạy file thực thi trong Linux, nó thường chạy với ID user và group hiện tại. Tuy nhiên, có lúc bạn cần chạy file đó như user khác (như root). Thay vì chuyển tài khoản user, bạn có thể dùng setuid để chạy file thực thi với quyền chủ sở hữu file chứ không phải user hiện tại. Ở đây chúng ta sẽ giải thích cách setuid hoạt động và cách nó cho phép user chạy file thực thi/nhị phân với quyền leo thang.
Cách Setuid Hoạt Động?
Setuid là viết tắt của SET User ID on execution (Đặt ID User khi thực thi). Giả sử chúng ta có file thực thi tên "identity" do user root tạo. Khi bạn chạy nó, nó sẽ chạy với ID user, ID group và quyền user của bạn. Nếu bit setuid được đặt trên file "identity", khi bạn chạy nó, nó sẽ chạy như user root và đặc quyền của root.
Để minh họa, ta kiểm tra quyền sở hữu file "identity" trước và xác nhận nó thuộc root. Chuỗi quyền cũng cho thấy bit thực thi (x) được đặt cho user, group và others.
User "john1" thực thi file "identity", trở thành tiến trình khi chạy. Như danh sách tiến trình, tiến trình được tạo và chạy dưới username "john1" và user ID.
Tiếp theo, với tư cách user root, ta đặt bit setuid của file "identity":
chmod u+s /usr/bin/identity
"u" chỉ rõ bit setuid (+s) phải đặt chỉ cho user.
Đối với chủ sở hữu, trong phần thực thi của chuỗi quyền, ta thấy "x" đã được thay bằng "s". Bất cứ khi nào gặp "s" cho file thực thi, nghĩa là bit setuid đã được đặt trên nó.
Biến thể số của lệnh chmod cũng dùng được như dưới đây.
chmod 4755 /usr/bin/identity
Việc thêm 4 trong chuỗi quyền số chỉ việc bao gồm bit setuid.
Sau đây là gì xảy ra khi "john1" thực thi file "identity" lại. Nhìn danh sách tiến trình chạy, ta thấy tiến trình được tạo và chạy bởi user "root" thay vì "john1".
Việc Dùng Quan Trọng Của Bit Setuid
Hầu hết thời gian bạn nghe chuyên gia nói không nên chạy ứng dụng với quyền root. Tuy nhiên, có trường hợp file nhất định cần chạy với quyền root. Ví dụ, tiện ích passwd cài sẵn trên hệ thống Linux có bit setuid đặt trên nó.
Lý do đơn giản: Thông tin mật khẩu user lưu trong "/etc/passwd" và "/etc/shadow", chỉ có thể sửa đổi bởi "root". Khi "john1" cố đổi mật khẩu cho mình, anh ta cần quyền sửa thông tin trong hai file đó. Có bit setuid trên passwd cho phép "john1" tạm có quyền root để đổi mật khẩu user và cập nhật thông tin trong hai file.
Rủi Ro Bảo Mật Setuid
Nếu không cẩn thận, kẻ tấn công có thể khai thác file nhị phân setuid để kiểm soát hệ thống. User bình thường không nên có chương trình setuid cài đặt, đặc biệt setuid tới user khác ngoài chính họ. Quan trọng nhất, bạn không nên có file nhị phân setuid cho root trong thư mục Home. Thường là Troy Horses (mã trojan) hoặc mã độc.
Kết Luận
Setuid chỉ có thể đặt trên file thực thi. Tương tự, bit setgid cũng có thể đặt, cho phép tất cả thành viên nhóm chạy file thực thi với quyền chủ sở hữu.
Lưu ý setuid và setgid là bit nhạy cảm bảo mật và chỉ nên dùng bởi quản trị viên hệ thống có trình độ.
Đọc tiếp:
- Cách Dùng Sticky Bit Quản Lý File Trên Thư Mục Chia Sẻ Trong Linux
- Cách Kiểm Tra Chính Tả Trong Terminal Linux
- Dùng Lệnh find, locate, which, whereis Tìm File Trong Linux