Một quá trình có thể có một chủ sở hữu? Nó có nghĩa là gì?


9

Chúng ta có thể xác định chủ sở hữu của một quá trình bằng cách sử dụng pslệnh. Điều này có nghĩa là những người dùng khác không thể chạy / giết / tiếp tục quá trình đó?

Câu trả lời:


18

Đọc thông tin đăng nhập (7) , ngã ba (2) , thực hiện (2) . Cuộc gọi hệ thống ngã ba là cách các quy trình được tạo ra (ngày nay, forkthường được thực hiện với bản sao (2) nhưng bạn có thể xem đó là một chi tiết triển khai). Cuộc gọi hệ thống exec là cách các chương trình thực thi được bắt đầu. Hãy nhớ rằng mọi thứ được thực hiện từ một số quy trình với một số cuộc gọi hệ thống (được liệt kê trong các tòa nhà cao tầng (2) ). Quá trình đầu tiên ( init hoặc systemd ) đã được khởi động một cách kỳ diệu bởi kernel khi khởi động. Các quy trình khác đã được bắt đầu bằng ngã ba (2). Modern Hạt nhân Linux đôi khi - nhưng hiếm khi - bắt đầu một cách kỳ diệu một vài quy trình đặc biệt (ví dụ /sbin/hotplug) hoặc đề hạt nhân (ví dụ kworker, kswapd....).

Vì vậy, có, mọi quy trình (và mọi tệp) đều có chủ sở hữu (về mặt kỹ thuật là uid , một số nhỏ không âm) và nhóm (gid). 0 uid là dành cho root và có thêm quyền.

Đọc thêm về setuid (và setreuid (2) ...) Thật khó khăn.

nó có nghĩa là chủ sở hữu khác không thể chạy quá trình đó?

Một tiến trình đã chạy (nhưng nó có thể không hoạt động hoặc chờ), vì vậy không ai có thể chạy lại nó. Đừng nhầm lẫn một quá trình (một cái gì đó động) với chương trình (một thực thi tập tin , thường trong ELF định dạng) chạy bên trong nó.

Một chương trình nhất định (ví dụ /bin/bash) có thể được thực thi trong một số quy trình. Nhiều tệp thực thi ở trên đĩa của bạn mà không cần (tại một thời điểm nhất định) bất kỳ quy trình nào chạy chúng.

Trên Linux, Proc (5) rất hữu ích để truy vấn kernel về trạng thái của các tiến trình. Hãy thử ví dụ cat /proc/$$/statuscat /proc/self/maps. Xem thêm pgrep (1) , ps (1) , đầu trang (1) .

Mỗi tiến trình có không gian địa chỉ ảo riêng , bảng mô tả tệp riêng , thư mục làm việc riêng , (và thường là một số luồng , xem pthreads (7) ), v.v.

điều đó có nghĩa là các chủ sở hữu khác không thể chạy / giết / tiếp tục quá trình đó?

Chạy một quá trình không có ý nghĩa gì (nó đã chạy). Tuy nhiên, việc thực thi quy trình của pid 1234 có sẵn dưới dạng /proc/1234/exeliên kết tượng trưng và bạn có thể sử dụng nó để thực thi (2) - nhưng có lẽ bạn không nên -. Các quy tắc cho phép execveáp dụng.

Để giết (2) một quá trình, bạn thường phải có cùng một uid. Tuy nhiên, tài liệu cho biết:

  For a process to have permission to send a signal, it must either be
   privileged (under Linux: have the CAP_KILL capability in the user
   namespace of the target process), or the real or effective user ID of
   the sending process must equal the real or saved set-user-ID of the
   target process.  In the case of SIGCONT, it suffices when the sending
   and receiving processes belong to the same session. 

Để dừng quá trình, sử dụng tín hiệu SIGSTOP(hoặc SIGTSTP) được sử dụng với kill (2) . Xem tín hiệu (7) .

Để tiếp tục quá trình dừng, sử dụng SIGCONTtín hiệu.


4

Chủ sở hữu thường là người dùng đã khởi chạy quá trình đó. Lệnh này có thể được thực thi bởi những người dùng khác, nhưng đó sẽ là một quá trình khác.

nó có nghĩa là chủ sở hữu khác không thể chạy quá trình đó?

Không có chủ sở hữu khác. Đừng nhầm lẫn các chương trình (tệp thực thi) và quy trình (chương trình đang chạy).

Có nghĩa là chủ sở hữu khác không thể chạy / giết / tiếp tục quá trình đó?

Các chủ sở hữu duy nhất đã đưa ra quá trình. Nếu bạn có nghĩa là người dùng khác , không phải chủ sở hữu, điều đó phụ thuộc.

Root, tức là người dùng có giá trị uidbằng 0, có toàn bộ sức mạnh. Những người dùng khác chia sẻ tương tự uid, theo quan điểm của HĐH, cùng một người dùng, do đó cũng có toàn quyền đối với quy trình.

Người dùng có uid khác sẽ không thể giết / dừng / tiếp tục quá trình, trừ khi họ được phép chuyển sang quyền sở hữu hoặc quyền root thông qua sudohoặc lệnh tương tự hoặc ở mức độ thấp hơn, nếu họ có liên quan đến quá trình đó từ hệ thống phân cấp của họ.

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.