Como posso permitir que um usuário priorize um processo para uma gentileza negativa?

12

Quero que um usuário execute um processo específico no sistema com um valor legal negativo. Não posso simplesmente colocar o processo em segundo plano, pois esse programa específico é um servidor minecraft e confio na linha de comando para controlar o servidor.

Meu script atual do bash se parece com isso (a parte importante):

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    

sleepsimplesmente atrasa a execução de renice. reniceele mesmo usa pspara verificar um processo java usando o próprio ID do usuário. Pode haver outras instâncias de criação de java em diferentes usuários, mas o servidor minecraft é executado sob seu próprio usuário minecraft .

Obviamente, não quero inserir uma senha toda vez que inicio o servidor.
de / etc / sudoers :

minecraft ALL = NOPASSWD: /etc/renice

Existe uma maneira mais elegante de fazer isso? Simplesmente usar nicenão é uma opção, sudo nice bashem combinação com a opção NOPASSWD: seria um grande problema de segurança.

Baarn
fonte

Respostas:

9

O módulo pam_limits.so pode ajudá-lo lá.

Ele permite que você defina certos limites para usuários e grupos individuais específicos ou curingas ou intervalos de usuários e grupos.

Os limites que você pode definir são geralmente configurações de limite máximo, mas também o número de sessões de login simultâneas, processos, tempo de CPU, prioridade padrão e prioridade máxima (renice). Verifique a página de manual limits.conf para mais.

Por exemplo, você pode configurar seu grupo de mindcraft para que todos os seus processos sejam iniciados com uma prioridade padrão aumentada e permitir que eles usem os comandos nice e renice para aumentar a prioridade de seus trabalhos importantes manualmente, em vez de apenas reduzir a prioridade.

# /etc/security/limits.conf
# increase default and max prio for members of the mindcraft group
@mindcraft   hard priority -10
@mindcraft   hard nice     -18   
HBruijn
fonte
4
Definir apenas o limite máximo para nicenão parece fazer isso, eu tive que definir os dois, usando -.
Baarn 28/11
Não parece funcionar para mim no Ubuntu 16.04. Eu configurei prioritypara -10 e nice-15 e sempre recebo "permissão negada" mesmo quando tento usar "nice -n -2" em alguma coisa. Eu tenho que reiniciar? Acabei de sair e entrar novamente de acordo com este conselho .
Richard Wiseman
Atualização no meu post anterior ... Desde a reinicialização, descobri que a priorityconfiguração tem efeito, mas a niceconfiguração só me permite reduzir a prioridade. Quando inicio algo com a prioridade padrão, agora é -10. Eu posso reniceo processo para -9, mas depois não posso renicevoltar para -10.
Richard Wiseman
Atualização 2: Eu resolvi! Foi usando hardque causou os problemas. Eu mudei para -vez e tudo funciona bem agora. Essa resposta me ajudou a chegar ao fundo. Acho que o problema era que eu tinha um limite suave que estava atrapalhando, talvez substituindo o limite rígido de alguma forma. Enfim, em -vez de hardconsertar para mim.
Richard Wiseman
1

Usar renicesem sudoseria impossível. Cito a partir da renice(1)página de manual:

Usuários que não sejam o superusuário podem alterar apenas a prioridade dos processos que possuem, e podem aumentar monotonicamente seu `` bom valor '' (por razões de segurança) dentro do intervalo de 0 a PRIO_MAX (20), a menos que um bom limite de recursos seja definido (Linux 2.6.12 e superior).

Joseph R.
fonte