3.6.8. Configurando KDCs Secundários

3.6.8. Configurando KDCs Secundários

Por inúmeras razões, você pode preferir rodar KDCs múltiplos para um dado território. Nesse caso, um KDC (o master KDC) mantém uma cópia escrita do banco de dados do território e roda o kadmind ( também é o servidor administrativo do território), e um ou mais KDCs (KDCs escravos) mantém cópias de somente leitura do banco de dados e roda o kpropd.

O procedimento de propagação do mestre-escravo, faz com que o KDC mestre despeje seu banco de dados em um arquivo de despejo temporário e então transfira este arquivo para cada um de seus escravos, que irão por conseqüência sobrescrever suas cópias de somente leitura, previamente recebidas, do banco de dados com o conteúdo do arquivo de despejo.

Antes de mais nada, para configurar um KDC escravo, assegure-se que os arquivos krb5.conf e kdc.conf de KDC mestre sejam copiados para o KDC escravo.

Inicie o kadmin.local a partir de uma janela root no KDC mestre e use seu comando add_principal para criar uma entrada nova para o serviço host do KDC mestre. Depois disso, use seu comando ktadd para ajustar simultaneamente uma chave aleatória para o serviço e armazene a chave aleatória no arquivo keytab padrão do mestre. Esta chave será usada pelo comando kprop para autenticar servidores de escravo. Você precisará fazer isto somente uma vez, não importanto quantos servidores de escravos você instalar.

#kadmin.local -r EXAMPLE.COM Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin:add_principal -randkey host/masterkdc.example.com Principal "host/host/masterkdc.example.com@EXAMPLE.COM" created. kadmin:ktadd host/masterkdc.example.com Entry for principal host/masterkdc.example.com with kvno 3, encryption type Triple DES cbc mode with \ HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/masterkdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 \ added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added \ to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/masterkdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 \ added to keytab WRFILE:/etc/krb5.keytab. kadmin:quit

Inicie o kadmin.local a partir de uma janela root no KDC escravo e use seu comando add_principal para criar uma entrada nova para o serviço host do KDC escravo. Depois disso, use o comando ktadd do kadmin para ajustar simultaneamente uma chave aleatória para o serviço e armazenar a chave aleatória no arquivo keytab padrão do escravo. Esta chave será usada pelo comando kprop para autenticar clients.

#kadmin -p jimbo/admin@EXAMPLE.COM -r EXAMPLE.COM Authenticating as principal jimbo/admin@EXAMPLE.COM with password. Password for jimbo/admin@EXAMPLE.COM: kadmin:add_principal -randkey host/slavekdc.example.com Principal "host/slavekdc.example.com@EXAMPLE.COM" created. kadmin:ktadd host/slavekdc.example.com@EXAMPLE.COM Entry for principal host/slavekdc.example.com with kvno 3, encryption type Triple DES cbc mode with \ HMAC/sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/slavekdc.example.com with kvno 3, encryption type ArcFour with HMAC/md5 added \ to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES with HMAC/sha1 added \ to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/slavekdc.example.com with kvno 3, encryption type DES cbc mode with RSA-MD5 added \ to keytab WRFILE:/etc/krb5.keytab. kadmin:quit

Com a chave de serviço do KDC escravo, é possível autenticar qualquer client que se conectar a ele. É claro que nem todos eles têm a permissão para oferecer o serviço kprop do escravo com um banco de dados de território novo. Para restringir acesso, o serviço kprop no KDC escravo somente aceitará atualizações de clients que tiverem nomes principais listados no /var/kerberos/krb5kdc/kpropd.acl. Adicione o nome de serviço host do KDC mestre a este arquivo.

# echo host/masterkdc.example.com@EXAMPLE.COM > /var/kerberos/krb5kdc/kpropd.acl

Quando o escravo obtiver uma cópia do banco de dados, ele também precisará da chave mestre, que foi utilizada para criptografá-lo. Se a chave mestre do banco de dados do KDC estiver armazenada em um arquivo stash no KDC mestre (geralmente chamado de /var/kerberos/krb5kdc/.k5.REALM), copie para o KDC escravo usando qualquer método seguro disponível, ou crie um banco de dados fictício e um arquivo stash no KDC escravo executando o kdb5_util create -s (o banco de dados fictíco será sobrescrito pela primeira propagação de banco de dados com sucesso) e fornecendo a mesma senha.

Assegure-se de que o firewall do KDC escravo permite que o KDC mestre o contate usando TCP na porta 754 (krb5_prop), e inicie o serviço kprop. Depois, verifique novamente se o serviço kadmin está desabilitado.

Agora faça um teste manual de propagação de banco de dados, despejando o banco de dados do território, dentro do KDC mestre, para o arquivo de dados padrão que será lido pelo comando kprop(/var/kerberos/krb5kdc/slave_datatrans) e use o comando kprop para transferir seu conteúdo para o KDC escravo.

# /usr/kerberos/sbin/kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans # kprop slavekdc.example.com

Usando o kinit, certifique-se que um sistema cliente contendo um krb5.conf que liste apenas o KDC escravo na sua lista de KDCs para o seu território, pode obter, corretamente, credenciais iniciais a partir do KDC escravo.

Concluindo isto, simplesmente crie um script que despeja o banco de dados do território e executa o comando kprop para transferir o banco de dados para cada KDC escravo, um de cada vez, e configure o serviço cron para executar o script periodicamente.