Setuid và setgid không hoạt động


1

Tôi đang gặp vấn đề với setuid và setgid. Tôi đã viết mã C này:

int main() {
    setuid(0);
    setgid(0);
    system("/path/to/script.sh");
    return 0;
}

Biên dịch nó bằng gcc:

gcc test.c -o test

Sau đó tôi đã sử dụng chmod +s. Trong script.sh chỉ có id chỉ huy. Dưới đây là các quyền cho test thực thi:

-rwxr-sr-x  1 root   root   8464 mag 15 20:14 test

Khi tôi thực hiện chương trình, tôi nhận được đầu ra sau:

uid=1000(user) gid=1000(user) gruppi=1000(user)

Tại sao tôi không nhận được đầu ra của id thực hiện bởi root?

Câu trả lời:


1

Bạn không thể sử dụng setuid và setgid để chạy tập lệnh shell như một người dùng khác. Đây là một tính năng bảo mật và bạn có thể đọc thêm về nó trong câu trả lời hàng đầu rất toàn diện cho bài viết này.


Kịch bản không phải là setuid hoặc setgid, nó đang được gọi bởi một thực thi.
Ignacio Vazquez-Abrams

À, tôi đoán nó vẫn giống như vậy vì nó vẫn là một kịch bản shell được gọi vì đây sẽ là một cách đơn giản để tránh sự bảo vệ chống lại nó được thực hiện trực tiếp, nhưng tôi không thể nói chắc chắn điều đó.
Mella

0

một trích dẫn từ trang MAN cho setuid()

Do đó, một chương trình root-user-ID-set muốn tạm thời bỏ quyền root        cáo buộc, giả sử danh tính của một người dùng không có đặc quyền, và sau đó lấy lại        quyền root sau đó không thể sử dụng setuid (). Bạn có thể hoàn thành việc này        với seteuid (2).

Về thành công, số không được trả về. Khi có lỗi, -1 được trả về và errno là        thiết lập phù hợp.

   Note:  there  are cases where setuid() can fail even when the caller is
   UID 0; it is a grave security error to  omit  checking  for  a  failure
   return from setuid().

trong số những thứ khác, điều này có nghĩa là người dùng không thể trở thành root thông qua lệnh này.

Nếu mã được đăng đã kiểm tra giá trị được trả về từ các lệnh này, thì sẽ thấy rằng các lệnh thất bại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.