Esta página foi traduzida por máquina. Leia o original em inglês. English

← Recursos do servidor HQbird

Usando os serviços do Windows Active Directory para autenticar usuários em um banco de dados Firebird.

O Firebird já suportava autenticação confiável do Windows no Windows. Essa capacidade foi implementada no plugin Win_SSPI para cliente e servidor. Ele usa a API SSPI do Windows e o provedor de segurança NTLM e funciona apenas no Windows.

O Windows Active Directory é amplamente suportado por sistemas Linux modernos, portanto seus serviços também podem autenticar usuários no Linux.

O Firebird implementa esse suporte no plugin de segurança gssauth. Como o nome sugere, ele usa a API GSS para se comunicar com o Active Directory. Ele está disponível tanto no Windows quanto no Linux, para o cliente Firebird e para o servidor Firebird. Na maioria dos casos, ele pode substituir o Win_SSPI, mas isso não é obrigatório — ambos os plugins podem ser executados no mesmo servidor Firebird.

Instalação

É necessária alguma preparação para usar o Active Directory. Um host Windows que executa o servidor Firebird deve ser membro de um domínio Windows. Um host Linux que executa o servidor Firebird deve estar associado ao Active Directory. É necessária uma conta de usuário de domínio para executar o serviço Firebird no Windows. Service Principal Names (SPNs) devem ser atribuídos a essa conta de domínio para que um cliente Firebird possa autenticar o servidor Firebird via Active Directory. Abaixo está um breve guia para preparar servidores Windows e Linux do lado do Firebird.

Servidor Firebird em host Windows

  1. Crie uma conta de domínio para executar o serviço Firebird. Defina estas propriedades:

    • O usuário não pode alterar a senha
    • A senha nunca expira
  2. Instale o Firebird e execute-o sob essa conta de domínio. Use instsvc com -login, ou altere a propriedade “Log on as” de um serviço já instalado.

  3. Adicione dois Service Principal Names para essa conta. O nome do serviço é FirebirdSQL. Um SPN deve usar o nome curto do host; o outro deve usar o FQDN. Se o serviço Firebird foi criado com instsvc, ele também registra esses dois SPNs. Caso contrário, use o utilitário setspn do Windows:

setspn -U -S FirebirdSQL/hostname account
setspn -U -S FirebirdSQL/hostname.domain account

Por exemplo, se o domínio é example.com, o host é winfb e a conta é fbsvc:

setspn -U -S FirebirdSQL/winfb fbsvc
setspn -U -S FirebirdSQL/winfb.example.com fbsvc
  1. Adicione gssauth ao firebird.conf (AuthServer):
AuthServer = Srp256, gssauth
  1. Defina (ou verifique) as permissões do sistema de arquivos para a conta de domínio:

    • Acesso de leitura: firebird.conf e outros arquivos .conf
    • Acesso total: pastas com bancos de dados; security5.fdb; firebird.log e outros arquivos .log
  2. Adicione uma regra de firewall para o Firebird.

Servidor Firebird em host Linux

  1. Crie uma conta de domínio em um host Windows. Defina estas propriedades:

    • O usuário não pode alterar a senha
    • A senha nunca expira
  2. Adicione dois Service Principal Names para essa conta. O nome do serviço é FirebirdSQL. Um SPN deve usar o nome curto do host; o outro deve usar o FQDN. Use o utilitário setspn do Windows:

setspn -U -S FirebirdSQL/hostname account
setspn -U -S FirebirdSQL/hostname.domain account

Por exemplo, se o domínio é example.com, o host é linuxfb e a conta é fbsvc:

setspn -U -S FirebirdSQL/linuxfb fbsvc
setspn -U -S FirebirdSQL/linuxfb.example.com fbsvc
  1. Crie um arquivo de tabela de chaves Kerberos para o servidor Linux com o utilitário ktpass do Windows:
ktpass
  /out firebird.keytab
  /princ FirebirdSQL/[email protected]
  /mapuser [email protected]
  /pass <password of fbsvc account>
  -setpass
  /ptype KRB5_NT_PRINCIPAL
  /crypto all

Notas:

  • O argumento /princ diferencia maiúsculas de minúsculas; ele deve corresponder ao que o host Linux que executará o Firebird enxerga.
  • -setpass é usado para que a senha da conta não seja alterada.
  • /crypto pode ser alterado para evitar algoritmos de criptografia legados.
  • Documentação completa do ktpass: Microsoft ktpass.
  1. Certifique-se de que libgssapi_krb5.so esteja instalado.

  2. Instale o Firebird.

  3. Pare o serviço Firebird.

  4. Adicione gssauth ao firebird.conf (AuthServer):

AuthServer = Srp256, gssauth
  1. Copie firebird.keytab do host Windows para /opt/firebird (ou a pasta onde o firebird.conf fica na sua distribuição). Defina o proprietário como firebird:firebird e as permissões de modo que apenas o usuário e o grupo possam lê-lo.

  2. Inicie o serviço Firebird.

Nota: use a variável de ambiente KRB5_TRACE para definir um nome de arquivo de rastreamento Kerberos para solução de problemas.

Uso

No Windows, o plugin gssauth é incorporado ao fbclient.dll, portanto nenhuma implantação especial do cliente é necessária. No Linux, gssauth é um módulo separado libgssauth.so e deve ser implantado junto com os outros binários quando necessário.

O servidor Firebird deve incluir gssauth na lista de plugins AuthServer. O cliente Firebird inclui gssauth em AuthClient por padrão.

Ferramentas do Firebird como isql, gbak e outras agora suportam a opção de linha de comando -trusted no Linux, como já fazem no Windows há muito tempo.

Crie um mapeamento no banco de dados de usuários ou no banco de dados de segurança para mapear usuários de domínio para usuários Firebird. Nota: gssauth reporta apenas nomes completos de usuários e grupos (incluindo o prefixo do domínio), enquanto Win_SSPI reporta duas formas para cada grupo (com e sem domínio) — leve isso em conta ao criar mapeamentos. Além disso, no Linux, os nomes de usuários/grupos de domínio podem aparecer em uma forma ligeiramente diferente da do Active Directory (minúsculas, sem prefixo de domínio e assim por diante). Verifique a representação exata com comandos Linux como id e groups.

Exemplos de mapeamento

Mapear todos os usuários como estão:

CREATE GLOBAL MAPPING GSS_USERS
  USING PLUGIN GSSAUTH
  FROM ANY USER
  TO USER;

Mapear administradores de domínio como RDB$ADMIN em um servidor Linux:

CREATE GLOBAL MAPPING GSS_ADMINS
  USING PLUGIN GSSAUTH
  FROM GROUP 'domain admins'
  TO ROLE RDB$ADMIN;

Mapear administradores de domínio como RDB$ADMIN em um servidor Windows:

CREATE GLOBAL MAPPING GSS_ADMINS
  USING PLUGIN GSSAUTH
  FROM GROUP 'EXAMPLE\Domain Admins'
  TO ROLE RDB$ADMIN;