Nếu bạn trao cho người dùng quyền cai trị miễn phí với quyền root, thì người dùng đó có thể giết hầu hết mọi thứ. Đối với một số cuộc thảo luận chuyên sâu và cách giải quyết có thể xem: thảo luận sigkill ngăn xếp unix.
Ngoài ra, giải pháp giám sát được đề cập bởi @bta rất thú vị. Trên thực tế, có sẵn một gói cơ quan giám sát phần mềm, có thể được định cấu hình để theo dõi việc thay đổi tệp hoặc thực thi tập lệnh người dùng. Tuy nhiên, trên hầu hết các hạt nhân tiêu chuẩn, cơ quan giám sát này có thể bị dừng bởi người dùng root hoặc bạn có thể thay đổi cấu hình của nó. Nhưng những người dùng khác sẽ phải nhận thức được điều này để tránh nó. Nhìn thấy: https://linux.die.net/man/8/watchdog
Nhưng nếu bạn không phải cho phép toàn quyền truy cập root mà có thể quản lý quyền truy cập của họ bằng cơ chế sudo, thì bạn có thể đặt một số lệnh với đối số rõ ràng để họ thực thi và không cho phép bất kỳ thứ gì khác ngoài quyền người dùng mặc định của họ.
Ví dụ, bạn có thể đặt /bin/giết
bên trong /etc/sudoers
tệp, nhưng chỉ cho phép các đối số cụ thể.
bob TẤT CẢ=(root) /bin/kill -sigTERM [1-9][0-9][0-9][0-9]
Điều này sẽ cho phép người dùng bồng bềnh để thực hiện /bin/giết
, nhưng chỉ hủy các tiến trình có PID trong khoảng từ 1000 đến 9999. Nếu bạn thực thi trình theo dõi của mình đủ sớm, nó sẽ có PID thấp và không thể hủy theo cách này. Người dùng bồng bềnh Tất nhiên, vẫn có thể gây rối với bạn bằng cách giết chết các quy trình người dùng của chính bạn .... và những gì với gói PID, điều này có thể không quá hữu ích.
Có thể trừ một số tùy chọn nhất định khỏi một bộ đầy đủ. Ví dụ: hủy tất cả PID không âm, nhưng không cho phép báo hiệu PID chứa 1337 và không cho phép hủy -1.
bob ALL=(root) /bin/kill -sigTERM *,!/bin/kill *1337*,!bin/kill *-1*
Nhưng điều đó sẽ hơi khó xử và bạn sẽ rất chắc chắn rằng chương trình không bao gồm các số nguyên của nó. Procps kill không xa như tôi có thể thấy, nhưng ví dụ này vẫn cho phép hủy một quy trình với pid 1337 nếu nó là một phần của nhóm quy trình mà nó không phải là thủ lĩnh. Vì vậy, điều này cho thấy việc làm việc với các phủ định hoặc danh sách đen phức tạp như thế nào.
Tùy chọn tốt hơn, chỉ cho phép hủy một số quy trình nhất định theo tên
bob ALL=(root) /usr/bin/pkill -sigTERM -f name process
Hoặc chỉ khởi động lại dịch vụ cụ thể
bob ALL=(root) /bin/systemctl khởi động lại dịch vụ
Người dùng có thể xem các lệnh sudo có sẵn với sudo -l
Điều quan trọng là nếu bạn cho phép một số chương trình chỉ định chúng sẽ có đường dẫn đầy đủ. Và người dùng cũng không được có quyền hủy liên kết hoặc chỉnh sửa trên chương trình đó, nếu không chương trình có thể bị thay thế bằng một thứ khác.