Linux: como dar permissão ao usuário para reiniciar o apache?

35

Eu tenho um script em execução em um usuário não raiz que, sob certas condições, deve reiniciar o apache httpd.

Qual seria a maneira mais simples de permitir que o usuário faça isso?

Estou usando o Ubuntu Server 8.04 LTS.

itsadok
fonte

Respostas:

84

Resposta curta:

Usando visudo, adicione o seguinte ao seu arquivo sudoers, substituindo o nome de usuário pelo nome de usuário apropriado:

username ALL = /etc/init.d/apache2 

Se você não precisar digitar uma senha antes de fazer isso, use o seguinte:

username ALL = NOPASSWD: /etc/init.d/apache2 

Depois disso, o usuário 'nome de usuário' pode executar sudo /etc/init.d/apache2 start(ou parar, reiniciar etc.)

Resposta longa: você provavelmente desejará configurar um usuário separado para isso, se ainda não o tiver, e depois configurar o arquivo / etc / sudoers para permitir que um usuário ou grupo execute o comando desejado.

Por exemplo, para permitir que o usuário 'ben' execute todos os comandos como root solicitando uma senha, faça o seguinte:

ben ALL= ALL

Para permitir que 'ben' execute apenas um comando (como por exemplo, rm), faça o seguinte:

ben ALL= /bin/rm 

Se você estiver executando um script como usuário e não desejar solicitar uma senha, use a opção 'NOPASSWD' da seguinte forma:

ben ALL=NOPASSWD: /bin/commandname options

Você pode fazer o mesmo para grupos prefixando nomes de grupos com um sinal de porcentagem, assim:

%supportstaff          ALL= NOPASSWD: /bin/commandname 
epic9x
fonte
2
Pode usernameser restrito a um subconjunto de parâmetros? Diga start restartmas não stop?
ThorSummoner
o visudocomando não faz verificações de segurança em suas edições para que você não quebrar o sudo/ sucomando por acidente: unix.stackexchange.com/a/27595/61349
ThorSummoner
1

Resposta curta: sudo.

A chamada seria semelhante à seguinte: sudo /etc/init.d/apache2 restart

O mais fácil é usar visudopara configurar o arquivo / etc / sudoers. Veja man sudoerse man visudopara detalhes.

Zayne S Halsall
fonte
A OP disse sobre fazê-lo através de um script - o script não poderá digitar uma senha, portanto esta resposta não fará sentido.
Matt Fletcher
@MattFletcher menos que você use NOPASSWD
Robin Kanters
0

Você também pode fazer isso gravando um wrapper no apache2ctl, atribuindo a propriedade do grupo a um grupo de administração da web e configurando o suid bit. Essa é uma solução menos geral que o visudo, mas permite limitações personalizadas nas habilidades do usuário e na verificação de erros.

Eu escrevi essa ferramenta para minhas próprias necessidades e a compartilhei no github: https://github.com/josiahjohnston/ltd_apache2ctl

JosiahJohnston
fonte