No Debian 7, qual usuário bind9 usa para iniciar o daemon?

1

Eu tenho um Debian 7 e uma instalação padrão do bind9, eu alterei manualmente a permissão de /etc/bind/named.conf para 000 e removi -u bind flag de /etc/default/bind9 apenas para ver o que acontece.

Até onde eu sei: quando o bind9 é iniciado como um daemon do nível de execução 3, o daemon do init chama o script daemon bind9 /etc/init.d/bind9 como root. O script daemon bind9 não alterna o usuário, nem o próprio programa bind9 - porque -u bind flag já foi removido.

Mas o problema é que bind9 falha ao iniciar e reclama "permissão negada" em /etc/bind/named.conf

Se o script de inicialização bind9 foi chamado por root, como o problema de permissão pode ocorrer?

Para esclarecer: não há apparmor, o selinux está desativado. O restante da configuração bind9 é deixado no padrão.

    
por Howard 08.02.2014 / 17:46

2 respostas

4

Antes de o nome ser lido, é o arquivo de configuração, mas todos os recursos necessários são descartados. O recurso que permite que o root ignore todas as verificações de permissão de arquivo é CAP_FOWNER - veja os recursos (7) se você estiver curioso. Se você verificar o código-fonte da ligação, em bin / named / unix / os.c você encontrará as funções linux_initialprivs () linux_minprivs () e outras responsáveis por este comportamento.

Então, sim, sua confusão é compreensível. O uid 0 normalmente terá CAP_FOWNER e, portanto, um processo operando como uid 0 poderá operar sem impedimentos na maioria das verificações de permissão e acesso a arquivos. Neste caso, bind irrevogavelmente descarta todos os privilégios não expressamente necessários para a operação. Na minha opinião, essa é uma ação muito razoável e prudente para o daemon fazer.

Para evitar o problema, considere alterar as permissões nesse arquivo de configuração para simplesmente 0400, o que permite que uid = 0 leia o arquivo sem depender de CAP_FOWNER.

    
por 12.02.2014 / 20:25
2

Claro que irá falhar, uma vez que você não permitiu as permissões de leitura / gravação / execução em /etc/bind/named.conf . Tente usar chmod ugo+r /etc/bind/named.conf && chown root /etc/bind/named.conf e tente novamente.

Explicando por que

Vamos ver como o nome lê o arquivo.

sudo strace -f /usr/sbin/named -fg -d 10 2> named

Isto mostrará todas as chamadas sobre arquivos que o named / bind faz. Agora processando:

grep conf named                                  
read(5, "#\n# OpenSSL example configuratio"..., 4096) = 4096
write(2, "08-Feb-2014 14:01:42.372 built w"..., 39108-Feb-2014 14:01:42.372 built with '--prefix=/usr' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--sysconfdir=/etc/bind' '--localstatedir=/var' '--enable-threads' '--enable-largefile' '--with-libtool' '--enable-shared' '--enable-static' '--with-openssl=/usr' '--with-gssapi=/usr' '--with-gnu-ld' '--with-geoip=/usr' '--enable-ipv6' 'CFLAGS=-fno-strict-aliasing -DDIG_SIGCHASE -O2'
[pid 25348] write(2, "08-Feb-2014 14:01:42.395 loading"..., 7508-Feb-2014 14:01:42.395 loading configuration from '/etc/bind/named.conf'
[pid 25348] open("/etc/bind/named.conf", O_RDONLY|O_LARGEFILE) = -1 EACCES (Permission denied)
[pid 25348] write(2, "08-Feb-2014 14:01:42.396 open: /"..., 7108-Feb-2014 14:01:42.396 open: /etc/bind/named.conf: permission denied
[pid 25348] write(2, "08-Feb-2014 14:01:42.399 load_co"..., 6308-Feb-2014 14:01:42.399 load_configuration: permission denied
[pid 25348] write(2, "08-Feb-2014 14:01:42.400 loading"..., 6608-Feb-2014 14:01:42.400 loading configuration: permission denied

Nomeado tenta fazer uma chamada aberta como somente leitura e falha com -1 EACCES , pois o arquivo não tem permissões de leitura. Isso está documentado nas páginas do manual open () :

EACCES

Search permission is denied on a component of the path prefix, or the file exists and the permissions specified by oflag are denied, or the file does not exist and write permission is denied for the parent directory of the file to be created, or O_TRUNC is specified and write permission is denied.

Resumo: que o apache ou qualquer outro processo funciona não significa que bind / named will.

BTW, o bind em execução como root é um exagero e não é necessário.

    
por 08.02.2014 / 17:55