Tôi biết rằng việc bật setuid trên các tập lệnh có vấn đề bảo mật và do đó không hoạt động theo mặc định, nhưng mong rằng nó hoạt động cho các tệp thực thi. Tôi đã tạo và thực thi để hiển thị uid như một đầu ra theo hướng dẫn được mô tả trong bài viết này: Cho phép setuid trên các tập lệnh shell
Nhưng nó trả về cùng một uid (1000) cả trước và sau khi chạy sudo chmod +s ./setuid-test
. Tôi nghĩ điều này có nghĩa là setuid không có bất kỳ ảnh hưởng nào đến khả năng thực thi của tôi, tại sao và làm thế nào để giải quyết?
Mã nguồn:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Được xây dựng và chạy với
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Khi chạy ls -la
, đây là những gì tôi nhận được:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- trả về -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
vào thư mục để tìm điểm gắn kết, sau đó mount | grep nameofmountpoint
. Có một nosuid
lá cờ được liệt kê ở đó?