Làm cách nào tôi có thể cho phép người dùng ưu tiên một quy trình cho tính độc hại?


12

Tôi muốn người dùng chạy một quy trình cụ thể trên hệ thống với giá trị tốt âm. Tôi không thể đơn giản rẽ nhánh quá trình để làm nền vì chương trình cụ thể này là máy chủ minecraft và tôi dựa vào dòng lệnh để điều khiển máy chủ.

Kịch bản bash hiện tại của tôi trông như thế này (phần quan trọng):

sleep 10 && \
sudo renice -n $NICENESS $(ps -u $(id -u) -o "%p:%c" | sed -n "s/:java$//p") & \
java -Xmx8G -Xms2G -jar minecraft_server.jar nogui    

sleepchỉ đơn giản là trì hoãn thực hiện renice. renicechính nó sử dụng psđể kiểm tra quá trình java bằng ID riêng của người dùng. Có thể có các trường hợp khác của java sinh sản dưới những người dùng khác nhau, nhưng máy chủ minecraft chạy dưới minecraft người dùng của chính nó .

Tôi rõ ràng không muốn nhập mật khẩu mỗi khi tôi khởi động máy chủ.
từ / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Có một cách thanh lịch hơn để làm điều này? Sử dụng đơn giản nicekhông phải là một tùy chọn, sudo nice bashkết hợp với tùy chọn NOPASSWD: sẽ là một vấn đề bảo mật tuyệt vời.

Câu trả lời:


9

Mô-đun pam_limits.so có thể giúp bạn ở đó.

Nó cho phép bạn đặt các giới hạn nhất định cho từng người dùng và nhóm cụ thể hoặc ký tự đại diện hoặc phạm vi người dùng và nhóm.

Các giới hạn bạn có thể đặt thường là cài đặt ulimit mà còn về số phiên đăng nhập đồng thời, quy trình, thời gian CPU, mức ưu tiên mặc định và mức ưu tiên tối đa (gia hạn). Kiểm tra trang man giới hạn.

Ví dụ, bạn có thể định cấu hình nhóm mindcraft của mình để bắt đầu tất cả các quy trình của chúng với mức độ ưu tiên mặc định tăng lên và bạn có thể cho phép chúng sử dụng các lệnh đẹp và đổi tên để tăng mức độ ưu tiên của các công việc quan trọng của chúng theo cách thủ công thay vì chỉ giảm mức độ ưu tiên.

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   

4
Chỉ đặt giới hạn cứng cho nicedường như không làm được, tôi phải đặt cả hai, sử dụng -.
Baarn

Dường như không hoạt động với tôi trên Ubuntu 16.04. Tôi đã đặt prioritythành -10 và nice-15 và tôi luôn nhận được "quyền bị từ chối" ngay cả khi tôi cố gắng sử dụng "đẹp -n -2" cho một cái gì đó. Tôi có phải khởi động lại không? Tôi chỉ cần đăng xuất và đăng nhập lại theo lời khuyên này .
Richard Wiseman

Cập nhật bài viết trước của tôi ... Kể từ khi khởi động lại tôi đã phát hiện ra rằng prioritycài đặt có hiệu lực, nhưng nicecài đặt chỉ cho phép tôi giảm mức độ ưu tiên. Khi tôi bắt đầu một cái gì đó với mức độ ưu tiên mặc định, bây giờ là -10. Tôi có thể renicexử lý thành -9 nhưng sau đó không thể renicequay lại -10.
Richard Wiseman

Cập nhật 2: Tôi đã làm việc đó! Nó đã được sử dụng hardgây ra vấn đề. Tôi đã thay đổi nó để -thay thế và tất cả hoạt động tốt bây giờ. Câu trả lời này đã giúp tôi đi đến tận cùng của nó. Tôi nghĩ vấn đề là tôi đã có một giới hạn mềm đang cản trở, có lẽ đã vượt qua giới hạn cứng bằng cách nào đó. Dù sao, -thay vì hardsửa nó cho tôi.
Richard Wiseman

1

Sử dụng renicemà không sudocó thể là không thể. Tôi trích dẫn từ renice(1)trang người đàn ông:

Người dùng không phải siêu người dùng chỉ có thể thay đổi mức độ ưu tiên của các quy trình họ sở hữu và chỉ có thể tăng đơn điệu `` giá trị đẹp '' (vì lý do bảo mật) trong phạm vi 0 đến PRIO_MAX (20), trừ khi giới hạn tài nguyên tốt là thiết lập (Linux 2.6.12 trở lên).

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.