Isso será bastante longo, mas vamos fazer assim mesmo. Primeiro de tudo, sim, isso pode ser feito. Eu não posso fornecer muito na maneira de configurar o CVS, mas posso fornecer tudo que você precisa para fazer um servidor linux autenticar usuários contra o Active Directory.
Tudo começa com /etc/nsswitch.conf. Aqui está a seção relevante: passwd: files ldap compat
shadow: files ldap compat
group: files ldap compat
Agora, dependendo de qual distro você estiver usando, você precisará instalar alguns pacotes do ldap. Sob Redhat / Fedora / CentOS isso seria nss_ldap, sob Debian / Ubuntu e os likes, você precisará de libnss-ldap e libpam-ldap. Eu também recomendaria alguns utilitários ldap para depuração.
Com o nome acima, os serviços tentarão usar o LDAP, portanto, agora você precisa configurar os vários pacotes LDAP para usar o servidor do AD. A base de pesquisa deve ser base cn=Users,dc=aminocom,dc=com
e o DN de ligação deve ser binddn cn=LDAPsearch,cn=Users,dc=aminocom,dc=com
. Você precisará definir um usuário específico para permitir a navegação do AD. Criamos um usuário chamado LDAPSearch e colocamos suas credenciais em um arquivo separado chamado .secret. Leia a documentação desses pacotes para mais detalhes. Além disso, eu recomendaria uma política de soft bind e os seguintes mapeamentos de atributos:
# Services for UNIX 3.5 mappings
nss_base_passwd cn=Users,dc=aminocom,dc=com?sub
nss_base_shadow cn=Users,dc=aminocom,dc=com?sub
nss_base_group cn=Users,dc=aminocom,dc=com?sub
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute uidNumber msSFU30UidNumber
nss_map_attribute gidNumber msSFU30GidNumber
nss_map_attribute loginShell msSFU30LoginShell
nss_map_attribute gecos name
nss_map_attribute userPassword msSFU30Password
nss_map_attribute homeDirectory msSFU30HomeDirectory
nss_map_objectclass posixGroup Group
nss_map_attribute uniqueMember msSFU30PosixMember
nss_map_attribute cn cn
pam_login_attribute sAMAccountName
pam_filter objectclass=user
pam_member_attribute msSFU30PosixMember
pam_groupdn cn=nixUsers,cn=Users,dc=aminocom,dc=com
pam_password ad
Tudo isso pressupõe que você tenha o Windows Services for Unix instalado no seu controlador de domínio. No AD, você precisará configurar um grupo Unix primário (no nosso caso, chamado nixUsers) e adicionar todos os usuários do CVS a esse grupo.
Você provavelmente poderá usar o AD diretamente (ou seja, sem o Windows Services for Unix), mas isso exigirá diferentes mapeamentos de atributos. Você pode ter que experimentar um pouco lá.
Agora chegamos à configuração do PAM. Sob o Debian existem basicamente 4 arquivos que precisam de modificações:
1.) conta comum:
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid
2.) common-auth:
auth required pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >=500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
3.) sessão comum:
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_ldap.so
4.) senha comum
senha suficiente pam_unix.so md5 shadow nullok try_first_pass
password pam_ldap.so suficiente
senha exigida pam_deny.so
Em Redhat (e derivados) todas as alterações necessárias devem ir para as seções relevantes em /etc/pam.d/system-auth e /etc/pam.d/system-auth-ac.
Os itens acima permitirão que os usuários façam login com credenciais do AD. No entanto, isso NÃO cria automaticamente um diretório inicial para eles (a menos que você faça mais alguns scripts em torno disso) e não permite que eles alterem suas senhas através do linux. Isso pode ser feito também, mas requer modificação de suas estações de trabalho (se elas usam Linux). Mais alguma pergunta re acima, basta perguntar.
Nós usamos isso em muitos dos nossos servidores, funciona como um encanto.