Precisa permitir que um usuário reinicie o bind9

3

Eu quero dar ao usuário www-data a capacidade de reiniciar o bind9 usando este comando

serviço bind9 restart

No momento, eles podem executá-lo e parar o bind9, mas não reiniciá-lo novamente, reclamando que as permissões não permitirão um chmod do arquivo "named".

você pode me apontar na direção do que eu preciso fazer

Atualizar

Ok, então adicionei a linha aos sudoers conforme solicitado.

www-data      ALL=NOPASSWD: /etc/init.d/bind9

Ainda tem algum problema:

root@LAMPREY:~# su www-data
$ service bind9 restart
 * Stopping domain name service... bind9                                        rndc: error: none:0: open: /etc/bind/rndc.key: permission denied
rndc: could not load rndc configuration
                                                                         [ OK ]
 * Starting domain name service... bind9                                        chmod: changing permissions of '/var/run/named': Operation not permitted
$ exit

Eu também tentei executar outro comando

/etc/init.d/bind9 restart
 * Stopping domain name service... bind9                                        rndc: error: none:0: open: /etc/bind/rndc.key: permission denied
rndc: could not load rndc configuration
                                                                         [ OK ]
 * Starting domain name service... bind9                                        chmod: changing permissions of '/var/run/named': Operation not permitted
$ exit

com o mesmo resultado

    
por Jason 20.06.2011 / 08:37

5 respostas

6

Por que você não deseja conceder ao usuário acesso a sudo para executar este comando específico? Esta é exatamente a situação para a qual o sudo foi projetado.

Adicionando

www-data somehost= /sbin/service bind9 restart

concederá ao usuário a permissão www-data para executar service bind9 restart (e somente esse comando) em algum host.

    
por 20.06.2011 / 08:51
6

Para responder a todos os três acima: sudo é um exagero sangrento quando rndc já tem a capacidade que você precisa, mais a opção de recarregar servidores de nomes outros que o localhost.

O script rndc-confgen gerará um arquivo rndc.conf para você, que você pode salvar em /etc/rndc.conf e tornar legível em www-data :

shadur@Romulus:~$ rndc-confgen 
# Start of rndc.conf
key "rndc-key" {
    algorithm hmac-md5;
    secret "zGHUrg0X5Id4rn27A0Nb9A==";
};

options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
};
# End of rndc.conf

# Use with the following in named.conf, adjusting the allow list as needed:
# key "rndc-key" {
#   algorithm hmac-md5;
#   secret "zGHUrg0X5Id4rn27A0Nb9A==";
# };
# 
# controls {
#   inet 127.0.0.1 port 953
#       allow { 127.0.0.1; } keys { "rndc-key"; };
# };
# End of named.conf

A parte comentada pode então ser adicionada a /etc/bind/named.conf para dizer ao servidor que ele deve responder adequadamente a essa chave (que é gerada aleatoriamente quando você executa rndc-confgen .

Depois de ter feito a ligação acima e reiniciado uma vez, o usuário www-data deve poder emitir comandos para vincular por meio do comando rndc .

rndc restart irá reiniciar o servidor completamente; rndc reconfig fará com que ele recarregue seu arquivo named.conf ; rndc reload irá verificar e recarregar todas as zonas; rndc reload <zone> irá verificar e recarregar apenas.

Existem outros comandos também; você pode obter uma lista simplesmente digitando rndc sem nenhum comando.

Não use uma motosserra quando um bisturi serve; não use sudo quando você nem precisa ser root.

    
por 20.06.2011 / 16:53
3

por que não dar a eles direitos de sudo para apenas reiniciar o bind?

www-data      ALL=NOPASSWD: /etc/init.d/bind9

Então você pode executá-lo e ele deve funcionar. Além disso, você pode usar o rndc se você configurar suas chaves para recarregar o bind

    
por 20.06.2011 / 08:51
3

Completando a resposta do @ Mike

Execute visudo e o arquivo /etc/sudoers será aberto em seu editor de texto padrão. Não abra o arquivo de outra maneira.

Em seguida, adicione a seguinte linha, preferencialmente no final

www-data      ALL = NOPASSWD: /usr/sbin/service bind9 restart

Salve e saia do editor. Agora o usuário www-data pode executar o seguinte para reiniciar o bind

sudo /usr/sbin/service bind9 restart
    
por 20.06.2011 / 09:42
0

O rndc reload deve funcionar bem dentro de uma chamada do sistema PHP () sem modificação de permissões específicas. Concordo que reiniciar o bind é desnecessário, já que se você permitir que o usuário faça isso, provavelmente acabará gastando mais tempo reiniciando o serviço do que está realmente ativo e on-line para atender às solicitações.

    
por 20.06.2011 / 16:59

Tags