Điều gì khiến tài nguyên / Proc / <pid> / * trở thành sở hữu của root, mặc dù các procs được khởi chạy như một người dùng bình thường?


7

Tôi đã nhận thấy rằng một số procs, chẳng hạn như bash, có /proc/<pid>/thể đọc toàn bộ tài nguyên của họ bởi người dùng đã tạo ra Proc đó. Tuy nhiên, các procs khác, chẳng hạn như chrome hoặc gnome-keyring-daemon, hầu hết các /proc/<pid>/tài nguyên của họ chỉ có thể truy cập bằng root, mặc dù quá trình này được sở hữu bởi người dùng bình thường và không được gọi là suid.

Tôi đã đào qua kernel một chút và thấy rằng / Proc / Stuff bị giới hạn nếu một tác vụ thiếu cờ 'có thể đổ được', tuy nhiên tôi rất khó hiểu trong trường hợp nào một tác vụ trở nên không thể xóa được (trừ trường hợp setuid, không áp dụng cho chrome hoặc gnome-keyring):

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/fs/proc/base.c#L1532

Bất cứ ai quan tâm để giúp tôi hiểu cơ chế cơ bản và lý do cho nó?

Cảm ơn!

Biên tập:

Tìm thấy một tài liệu tốt về lý do tại sao bạn không muốn có tác nhân SSH (chẳng hạn như gnome-keyring-daemon) được người dùng của bạn kết xuất. Vẫn không chắc làm thế nào gnome-keyring-daemon là làm cho chính nó không thể phá vỡ.

https://github.com/torvalds/linux/blob/164c09978cebebd8b5fc198e9243777dbaecdfa0/Documentation/security/Yama.txt#L30

Câu trả lời:


7

Linux có một cuộc gọi hệ thống, sẽ thay đổi dumpablecờ. Đây là một số mã ví dụ, mà tôi đã viết cách đây vài năm:

#include <sys/prctl.h>
...
/* The last three arguments are just padding, because the
 * system call requires five arguments.
 */
prctl(PR_SET_DUMPABLE,1,42,42,42);

Có thể là gnome-keyring-daemoncố tình đặt dumpablecờ về 0 vì lý do bảo mật.


Một cuộc gọi như vậy sẽ hiển thị trong strace, đúng không? Tất cả những gì tôi thấy trong đó là một prctl cho PR_SET_NAME.

Bên cạnh đó, liên quan đến bài đăng của bạn từ vài năm trước, tôi tin rằng bạn có thể đặt fs.suid_dumpablesysctl 2để cho phép các nhị phân setuid trở nên có thể đổ được.

1
Hành vi có thể kết xuất không chỉ áp dụng cho các nhị phân setuid, nhưng các nhị phân setcap cũng vậy. Hãy thử chạy getcap /usr/bin/gnome-keyring-daemon. Nó có thể có một số khả năng tập tin trên nó.
Matthew Ife

Đây là những gì getcapnói trên Ubuntu 12.04:/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
kasperd

1
Sau đó, nó có khả năng khóa bộ nhớ và do đó vô hiệu hóa cờ có thể kết xuất.
Matthew Ife
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.