Autenticação de clientes Linux

Partimos do princípio de que o servidor já contenha a informação básica para que a árvore possa funcionar, a partir da qual já é possível adicionar elementos na árvore.

Em uma situação ideal, a árvore irá partir de um estado vazio, com a informação dos usuários sendo acrescentada na medida em que esta é requerida na rede onde está instalado o servidor. Infelizmente, para os administradores, esta situação é muito rara. Por isto, o mais comum é que o desejo do administrador seja a migração de usuários e grupos de uma ou várias máquinas com usuários em Linux ou em qualquer outro serviço de diretórios. Dependendo da capacidade deste servidor, esta tarefa pode ser realmente pesada, já que implica na criação de arquivos ldif de grande tamanho ou na inserção de usuários com alguma das ferramentas gráficas descritas no apêndice deste handbook.

Para isso, existem scripts desenvolvidos em Perl, que podem ajudar muito neste propósito. Estes scripts integram um pacote chamado MigrationTools, que pode ser encontrado em: http://www.padl.com/OSS/MigrationTools.html

Através desta mesma url, pode ser feito o download dos binários instaláveis já adaptados a algumas distribuições Linux.

Como indica o pacote disponível na Internet, antes de começar a utilizar as ferramentas de migração, você deve configurá-las, editando o arquivo migratecommon.ph_. Este arquivo de configuração é carregado por cada script no momento de sua execução.

Em geral, somente é necessário modificar os seguintes parâmetros:
  • $DEFAULTBASE, que indica o dn raiz_ da árvore LDAP, onde se deseja introduzir toda a informação a ser migrada;
  • $EXTENDEDSCHEMA, que permite que se possa adicionar no arquivo importado uma série de atributos adicionais como o inetOrgPerson e o organizationalPerson_.

É bastante recomendável estudar a documentação encontrada no pacote e o arquivo de configuração comentado, já que existem opções que, incluídas, irão aceitar o valor real de certos atributos da árvore. No caso de não estar bem configurado, no futuro poderão ocorrer problemas dependendo do uso desejado do servidor.

Existem diversos scripts que podem ser utilizados para muitos propósitos diferentes. Na verdade, para uma autenticação simples de usuários Linux com LDAP, somente é necessário armazenar na árvore a informação dos grupos e dos usuários POSIX, com seus respectivos valores. Por enquanto, só serão feitas referências para migratebase.pl, migrategroup.pl e migratepasswd.pl_.

Como indica no próprio arquivo de configuração, deve-se tomar cuidado para que cada arquivo esteja no caminho correto, como o migratebase.pl_. Uma vez que se tenha certeza da configuração, os scripts serão executados no mesmo diretório em que se encontram, para que o funcionamento seja correto.

Em primeiro lugar, executa-se o migratebase.pl_ da seguinte forma:

# ./migratebase.pl > /tmp/migrationbase.ldif


Isto irá gerar um arquivo ldif, com diversas entradas. Uma vez executado o script, revise o arquivo ldif gerado e elimine as entradas que não serão necessárias no futuro. Neste exemplo, manteremos no arquivo apenas as duas unidades organizacionais imprescindíveis que são People e Group:

dn: ou=People,dc=codeplex,dc=ndos
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=codeplex,dc=ndos
ou: Group
objectClass: top
objectClass: organizationalUnit


Por último, para extrair a informação dos usuários registrados no sistema Linux, você deve utilizar um novo script da seguinte forma:

# ./migrate_passwd.pl /etc/passwd /tmp/migration_passwd.ldif


Isto irá gerar um arquivo ldif com toda a informação dos usuários registrados no sistema, com sua informação correspondente do /etc/passwd e do /etc/shadow, onde é guardada a informação adicional das contas, além das senhas criptografadas. De novo, você deve levar em conta que em uma situação de autenticação simples não é necessário, e às vezes é até inconveniente, armazenar na árvore LDAP a informação de usuários próprios do sistema. Neste caso, você deve manter apenas a informação correspondente aos usuários interativos que foram sendo registrados no sistema. Dependendo do sistema operacional, os usuários são fáceis de serem diferenciados verificando o uid que possuem. Por exemplo, nos sistemas Debian, os usuários interativos recebem por padrão o uid a partir de 1000. Um exemplo de um usuário exportado a partir de um do sistema seria o seguinte:

dn: uid=test,ou=People,dc=codeplex,dc=ndos
uid: test
cn:: dGVzdA==
sn:: dGVzdA==
mail: test@codeplex.ndos
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: krb5Principal
objectClass: shadowAccount
userPassword: {crypt}$1$bRVR4E8z$X8CEr7.mW6NwlizwkXKXZ1
shadowLastChange: 13314
shadowMax: 99999
shadowWarning: 7
krb5PrincipalName: test@CODEPLEX.NDOS
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/test


Aqui há várias informações que valem a pena serem observadas detalhadamente. Não são todos os atributos que, vistos aqui, têm uma correspondência direta com os campos que se encontram em cada usuário nos arquivos passwd e shadow do sistema. A correspondência atual seria a seguinte:

passwd.JPG
Relação entre a classe objeto posixAccount e uma entrada de usuário do arquivo /etc/passwd.

shadow.JPG
Relação entre a classe objeto shadowAccount e uma entrada de usuário do arquivo /etc/shadow.


Como pode ser visto, nem todos os atributos têm uma relação com os campos existentes nos arquivos de usuário. Perceba também que existem atributos com valores que as próprias ferramentas de migração (MigrationTools) impuseram. Alguns deles, como o atributo mail, pode ser controlado com a variável $DEFAULTMAILHOST do migratecommon.ph. Outros atributos que nem sempre serão necessários, são os relacionados com o Kerberos (krb5_), se esta autenticação não for utilizada.

Tendo a informação preparada em arquivos ldif, pode-se passar para a importação para a árvore LDAP. Para isto, de maneira rápida voltaremos a utilizar a ferramenta do OpenLDAP, ldapadd, da seguinte maneira:

ldapadd -D cn=Manager,dc=codeplex,dc=ndos -W -f /tmp/migration_base.ldif
ldapadd -D cn=Manager,dc=codeplex,dc=ndos -W -f /tmp/migration_group.ldif
ldapadd -D cn=Manager,dc=codeplex,dc=ndos -W -f /tmp/migration_passwd.ldif


Após seguir todos os passos mencionados o servidor já está pronto com toda a informação dos usuários e grupos. Portanto, agora você pode prestar atenção na parte cliente do sistema Linux.

Antes de começar com as configurações, devem estar instaladas no sistema as bibliotecas pamldap e nssldap. Uma vez instaladas, você deve editar o arquivo /etc/ldap.conf, modificando os seguintes valores:

BASE dc=codeplex,dc=ndos
URI ldap://codeplex.ndos


Você deve levar em consideração que a URI deve ser o host no qual se encontra o servidor LDAP, pois no caso de ser acessada diretamente pelo nome este deve ser resolvido corretamente pelo DNS.

Depois disso, você deve editar o arquivo /etc/libnss-ldap.conf modificando os seguintes valores básicos:

base dc=codeplex,dc=ndos
host 192.168.0.1


E caso você deseje fazer bind nas consultas da árvore LDAP, fique atento aos parâmetros binddn e rootbinddn. Em nosso caso, isto não será necessário porque estaremos utilizando a instalação padrão.

Você deve prestar muita atenção neste último arquivo de configuração, já que possui uma grande quantidade de parâmetros que podem ser adequados às necessidades de autenticação dos diversos servidores.

Se for realizada uma instalação e configuração padrão como explicamos aqui, tanto no servidor quanto nos clientes, não há problema. Porém, no momento em que os dados são alterados (como por exemplo, no caso das unidades organizacionais) devem ser feitas as modificações pertinentes neste arquivo.

Antes de alterar a ordem de resolução dos usuários, é imprescindível que se tenha um usuário root logado na máquina. Isso para que possa ser feita alguma recuperação, em caso de problema no momento da autenticação, sem a necessidade de novo login no sistema. Por último, é necessário dizer aos módulos de autenticação de senhas (pam) de que forma devem comportar-se quando recebem uma requisição de autenticação. Para isto siga as instruções abaixo.

No módulo /etc/pam.d/common-account edite os seguintes dados:

account sufficient pam_ldap.so
account required pam_unix.so try_first_pass


No módulo /etc/pam.d/common-auth edite os seguintes dados:

auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure try_first_pass


E no módulo /etc/pam.d/common-password edite os seguintes dados:

password sufficient pam_ldap.so
password required pam_unix.so nullok obscure min=4 max=8 md5 try_first_pass


Desta forma, o pam entende que, se a autenticação ocorrer de forma correta no servidor LDAP, não será necessária a verificação de usuário e senha no sistema. Caso contrário, será feita a tentativa de autenticação direta no sistema.

Por último é preciso dizer que os usuários e grupos devem ser autenticados não no sistema e sim no servidor LDAP. Isto é feito modificando o arquivo o qual indica o responsável pelas autenticações (/etc/nsswitch.com), da seguinte forma:

passwd: compat ldap
group: compat ldap
shadow: compat ldap


Na verdade, neste caso, a tentativa de autenticação será feita primeiramente no sistema. Caso o usuário e grupo não existam no sistema, essa tentativa dar-se-á no servidor LDAP previamente configurado.

Voltar para o índice | Próximo capítulo

Last edited Sep 14, 2007 at 5:33 PM by joicekafer, version 16

Comments

No comments yet.