chown loại bỏ setuid bit: lỗi hay tính năng?


14

Các bước để tái sản xuất:

germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov  2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov  2 20:11 test

Đã thử nghiệm với Debian nén và Ubuntu 12.04


Điều đó trên Fedora 17 cũng vậy.
BenjiWiebe

Câu trả lời:


17

Không phải là một lỗi theo tài liệu chown:

$ info coreutils 'chown invocation'

   The `chown' command sometimes clears the set-user-ID or set-group-ID
permission bits.  This behavior depends on the policy and functionality
of the underlying `chown' system call, which may make system-dependent
file mode modifications outside the control of the `chown' command.
For example, the `chown' command might not affect those bits when
invoked by a user with appropriate privileges, or when the bits signify
some function other than executable permission (e.g., mandatory
locking).  When in doubt, check the underlying system behavior.

Cảm ơn jlliagre. Tôi không biết info coreutilstrước đây. Tôi chỉ đọc man-page và tìm kiếm trên web.
Germar

12

Đây là do thiết kế, và đó là hành vi tiêu chuẩn. Trích dẫn tiêu chuẩn POSIX :

Trừ khi chown được gọi bởi một quy trình với các đặc quyền thích hợp, các bit ID người dùng tập hợp và ID nhóm của tập tin thông thường sẽ bị xóa sau khi hoàn thành thành công; các bit set-user-ID và set-ID-nhóm của các loại tệp khác có thể bị xóa.

( slà setuid (hoặc setgid trong cột nhóm), nhân tiện, không bị dính.)

Hành vi này tuân theo lệnh gọi hệ thống cơ bản (ngoại trừ trên một số hệ thống, các bit setxid chỉ bị xóa đối với các tệp thực thi).

Lý do để loại bỏ bit setuid là việc thay đổi chủ sở hữu cũng thay đổi người dùng nào sẽ là ID người dùng hiệu quả của quy trình. Đặc biệt, trên các hệ thống mà người dùng có thể cho đi một tệp, cp /bin/sh foo; chmod u+s foo; chown joe foosẽ tạo ra một tệp thực thi setuid thuộc về joe, một lỗ hổng bảo mật khổng lồ.


Nâng cấp cho các nitpick! SUID / SGID không phải là bit "dính"!
Jim Dennis

Điểm tuyệt vời về ý nghĩa bảo mật của việc bảo tồn SUID / SGID. Tôi đã bị làm phiền bởi hành vi cho đến khi tôi đọc câu đó. Tôi sẽ thêm, tuy nhiên, tôi chưa bao giờ thấy chown không xóa các bit, ngay cả khi chạy bằng root. Tôi tò mò "đặc quyền thích hợp" sẽ ngụ ý gì.
differlysuperiorman

1
@vastlysuperiorman Trên nền tảng Unix cổ điển, các đặc quyền thích hợp của Bỉ có nghĩa là ID người dùng 0. Nhưng POSIX cho phép các hệ thống xác định chính sách bảo mật của riêng họ. Ví dụ, đối với nhiều hoạt động trên Linux, các đặc quyền thích hợp của Viking được triển khai như một khả năng (chỉ có quyền root mới được mặc định). Trong trường hợp cụ thể này, không triệt tiêu các bit setxid trên chown bất kể đặc quyền, giống như hầu hết các biến thể Unix. Nhưng một lớp POSIX trên Windows có thể hoạt động khác nhau.
Gilles 'SO- ngừng trở nên xấu xa'
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.