Nếu bạn nhìn vào thực thi sudo
:
$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun 3 2011 /usr/bin/sudo
Bạn sẽ nhận thấy rằng nó mang các bit cho phép ---s--x--x
. Chúng có thể được chia nhỏ như sau:
-|--s|--x|--x
- - first dash denotes if a directory or a file ("d" = dir, "-" = file)
--s - only the setuid bit is enabled for user who owns file
--x - only the group execute bit is enabled
--x - only the other execute bit is enabled
Vì vậy, khi một chương trình được kích hoạt bit setuid (còn được gọi là SUID), có nghĩa là khi ai đó chạy chương trình này, nó sẽ chạy với thông tin đăng nhập của người dùng sở hữu tệp, hay còn gọi là. gốc trong trường hợp này.
Thí dụ
Nếu tôi chạy lệnh sau là người dùng saml:
$ whoami
saml
$ sudo su -
[sudo] password for saml:
Bạn sẽ nhận thấy rằng việc thực thi sudo
thực sự đang chạy bằng root:
$ ps -eaf|grep sudo
root 20399 2353 0 05:07 pts/13 00:00:00 sudo su -
cơ chế setuid
Nếu bạn tò mò về cách thức hoạt động của SUID, hãy xem man setuid
. Đây là một đoạn trích từ trang người đàn ông giải thích nó tốt hơn tôi có thể:
setuid () đặt ID người dùng hiệu quả của quy trình gọi. Nếu UID hiệu quả của người gọi là root, UID thực và ID người dùng đã lưu cũng được đặt. Trong Linux, setuid () được triển khai giống như phiên bản POSIX với tính năng _POSIX_SAVED_IDS. Điều này cho phép chương trình ID người dùng tập hợp (không phải root) bỏ tất cả các đặc quyền người dùng của nó, thực hiện một số công việc không có đặc quyền và sau đó kiểm tra lại ID người dùng hiệu quả ban đầu một cách an toàn.
Nếu người dùng là root hoặc chương trình được đặt - ID-user-root, phải đặc biệt cẩn thận. Hàm setuid () kiểm tra ID người dùng hiệu quả của người gọi và nếu đó là siêu người dùng, tất cả ID người dùng liên quan đến quá trình được đặt thành uid. Sau khi điều này xảy ra, chương trình không thể lấy lại quyền root.
Khái niệm chính ở đây là các chương trình có một userid thực sự (UID) và một chương trình hiệu quả (EUID). Setuid đang thiết lập userid hiệu quả (EUID) khi bit này được bật.
Vì vậy, từ quan điểm của hạt nhân, người ta biết rằng trong ví dụ của chúng tôi, saml
vẫn là chủ sở hữu ban đầu (UID), nhưng EUID đã được thiết lập với bất kỳ ai là chủ sở hữu của tệp thực thi.
setgid
Tôi cũng nên đề cập rằng khi chúng ta phá vỡ các quyền trên lệnh sudo, nhóm bit thứ hai là dành cho quyền của nhóm. Các bit nhóm cũng có một cái gì đó tương tự như setuid được gọi là id nhóm set (hay còn gọi là setgid, SGID). Điều này thực hiện tương tự như SUID ngoại trừ nó chạy quy trình với thông tin đăng nhập nhóm thay vì thông tin đăng nhập của chủ sở hữu.
Người giới thiệu
sudo -s
thaysudo su
vì sử dụng vô dụngsu
. :)