tornar todos os processos de um determinado usuário executáveis ​​por qualquer pessoa

15

Em um servidor compartilhado, eu gostaria de ter alguns usuários de prioridade muito baixa, para que, sempre que um outro usuário (também sem privilégios de root) precise dos recursos, ele possa matar qualquer um dos processos dos usuários de baixa prioridade.

É possível permitir algo assim?

Aslan986
fonte
1
Dar sudo -u usuário matar direito de todos os usuários necessários, possivelmente, em um grupo
kiwy
4
Eu realmente espero que esses usuários de baixa prioridade sejam usuários humanos reais e você e seus amigos sejam BOFHs de raça pura . Isso torna a pergunta muito mais intrigante.
pipe
@DavidFoerster, uma questão é que, mesmo quando a CPU não é de 100% processo de baixa prioridade pode encher-se o processador de cache etc. Da mesma forma com o acesso ao disco etc.
Ian Ringrose

Respostas:

24

Conceda aos outros usuários permissão para eliminar os processos como o usuário de baixa prioridade por meio de

sudo -u lowpriouser /bin/kill PID

Um usuário pode sinalizar apenas seus próprios processos, a menos que tenha privilégios de root. O uso de sudo -uum usuário com a configuração correta no sudoersarquivo pode assumir a identidade do usuário de baixa prioridade e interromper o processo.

Por exemplo:

%killers ALL = (lowpriouser) /bin/kill

Isso permitiria que todos os usuários do grupo killersexecutassem /bin/killcomo lowpriouser.

Veja também o sudoersmanual do seu sistema.


Em um sistema OpenBSD, o mesmo pode ser feito através do doasutilitário nativo com uma configuração como

permit :killers as lowpriouser cmd /bin/kill

Então

doas -u lowpriouser /bin/kill PID

Veja os manuais para doase doas.conf.

Kusalananda
fonte
Se você permitir qualquer comando kill, poderá abusar dele para enviar sinais não relacionados à finalização para processos arbitrários, o que pode ser uma preocupação de segurança.
forest
@forest É por isso que não sugiro dar a todos a capacidade de usar a conta root para executar kill. Observe também que sugiro usar um grupo de usuários ( killers), nem todos os usuários.
Kusalananda
Mas o que quero dizer é que isso permitiria que o grupo enviasse kill -HUP, não apenas kill -TERM.
forest
@forest Sim. Permite enviar sinais para processos pertencentes a lowpriouser. Se você deseja restringir os sinais TERM, escreva um script de shell wrapper /bin/kille permita que as pessoas o usem em vez de /bin/kill.
Kusalananda
1
%killers ALL = (lowpriouser) /bin/kill -(9, 15) [0-9 ]*
forest
5

Você não deve matar os processos, se eles forem de baixa prioridade, eles consumirão poucos recursos.

Para realmente torná-los de baixa prioridade, altere sua prioridade manualmente ou use um daemon como autoniceeu escrevi para o DEC OSF / 1 há muitos anos (c. 1994) que procura trabalhos de longa duração e reduz progressivamente sua prioridade quanto mais tempo eles executam .

EDITAR Existe um pacote chamado andque oferece essa funcionalidade para os Unices modernos.

Alnitak
fonte
Uma questão é que, mesmo quando a CPU não está a 100% de baixo processo de prioridade pode encher-se o processador de cache etc. Da mesma forma com o acesso ao disco etc
Ian Ringrose
@IanRingrose apenas as tarefas que foram agendadas para execução podem ocupar cache ou realizar acessos ao disco.
Alnitak
4

Acho que você abordou a questão do ângulo errado: se um processo é executado em configurações de baixa prioridade (CPU, E / S), não deve afetar muito outros processos, porque não será agendado para execução. Quanto ao uso da memória, se a memória principal estiver fraca e o processo não estiver programado para ser executado por um longo tempo (por exemplo, devido a restrições de CPU e E / S), suas páginas "limpas" serão descartadas e as páginas "sujas" serão confirmadas ou trocados e não afetam mais o desempenho de outros processos.

Conclusão: com a definição correta de prioridades e espaço de troca suficiente, seria desnecessário eliminar trabalhos de baixa prioridade para criar espaço para tarefas mais importantes; em vez disso, o kernel cuidará de colocar o primeiro a dormir em favor do último.

David Foerster
fonte
1
"Baixa prioridade" também poderia significar "não importante" sem o significado implícito "executando com menor prioridade da CPU". Isso não é explicitado na pergunta.
Kusalananda
@ Kusalananda: Concordo que isso não está explícito na pergunta, mas minha resposta afirma que deveria ser na realidade.
David Foerster
1
Não é tão simples assim. Mesmo um processo de baixa prioridade pode paralisar o sistema, especialmente se ele tiver restrições de memória: dependendo de como elas são configuradas, o processo será trocado. A troca causa E / S (que pode não estar incluída na cota de E / S do processo) e também tornará o sistema menos responsivo por ordens de magnitude. Então você provavelmente também desejaria que, em geral (enquanto outros não precisem dos recursos), o processo de baixa prioridade possa realmente obter todos os recursos necessários (o que torna os limites típicos de memória inaplicáveis). Os compartilhamentos de CPU ajudam aqui.
Jonas Schäfer
@JonasWielicki, a antiga "maneira unix" de trocar o processo completo tinha sua vantagem. Se bem me lembro, o HPUX pode encontrar algumas ferramentas para resolver esse problema nos anos 90.
18778 Ian Keyrose