làm cho tất cả các quy trình của một người dùng nhất định có thể bị giết bởi bất kỳ ai


15

Trên một máy chủ được chia sẻ, tôi muốn có một số người dùng có mức độ ưu tiên rất thấp để bất cứ khi nào người dùng khác (cũng không có quyền root) cần tài nguyên, họ có thể giết bất kỳ quy trình nào của người dùng có mức độ ưu tiên thấp.

Có thể cho phép một cái gì đó như thế?


1
Cung cấp cho người dùng sudo -u quyền giết tất cả người dùng cần thiết trong một nhóm
Kiwy

4
Tôi thực sự hy vọng những người dùng ưu tiên thấp này là người dùng thực tế và bạn và bạn bè của bạn là những BOFH thuần chủng . Nó làm cho câu hỏi hấp dẫn hơn nhiều.
đường ống

@DavidFoerster, một vấn đề là ngay cả khi CPU không ở mức ưu tiên thấp 100% có thể lấp đầy bộ đệm của bộ xử lý, v.v. Tương tự như vậy với truy cập đĩa, v.v.
Ian Ringrose

Câu trả lời:


24

Cấp cho người dùng khác quyền giết các quy trình với tư cách là người dùng ưu tiên thấp thông qua

sudo -u lowpriouser /bin/kill PID

Người dùng chỉ có thể báo hiệu các quy trình của riêng họ, trừ khi họ có quyền root. Bằng cách sử dụng sudo -umột người dùng với thiết lập chính xác trong sudoerstệp có thể giả sử danh tính của người dùng có mức độ ưu tiên thấp và giết chết quá trình.

Ví dụ:

%killers ALL = (lowpriouser) /bin/kill

Điều này sẽ cho phép tất cả người dùng trong nhóm killerschạy /bin/killnhư lowpriouser.

Xem thêm sudoershướng dẫn trên hệ thống của bạn.


Trên hệ thống OpenBSD, điều tương tự có thể được thực hiện thông qua doastiện ích gốc với cấu hình như

permit :killers as lowpriouser cmd /bin/kill

Sau đó

doas -u lowpriouser /bin/kill PID

Xem hướng dẫn sử dụng cho doasdoas.conf.


Nếu bạn cho phép bất kỳ lệnh kill nào , bạn có thể lạm dụng nó để gửi tín hiệu không liên quan đến chấm dứt đến các quy trình tùy ý, đây có thể là một vấn đề bảo mật.
rừng

@forest Đây là lý do tại sao tôi không khuyên bạn nên cho mọi người khả năng sử dụng tài khoản root để chạy kill. Cũng lưu ý rằng tôi đề nghị sử dụng nhóm người dùng ( killers), không phải tất cả người dùng.
Kusalananda

Nhưng điều tôi muốn nói là, điều đó sẽ cho phép nhóm đó gửi kill -HUP, không chỉ kill -TERM.
rừng

@estest Có. Nó cho phép gửi tín hiệu đến các quá trình thuộc sở hữu của lowpriouser. Nếu bạn muốn hạn chế các tín hiệu TERM, sau đó viết một tập lệnh trình bao bọc xung quanh /bin/killvà cho phép mọi người sử dụng tập lệnh đó thay vì /bin/kill.
Kusalananda

1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
rừng

5

Bạn không nên giết các quy trình, nếu chúng có mức độ ưu tiên thấp, chúng sẽ tiêu tốn ít tài nguyên.

Để thực sự làm cho họ có mức độ ưu tiên thấp, hãy thay đổi mức độ ưu tiên của họ theo cách thủ công hoặc sử dụng một trình nền như autonicetôi đã viết cho DEC OSF / 1 nhiều năm trước (c. 1994) tìm kiếm các công việc dài hạn và giảm dần mức độ ưu tiên của họ khi họ chạy lâu hơn .

EDIT có một gói được gọi là andcung cấp chức năng này cho các Unices hiện đại.


một vấn đề là ngay cả khi CPU không ở mức ưu tiên thấp 100% có thể lấp đầy bộ đệm của bộ xử lý, v.v. Tương tự như vậy với truy cập đĩa, v.v.
Ian Ringrose

@IanRingrose chỉ các tác vụ đã được lên lịch để chạy có thể chiếm bộ nhớ cache hoặc thực hiện truy cập đĩa.
Alnitak

4

Tôi nghĩ rằng bạn tiếp cận vấn đề từ góc độ sai: Nếu một quy trình được chạy ở cài đặt ưu tiên thấp (CPU, I / O) thì nó sẽ không ảnh hưởng nhiều đến các quy trình khác vì nó sẽ không được lên lịch để chạy. Đối với việc sử dụng bộ nhớ, nếu bộ nhớ chính bị hạn chế và quá trình không được lên kế hoạch để chạy trong một thời gian dài (ví dụ do các hạn chế của CPU và I / O), các trang sạch sạch của nó sẽ bị hủy và các trang bẩn bẩn của nó được cam kết hoặc hoán đổi và không còn ảnh hưởng đến hiệu suất của các quy trình khác.

Kết luận: với cài đặt ưu tiên phù hợp và đủ không gian hoán đổi, không cần thiết phải tiêu diệt các công việc có mức độ ưu tiên thấp để tạo ra phòng room cho các nhiệm vụ quan trọng hơn; thay vào đó, kernel sẽ chăm sóc để đưa cái trước vào giấc ngủ có lợi cho cái sau.


1
"Ưu tiên thấp" cũng có thể có nghĩa là "không quan trọng" mà không có nghĩa là "chạy ở mức ưu tiên CPU giảm". Điều này không được làm rõ ràng trong câu hỏi mặc dù.
Kusalananda

@Kusalananda: Tôi đồng ý rằng điều này không rõ ràng trong câu hỏi, nhưng câu trả lời của tôi nói rằng nó nên có trong thực tế.
David Foerster

1
Nó không đơn giản mặc dù. Ngay cả một quy trình ưu tiên thấp cũng có thể làm trì hoãn hệ thống, đặc biệt nếu nó có các ràng buộc về bộ nhớ: tùy thuộc vào cách chúng được thiết lập, nó sẽ làm cho quá trình hoán đổi. Hoán đổi gây ra I / O (có thể không được bao gồm trong hạn ngạch I / O của quy trình) và nó cũng sẽ làm cho hệ thống ít phản ứng hơn bởi các đơn đặt hàng cường độ. Sau đó, có lẽ bạn cũng muốn nói chung (trong khi những người khác không cần tài nguyên), quy trình ưu tiên thấp thực sự có thể có được tất cả các tài nguyên cần thiết (khiến giới hạn bộ nhớ thông thường không thể áp dụng được). Cổ phiếu CPU giúp đỡ ở đây.
Jonas Schäfer

@JonasWielicki, "cách unix" cũ của quá trình hoán đổi hoàn thành đã có lợi thế của nó. Nếu tôi nhớ lại chính xác HPUX có thể một số công cụ để giải quyết vấn đề này trong những năm 1990.
Ian Ringrose
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.