Bit SetUID không hoạt động trong Ubuntu?


8

Tôi cho rằng một tệp thực thi với tập bit SetUID sẽ được chạy với tư cách là chủ sở hữu của nó nhưng tôi thực sự không thể sao chép nó. Tôi đã thử như sau.

$ cat Chuẩn bị .sh
cp / thùng / bash.
chown root.root bash
chmod 4770 bash # Đã xác minh
$ sudo sh Chuẩn bị.sh
$ ./bash
$ id -u
1000
$ thoát
$
$ cat test.c
#inc loại <stdio.h>
#include <unistd.h>
int chính () {
    printf ("% d,% d \ n", getuid (), geteuid ());
    trả về 0;
}
$ gcc -o test test.c
$ chmod 4770 test # Đã xác minh
$ sudo chown root.root test
$ ./test
1000,1000
$ # Tại sao ???

Tuy nhiên

$ su
# ./bash
# id -u
0
# ./kiểm tra
0,0
# lối ra
# lối ra
$

Lưu ý: Điểm gắn kết không có nosuidcũng không noexecđược thiết lập.
Bất cứ ai cũng có thể giải thích tại sao nó không hoạt động trên Ubuntu 16.04 LTS?



3
@Kusalananda nó không phải là một kịch bản.
enzotib

4
Kịch bản hơi khó hiểu, nhưng đó chỉ là một cá trích đỏ. Tôi cho rằng nó ở đó để tiết kiệm hai công dụng sudo? Tuy nhiên, có một lỗi hoặc lỗi đánh máy trong đó, chmodthiếu tên tệp.
ilkkachu

Câu trả lời:


15

Đối với thực thi được biên dịch, từ man 2 chown:

When the owner or group  of  an  executable  file  are  changed  by  an
unprivileged user the S_ISUID and S_ISGID mode bits are cleared.  POSIX
does not specify whether this also should happen  when  root  does  the
chown();  the Linux behavior depends on the kernel version.

Đảo ngược chownchmodđặt hàng làm việc cho tôi:

$ sudo chmod 4770 foo
$ sudo chown root:root foo
$ stat foo
  File: 'foo'
  Size: 8712        Blocks: 24         IO Block: 4096   regular file
Device: 801h/2049d  Inode: 967977      Links: 1
Access: (0770/-rwxrwx---)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-04-18 15:15:15.074425000 +0900
Modify: 2017-04-18 15:15:15.074425000 +0900
Change: 2017-04-18 15:15:33.683725000 +0900
 Birth: -
$ sudo chmod 4777 foo
$ ./foo
1000,0

15

Trong trường hợp đầu tiên của bạn, đó là Bash không thích được chạy như setuid.

Nếu Bash được bắt đầu với id người dùng (nhóm) hiệu quả không bằng id người dùng thực (nhóm) thực sự, ... và id người dùng hiệu quả được đặt thành id người dùng thực.

Xem: Hướng dẫn của Bash về các tệp khởi động , bit Setuid dường như không có tác dụng đối với bash .

Trong trường hợp thứ hai, đó là thứ tự chmodchownvấn đề, như muru đã trả lời . Thay đổi chủ sở hữu đặt lại bit setuid.


Ồ, tôi đã không nhận thấy OP đang sử dụng tập lệnh thiết lập bash setuid.
muru

5

Nó cũng có thể là hệ thống tập tin chứa thực thi kiểm tra đã được gắn với nosuidtùy chọn ; Tôi đã nghe nói rằng các bản phân phối mới hơn sẽ làm điều này theo mặc định /tmpvà cũng có những lý lẽ tốt để áp dụng nó /home. nosuidlàm cho kernel bỏ qua các bit setuid và setgid trên tất cả các tệp thực thi trong hệ thống tập tin. (Điều không liên quan xảy ra khi bạn tạo một thư mục setgid không bị ảnh hưởng.)

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.