Integração Debian 6.0 AD

7

Apesar de várias perguntas sobre isso, por exemplo Linux no domínio do Windows AD Eu gostaria de saber como obter o Debian 6.0 integrado ao Squeeze com o AD usando código aberto ou de outra forma gratuitamente apenas para ferramentas de uso comercial

EDIT : Somente as ferramentas que têm suas atualizações (de segurança) fornecidas via apt são aceitáveis.

Até agora eu consegui fazer com que o usuário real autenticação funcione via kerberos, por exemplo os logs mostram que a verificação de nome de usuário / senha é bem-sucedida, mas o usuário não consegue efetuar login, veja o extrato de log abaixo;

EDITAR : log atualizado com pam debug em:

May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: entry (0x0)
May 12 10:06:33 debian-6-master login[10601]: pam_krb5(login:auth): (user test.linux) attempting authentication as [email protected]
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): user test.linux authenticated as [email protected]
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:auth): pam_sm_authenticate: exit (success)
May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:account): could not identify user (from getpwnam(test.linux))
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: entry (0x0)
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): (user test.linux) retrieving principal from cache
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:account): pam_sm_acct_mgmt: exit (success)
May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!?
May 12 10:06:36 debian-6-master login[10601]: pam_env(login:session): No such user!?
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: entry (0x0)
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux
May 12 10:06:36 debian-6-master login[10601]: pam_krb5(login:session): pam_sm_open_session: exit (failure)
May 12 10:06:36 debian-6-master login[10601]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0)
May 12 10:06:36 debian-6-master login[10601]: User not known to the underlying authentication module
May 12 10:06:36 debian-6-master login[10601]: PAM 1 more authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost=

Meu ldap.conf é assim:

base dc=ad,dc=domain
uri ldap://10.10.10.10
ldap_version 3
binddn [email protected]
bindpw password
scope sub
pam_password ad
nss_base_passwd dc=ad,dc=domain?sub
nss_base_shadow dc=ad,dc=domain?sub
nss_base_group dc=ad,dc=domain?sub? &(objectCategory=group)(gidnumber=*)
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_objectclass posixGroup group
nss_map_attribute gecos cn
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute uniqueMember member
pam_sasl_mech DIGEST-MD5

nsswitch.conf :

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the 'glibc-doc-reference' and 'info' packages installed, try:
# 'info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns ldap
networks:       files ldap

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis ldap

passwd_compat: files ldap
group_compat: files ldap
shadow_compat: files ldap

todos /etc/pam.d são criados por pam-auth-update , todos os três métodos de autenticação (Kerberos, Unix e LDAP) selecionados.

Eu posso confirmar a partir da captura de pacote que os resultados da pesquisa LDAP corrigem as informações do usuário, o mesmo mostrado abaixo como um resultado manual ldapsearch :

dn: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA,OU=_Managed Are
 as,DC=ad,DC=domain
objectClass: top
objectClass: person
objectClass: domainanizationalPerson
objectClass: user
cn: Linux, test
sn: Linux
givenName: test
distinguishedName: CN=Linux\, test,OU=SpecialAccounts,OU=FI1-Helsinki,OU=EMEA,
 OU=_Managed Areas,DC=ad,DC=domain
instanceType: 4
whenCreated: 20110407131914.0Z
whenChanged: 20110511125854.0Z
displayName: Linux, test
uSNCreated: 4144737
uSNChanged: 4638378
name: Linux, test
objectGUID:: wwZt/MX/K0S36BL4bS2w+g==
userAccountControl: 66048
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 129489044965699903
lastLogoff: 0
lastLogon: 129495915807176914
pwdLastSet: 129466559550934238
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAzXxBZqg31mUH5TsrkisAAA==
accountExpires: 9223372036854775807
logonCount: 35
sAMAccountName: test.linux
sAMAccountType: 805306368
userPrincipalName: [email protected]
lockoutTime: 0
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=ad,DC=domain
dSCorePropagationData: 20110407131916.0Z
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 129488989872488561
uid: test.linux
msSFU30Name: test.linux
msSFU30NisDomain: ad
uidNumber: 10002
gidNumber: 10000
unixHomeDirectory: /home/test.linux
loginShell: /bin/sh

# refldap://DomainDnsZones.ad.domain/DC=DomainDnsZones,DC=ad,DC=domain

# refldap://ForestDnsZones.ad.domain/DC=ForestDnsZones,DC=ad,DC=domain

# refldap://ad.domain/CN=Configuration,DC=ad,DC=domain

# pagedresultscookie=
  1. Com um nome de usuário e senha corretos, recebo o MOTD e uma mensagem User not known to the underlying authentication module
  2. Com um nome de usuário incorreto, recebo Login incorrect
  3. Com um nome de usuário correto, mas senha incorreta, recebo SASL/DIGEST-MD5 authentication started seguido por Login incorrect

O AD está executando o servidor Windows 2k8 (r2), todos os pacotes debian são o que você obtém do apt.

Todas as ideias são muito bem-vindas.

EDIT 2 : Como sugerido abaixo, tentei com sssd com resultados semelhantes, agora a senha é solicitada duas vezes e o log mostra:

May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): authentication failure; logname=LOGIN uid=0 euid=0 tty=/dev/tty3 ruser= rhost= user=test.linux
May 12 14:53:06 debian-6-master login[11389]: pam_sss(login:auth): received for user test.linux: 10 (User not known to the underlying authentication module)
May 12 14:53:14 debian-6-master login[11389]: pam_krb5(login:auth): user test.linux authenticated as [email protected]
May 12 14:53:14 debian-6-master login[11389]: pam_unix(login:account): could not identify user (from getpwnam(test.linux))
May 12 14:53:15 debian-6-master login[11389]: pam_sss(login:account): Access denied for user test.linux: 10 (User not known to the underlying authentication module)
May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!?
May 12 14:53:15 debian-6-master login[11389]: pam_env(login:session): No such user!?
May 12 14:53:15 debian-6-master login[11389]: pam_krb5(login:session): (user test.linux) getpwnam failed for test.linux
May 12 14:53:15 debian-6-master login[11389]: pam_unix(login:session): session opened for user test.linux by LOGIN(uid=0)
May 12 14:53:15 debian-6-master login[11389]: User not known to the underlying authentication module

EDIT 3 :

Se eu executar sssd em primeiro plano com o nível de depuração definido como 5, o log mostrará:

(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts
(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>]
(Fri May 13 13:50:33 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail!
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_cmd_authenticate] (4): entering pam_cmd_authenticate
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): command: PAM_AUTHENTICATE
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): domain: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): user: test.linux
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): service: login
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): tty: /dev/tty3
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): ruser: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): rhost: (null)
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok type: 1
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): authtok size: 8
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok type: 0
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): newauthtok size: 0
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): priv: 1
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_print_data] (4): cli_pid: 12507
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): pam_reply get called.
(Fri May 13 13:50:34 2011) [sssd[pam]] [pam_reply] (4): blen: 8
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_endpwent] (4): Terminating request info for all accounts
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (4): Requesting info for [test.linux] from [<ALL>]
(Fri May 13 13:50:34 2011) [sssd[nss]] [nss_cmd_getpwnam] (2): No matching domain found for [test.linux], fail!
    
por Kimvais 12.05.2011 / 07:48

5 respostas

5

Eu recomendaria usar o sssd. Este é um pacote padrão no Debian squeeze e torna a vida muito mais fácil. Quando você instala o sssd, ele deve perguntar quais métodos de autenticação devem ser usados. Faça sua seleção lá, e os scripts nsswitch.conf e pam.d serão automaticamente atualizados. Você precisará ter alguns detalhes sobre o seu domínio AD, mas, em seguida, você deve conhecê-los de qualquer maneira (por exemplo, qual DC usar e qual é o nome do território kerberos, etc.).

Acredite, eu pesquisei muito isso (e algumas das perguntas feitas a esse respeito neste site são minhas), e sssd é a resposta. Ele até funciona bem para laptops, pois as credenciais são armazenadas em cache e você pode determinar as características do cache.

Aqui está o nosso arquivo sssd.conf com alguns comentários:

# SSSD configuration generated using /usr/lib/sssd/generate-config
[sssd]
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
services = nss, pam
domains = your.domain

[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
debug_level = 8

[pam]
reconnection_retries = 3
debug_level = 8

[domain/<your.domain>]
; Using enumerate = true leads to high load and slow response
enumerate = false
cache_credentials = true
#entry_cache_timeout = 60

id_provider = ldap
auth_provider = krb5
chpass_provider = krb5
#access_provider = ldap

ldap_uri = ldap://you.domain.controller
ldap_search_base = CN=Users,DC=your,DC=domain
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
ldap_default_bind_dn = cn=LDAPsearch,CN=Users,dc=your,dc=domain
ldap_default_authtok_type = password
ldap_default_authtok = <password for LDAPsearch>
ldap_pwd_policy = none
ldap_user_object_class = user
ldap_group_object_class = group
ldap_user_home_directory = unixHomeDirectory

krb5_kdcip = your.domain.controller
krb5_realm = <kerberos realm name>
krb5_changepw_principle = kadmin/changepw
krb5_auth_timeout = 15

Isso se baseia no uso dos serviços UNIX no Windows Server 2008 (que agora é parte integrante dele, costumava ser um suplemento em 2k3 e anterior).

Diferentemente de outros sistemas LDAP, o AD precisa de uma sessão autenticada antes que qualquer dado possa ser recuperado. Criamos um usuário especial chamado LDAPsearch para facilitar isso, mas provavelmente também pode ser feito com o usuário real do domínio.

Ao configurar usuários, você terá que configurar os detalhes do serviço UNIX (diretório pessoal, ID do usuário e membros do grupo primário), mas isso é muito simples.

Obviamente, você pode usar uma base de pesquisa diferente, e você também pode adicionar filtros para garantir que os usuários sejam membros de grupos específicos, etc. Basta ler a página man do sssd.

    
por 12.05.2011 / 12:36
0

Dê uma olhada em Da mesma forma, abra . Muito menos necessário, apesar de ter um registro emulado do Windows não é exatamente a minha idéia de um bom tempo. Mas, as versões mais recentes ficaram bastante sólidas, vale a pena dar uma olhada.

    
por 12.05.2011 / 07:57
0

Da mesma forma é popular, mas eu tenho usado o Centrify Express para todo o meu linux caixas no meu laboratório de trabalho ultimamente & Tem sido ótimo. Ele vem com sua própria versão do SAMBA & configurá-lo é simples como instalar o RPM (certifique-se de ler o PDF).

    
por 12.05.2011 / 12:42
0

Houve uma pergunta semelhante neste tópico , e o OP fez as coisas funcionarem com winbind para fazer as pesquisas de nome de usuário e UID e pam_krb5 para autenticação de senha. Eu tenho vários servidores squeeze funcionando dessa maneira agora.

Todas as partes necessárias estão no Debian. Não são necessários repositórios de terceiros ou não atualizados por segurança.

    
por 12.05.2011 / 15:08
0

O SSSD pode ser a resposta, embora eu não tenha usado ainda, então não sei. O que eu usei é o winbind do samba3x e isso funcionou muito bem. O problema com a configuração do kerberos e do ldap diretamente, pelo menos para mim, é que você tem que preencher o UID / GID e o diretório home para todos os seus usuários existentes e manter dois mundos de dados no AD / LDAP que não parecem ser bons uso do tempo. O winbind irá expor os grupos nativos do AD, reescrever sua conta de máquina no kerberos, etc. A única desvantagem é que ele insiste em 15 caracteres ou menos nomes de host para manter algum tipo estranho de compatibilidade netbios que eu não estou convencido de que realmente exista ou seja importante dentro das janelas e de vez em quando o daemon fica encravado e precisa ser reiniciado, o que requer acesso OOB. Combine com pam_mkhomedir e pam_access, para que as contas recebam homedires autopopulados e você pode limitar quem tem acesso a quais hosts, se necessário. Saiba que, enquanto nomes de usuários e grupos com espaços neles trabalham em um número surpreendente de lugares, eles quebram algumas ferramentas, como pam_access access.conf, que não funcionam com grupos com espaços neles.

    
por 17.05.2011 / 18:53