Quais são as etapas necessárias para autenticar usuários de um Active Directory em execução no Windows Server 2012 R2 no FreeBSD 10.0 usando sssdo backend do AD com o Kerberos TGT funcionando?
Quais são as etapas necessárias para autenticar usuários de um Active Directory em execução no Windows Server 2012 R2 no FreeBSD 10.0 usando sssdo backend do AD com o Kerberos TGT funcionando?
Respostas:
Existem algumas considerações complicadas para que tudo funcione imediatamente. O FreeBSD suporta apenas a sssdversão 1.9.6 no momento. Portanto, não há suporte para nomes principais da empresa.
Se você tiver um domínio com UPNs não correspondentes, ele falhará no login, uma vez que a autenticação Kerberos falhará durante o processo, mesmo com o FreeBSD suportando Nomes Principais da Empresa com Kerberos, sssdnão será possível lidar com este caso.
Portanto, na versão real, sssdvocê está limitado a ter o Nome Principal do Usuário no mesmo Nome de Domínio, por exemplo:
Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
username@example.com sAMAccountName: username
Sabendo disso, podemos descrever as etapas para autenticar com sucesso os usuários do AD no FreeBSD.
Crie o arquivo /etc/krb5.confcom o seguinte conteúdo:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes
Instale o Samba 4.1:
$ pkg install samba41
Crie o arquivo /usr/local/etc/smb4.confcom o seguinte conteúdo:
[global]
security = ads
realm = EXAMPLE.COM
workgroup = EXAMPLE
kerberos method = secrets and keytab
client signing = yes
client use spnego = yes
log file = /var/log/samba/%m.log
Peça um tíquete Kerberos de administrador:
$ kinit Administrator
Em seguida, ingresse no domínio e crie um keytab
$ net ads join createupn=host/server-hostname.example.com@EXAMPLE.COM -k
$ net ads keytab create -k
Instale os pacotes necessários:
$ pkg install sssd cyrus-sasl-gssapi
Edite o arquivo /usr/local/etc/sssd/sssd.confpara corresponder a essas configurações:
[sssd]
config_file_version = 2
services = nss, pam
domains = example.com
[nss]
[pam]
[domain/example.com]
# Uncomment if you need offline logins
#cache_credentials = true
id_provider = ad
auth_provider = ad
access_provider = ad
chpass_provider = ad
# Comment out if the users have the shell and home dir set on the AD side
default_shell = /bin/tcsh
fallback_homedir = /home/%u
# Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
#ldap_sasl_mech = GSSAPI
#ldap_sasl_authid = SERVER-HOSTNAME$@EXAMPLE.COM
Edite o arquivo /etc/nsswitch.confpara corresponder a essas configurações:
group: files sss
passwd: files sss
Instale pacotes opcionais para criação de diretório inicial:
$ pkg install pam_mkhomedir
Modifique os PAMdomínios necessários para corresponder a essas configurações:
auth sufficient /usr/local/lib/pam_sss.so
account required /usr/local/lib/pam_sss.so ignore_unknown_user
session required /usr/local/lib/pam_mkhomedir.so mode=0700
session optional /usr/local/lib/pam_sss.so
password sufficient /usr/local/lib/pam_sss.so use_authtok
$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client
$ getent passwd <username>
Qual Kerberos você está usando aqui? O built-in ou security / krb5 do MIT?
Ao instalar o sssd, é necessário instalar o security / krb5, que ainda é considerado experimental no FreeBSD. Assim esta pergunta.
Não estou tendo sorte em obter os usuários / grupos do AD ao executar comandos 'getent'. pode ser que o nome NETBIOS seja diferente do nome de domínio - no meu caso, o nome de domínio é dawnsign.com e o nome NETBIOS é DSP.
Eu configurei apenas o módulo de login pam.d. Quais outros módulos pam precisam ser editados para que uma autenticação bem-sucedida ocorra?
Qualquer informação adicional seria muito apreciada!
Recompilar o samba4 a partir do ports é possível usar a autenticação winbind como o linux, mesmo sem o sssd. Simplesmente recompile o samba4 das portas após ativar o sasl ldap
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
Isso recompilará o samba com todo o suporte necessário (gssapi, ldap, kerberos) e editará o nsswitch.conf assim
passwd: files winbind
group: files winbind
Olá
Esta é uma pequena atualização sobre o uso do sssd v1.11.7
Se você estiver usando o "id_provider = ad" e vir o seguinte erro no arquivo de log sssd:
/var/log/sssd/sssd_example.com.log
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct 5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]
Você pode usar o procedimento a seguir para resolver esse problema e fazer a integração do AD funcionar corretamente. Agora construa o sssd v1.11.7 com suporte ao Samba, é necessário construir a partir do src sssd para que seja vinculado ao libsasl2
pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install
Instalação (e os divertidos problemas de empacotamento e dependência)
/usr/bine outro em /usr/local/bin. Como nenhum dos arquivos básicos do sistema parece estar em um pacote, você não pode simplesmente remover o material Heimdal KRB. Algo para estar ciente.Dependências de encaminhamento dos vários pacotes (deps interessantes em negrito, deps conflitantes em negrito e itálico):
net-mgmt/adcli:net/openldap24-sasl-clientsecurity/cyrus-sasl2-gssapi: security/cyrus-sasl2net/openldap24-sasl-client: security/cyrus-sasl2security/sssd: security/nsssecurity/sssd:security/krb5security/sssd: security/cyrus-sasl2security/sssd:net/openldap24-clientsecurity/sssd: lang/python27security/sssd: lang/python2security/sssd: dns/c-aressecurity/sssd: devel/teventsecurity/sssd: devel/tallocsecurity/sssd: devel/poptsecurity/sssd: devel/pcresecurity/sssd: devel/libunistringsecurity/sssd: devel/libinotifysecurity/sssd: devel/gettext-runtimesecurity/sssd: devel/ding-libssecurity/sssd: devel/dbussecurity/sssd: databases/tdbsecurity/sssd: databases/ldbDependências reversas dos vários pacotes:
net/openldap24-sasl-client: sysutils/msktutilnet/openldap24-sasl-client: net/nss-pam-ldapd-saslnet/openldap24-sasl-client: net-mgmt/adcli
sssdmesmos, requer o MIT Kerberos, embora tenhamos o Heimdal como pacote básicoadclideseja openldap-sasl-client, mas outros pacotes (incluindo subdependências de sssd) openldap-clientsão recebidos, o que é mutex com o cliente sasl (por qualquer motivo bobo). Isso torna a instalação um pouco trabalhosa, mesmo com um conjunto mínimo de pacotes binários.Até o momento em que este artigo foi escrito, o pacote binário para SSSD para FreeBSD não inclui suporte para AD no SSSD
SMBadcliexiste, mas, até o momento, não funciona.
GSSAPI_MITcyrus-sasl-gssapi é necessário, mas a versão binária do pkg não funciona e possui problemas de dependência estranhos que fazem com que remova o SSSD.
GSSAPI_MITopenldap-sasl-client é necessário para a funcionalidade, mas o SSSD deseja obter a versão não SASL do openldap.
openldap-sasl-clientcom a GSSAPIopção selecionada ( make config) nas portas.pkg remove –f openldap-client
openldap-clientsem a remoção automática de quaisquer outros pacotes (como SSSD) e permitirá a instalação da versão SASLopenldap-sasl-client
pkg remove –f sssd
(Opcional) Depois que tudo estiver funcionando e verificado, você pode usar pkg createpara criar pacotes binários dos quatro pacotes com as opções apropriadas ativadas e usá-los em vez de construí-los nas portas de todos os sistemas. A instalação do binário segue um padrão semelhante ao processo de construção de portas:
pkg install sssd-1.11.7_8.txz
pkg add os outros pacotes (não instalar, adicionar), salvando o pacote openldap por último.openldap-sasl-clientfaça umpkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg createpara substituir a dependência openldap-clientcom openldap-sasl-clienta remover a necessidade de fazer isso remove / reinstalação. Ainda não tive tempo de fazer isso.
openldap-client, então você também precisará corrigi-las.Configuração Kerberos:
[libdefaults]
default_realm = MYDOMAIN.NET
forwardable = true
# Normalmente, tudo o que você precisa em um ambiente AD, pois os registros DNS SRV
# identificará os servidores / serviços AD / KRB. Comente se você
# deseja apontar manualmente para o servidor AD
dns_lookup_kdc = true
[reinos]
MYDOMAIN.NET = {
# Se você está apontando manualmente para um servidor AD diferente do que está no DNS
# admin_server = adserver.mydomain.net
# kdc = adserver.mydomain.net
}
[domínio_domínio]
mydomain.net = MYDOMAIN.NET
.mydomain.net = MYDOMAIN.NET
[sssd] config_file_version = 2 domínios = MYDOMAIN.NET serviços = nss, pam, pac fallback_homedir = / casa /% u [domínio / MYDOMAIN.NET] id_provider = ad access_provider = ad auth_provider = ad chpass_provider = ad # use atributos do AD POSIX, comente se você estiver usando gerado automaticamente # UIDs e GIDs. ldap_id_mapping = Falso cache_credentials = true ad_server = adserver.mydomain.net # se você não tiver o bash, ou o que estiver no loginShell da conta do AD atributo # instalado override_shell = / bin / tcsh
/etc/pam.darquivos que eu tive que modificar para fazer o SSSD funcionar com o FreeBSD:/etc/pam.d/sshd:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / sshd 197769 2009-10-05 09: 28: 54Z des $ # # Configuração do PAM para o serviço "sshd" # # auth auth suficiente pam_opie.so no_warn no_fake_prompts requisito de autenticação pam_opieaccess.so no_warn allow_local #auth suficiente pam_krb5.so no_warn try_first_pass #auth suficiente pam_ssh.so no_warn try_first_pass auth suficiente pam_unix.so no_warn try_first_pass nullok auth suficiente pam_sss.so use_first_pass autenticação necessária pam_unix.so no_warn use_first_pass # conta conta necessária pam_nologin.so #account required pam_krb5.so conta necessária pam_login_access.so conta necessária pam_unix.so conta pam_sss.so suficiente # sessão #session opcional pam_ssh.so want_agent sessão opcional pam_sss.so sessão necessária pam_mkhomedir.so mode = 0700 sessão necessária pam_permit.so # senha #password suficiente pam_krb5.so no_warn try_first_pass #password suficiente pam_unix.so try_first_pass use_authtok nullok senha suficiente pam_unix.so try_first_pass use_authtok senha suficiente pam_sss.so use_authtok
/etc/pam.d/system:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / system 197769-05-10 09: 28: 54Z des $ # # Padrões em todo o sistema # # auth auth suficiente pam_opie.so no_warn no_fake_prompts requisito de autenticação pam_opieaccess.so no_warn allow_local #auth suficiente pam_krb5.so no_warn try_first_pass #auth suficiente pam_ssh.so no_warn try_first_pass #auth necessário pam_unix.so no_warn try_first_pass nullok auth suficiente pam_unix.so no_warn try_first_pass auth suficiente pam_sss.so use_first_pass autenticação necessária pam_deny.so # conta #account required pam_krb5.so conta necessária pam_login_access.so conta necessária pam_unix.so conta pam_sss.so suficiente # sessão #session opcional pam_ssh.so want_agent sessão necessária pam_lastlog.so no_fail sessão opcional pam_sss.so sessão necessária pam_mkhomedir.so mode = 0700 # senha #password suficiente pam_krb5.so no_warn try_first_pass #password required pam_unix.so no_warn try_first_pass senha suficiente pam_unix.so no_warn try_first_pass nullok use_authtok senha suficiente pam_sss.so use_authtok #password obrigatório pam_deny.so
/etc/pam.d/su:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / su 219663 2011-03-15 10: 13: 35Z des $ # # Configuração do PAM para o serviço "su" # # auth auth suficiente pam_rootok.so no_warn auth suficiente pam_self.so no_warn requisito de autenticação pam_group.so no_warn group = wheel root_only fail_safe ruser auth inclui system.dist # conta conta inclui system.dist # sessão sessão necessária pam_permit.so
(recuar)
system.disté uma cópia do /etc/pam.d/systemarquivo de ações . Ele está incluído no /etc/pam.d/suarquivo acima para evitar problemas com o comando su.suacessar as contas do AD como raiz, já que uma vez raiz, sunão é necessário autenticar e as informações da conta são extraídas pela opção de serviço de nome via SSSD.sudopor razões de segurançaksue isso funciona para alternar do usuário A para o usuário B
ksu(in /usr/bin) não tem o SUID definido por padrão
ksufuncionar,chmod u+s /usr/bin/ksukrb5pacote instalado no /usr/local/bin) é SUID na instalação/usr/local/binantes /usr/bin, etcksu solicitará ao usuário a senha AD / Kerberos do usuário de destinopasswdnão funcionará para alterar sua senha do AD / Kerberos, mesmo se você adicionar pam_sss.soao arquivo PAM passwd. O passwdbinário suporta apenas o uso local e NIS kpasswdpara alterar sua senha nos servidores AD / Kerberos.Comutador de serviço de nome:
/etc/nsswitch.confarquivo deve ser configurado para usar o serviço sss para senhas e grupos. Exemplo:
group: files ssspasswd: files sssIngressando em um domínio:
adcli
kinitantes de usar, ele o faz com base nos dados fornecidos.
adcli join -D mydomain.net -U Administrator--show-details –vadcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
netUtilitário
Sambanetutilitário faz parte do conjunto Samba.smb.confarquivo de configuração, o que torna mais difícil e inconveniente o uso, principalmente de maneira não interativa.kinit. Novamente, isso é mais inconveniente e torna um pouco mais difícil o uso não interativo em um script, pois há duas etapas em vez de uma.
Considerações sobre SSHD:
/etc/ssh/sshd_config
GSSAPIAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication noao usar esta opção./bin/passwd, que não suporta nada além de NIS e arquivo de senha local.GSSAPICleanupCredentials yes
kdestroylogoutGSSAPIStrictAcceptorCheck no
host/<FQDN>@REALMpara falar com o KDC, mas às vezes erra (por exemplo, se o nome do host não corresponder ao nome DNS do servidor SSH). Essa opção permite que o SSHD use qualquer objeto principal no /etc/krb5.keytabarquivo, que inclua oshost/<FQDN>@REALMssh -K <ip>que funcionem sem solicitar uma senha (presumindo que você já tenha um 'kinit', claro).