Como posso evitar que usuários usem o kill no bash?

2

Eu tentei

chmod 700 /bin/kill
chown root /bin/kill

mas um usuário normal ainda pode fazer:

kill blah

... e mate com sucesso o aplicativo 'blah' executado sob a conta do usuário.

Estou usando o Ubuntu (8.10). O shell bash aparentemente tem o comando kill embutido e, portanto, tentar o acima não funcionará.

Usando .bashrc, o comando enable poderia ser usado para desabilitar o comando kill embutido toda vez que um terminal fosse lançado, mas o .bashrc poderia simplesmente ser editado pelo usuário usando um editor de texto lançado via GUI para ative o comando kill. Posso de alguma forma desativar um comando bash interno permanentemente sem usar o .bashrc (que é editável pelo usuário)?

Alguém tem alguma idéia de como eu posso desativar o kill interno?

    
por Ben L 20.11.2009 / 18:13

4 respostas

15

A resposta é que, curto de compilar sua própria versão do bash, você não pode. Além disso, mesmo se você tiver sucesso, se seus usuários puderem compilar programas ou mover binários para o sistema, eles sempre poderão trazer um binário de kill próprio, e poderão emitir mortes de qualquer maneira.

Agora, a pergunta é: o que você realmente quer fazer? Porque desabilitar o comando kill não é, suspeito, seu objetivo real. Você está tentando impedir que os usuários façam algo (presumivelmente matam algo que não deveriam), e provavelmente há uma maneira melhor de fazer o que você quer.

    
por 20.11.2009 / 18:17
4

O que quer que você use, o comando kill ou o shell embutido, ele usará a chamada de sistema kill ou relacionada. Para ler sobre isso, consulte man 2 kill .

Kill não é apenas usado para matar um processo, mas é usado para enviar um sinal. O envio de sinais é uma função fundamental dos sistemas operacionais Unix, portanto você não deseja desabilitá-lo.

A maneira correta:
A maneira correta de fazer o que você está tentando fazer é provavelmente gerenciar seus privilégios corretamente. Os sinais só são permitidos nas seguintes condições:

For a process to have permission to send a signal it must either be privileged (under Linux: have the CAP_KILL capability), or the real or effective user ID of the sending process must equal the real or saved set-user-ID of the target process.

Se você realmente quiser:
Então, se você realmente quiser que os usuários não enviem sinais para o processo que eles iniciam, eu acho que você teria que setuidar o programa root, e mudar o usuário real e efetivo id logo depois que ele começa para um usuário menos privilegiado, pois somente o root pode alterar o id do usuário real. Um exemplo de programa que faz isso é o comando login . Você tem que ser extremamente cuidadoso ao programar esses programas, ou você criará uma grande falha de segurança.

    
por 20.11.2009 / 20:48
3

Seguindo a resposta de Michael, seria muito, muito difícil impedir que um usuário envie sinais (que é o que mata) para um processo em execução no domínio de proteção do usuário (ou seja, executando sob o ID desse usuário). Provavelmente, você não desejaria, pois também impediria que o usuário encerrasse um programa de fuga, por exemplo. Além disso, pode quebrar um pedaço do seu sistema existente.

Como Michael disse, você provavelmente está tentando impedir que um usuário envie um sinal para um ou mais processos específicos, e a maneira de fazer isso é colocar esses processos em um domínio de proteção diferente, em outras palavras, executá-los sob um id de usuário diferente.

    
por 20.11.2009 / 18:32
1

Se você quiser limitar e bloquear as coisas que as pessoas podem fazer com o bash, altere-as para o shell rbash (restricted bash). mais informações

    
por 21.01.2010 / 16:54