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 sssd
o 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 sssd
o backend do AD com o Kerberos TGT funcionando?
Respostas:
Existem algumas considerações complicadas para que tudo funcione imediatamente. O FreeBSD suporta apenas a sssd
versã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, sssd
não será possível lidar com este caso.
Portanto, na versão real, sssd
você 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.conf
com 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.conf
com 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.conf
para 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.conf
para 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 PAM
domí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/bin
e 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-client
security/cyrus-sasl2-gssapi: security/cyrus-sasl2
net/openldap24-sasl-client: security/cyrus-sasl2
security/sssd: security/nss
security/sssd:
security/krb5
security/sssd: security/cyrus-sasl2
security/sssd:
net/openldap24-client
security/sssd: lang/python27
security/sssd: lang/python2
security/sssd: dns/c-ares
security/sssd: devel/tevent
security/sssd: devel/talloc
security/sssd: devel/popt
security/sssd: devel/pcre
security/sssd: devel/libunistring
security/sssd: devel/libinotify
security/sssd: devel/gettext-runtime
security/sssd: devel/ding-libs
security/sssd: devel/dbus
security/sssd: databases/tdb
security/sssd: databases/ldb
Dependências reversas dos vários pacotes:
net/openldap24-sasl-client: sysutils/msktutil
net/openldap24-sasl-client: net/nss-pam-ldapd-sasl
net/openldap24-sasl-client: net-mgmt/adcli
sssd
mesmos, requer o MIT Kerberos, embora tenhamos o Heimdal como pacote básicoadcli
deseja openldap-sasl-client
, mas outros pacotes (incluindo subdependências de sssd
) openldap-client
sã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
SMB
adcli
existe, mas, até o momento, não funciona.
GSSAPI_MIT
cyrus-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_MIT
openldap-sasl-client
é necessário para a funcionalidade, mas o SSSD deseja obter a versão não SASL do openldap.
openldap-sasl-client
com a GSSAPI
opção selecionada ( make config
) nas portas.pkg remove –f openldap-client
openldap-client
sem 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 create
para 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-client
faça umpkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg create
para substituir a dependência openldap-client
com openldap-sasl-client
a 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.d
arquivos 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/system
arquivo de ações . Ele está incluído no /etc/pam.d/su
arquivo acima para evitar problemas com o comando su.su
acessar as contas do AD como raiz, já que uma vez raiz, su
não é necessário autenticar e as informações da conta são extraídas pela opção de serviço de nome via SSSD.sudo
por razões de segurançaksu
e 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
ksu
funcionar,chmod u+s /usr/bin/ksu
krb5
pacote instalado no /usr/local/bin
) é SUID na instalação/usr/local/bin
antes /usr/bin
, etcksu
solicitará ao usuário a senha AD / Kerberos do usuário de destinopasswd
não funcionará para alterar sua senha do AD / Kerberos, mesmo se você adicionar pam_sss.so
ao arquivo PAM passwd. O passwd
binário suporta apenas o uso local e NIS kpasswd
para alterar sua senha nos servidores AD / Kerberos.Comutador de serviço de nome:
/etc/nsswitch.conf
arquivo deve ser configurado para usar o serviço sss para senhas e grupos. Exemplo:
group: files sss
passwd: files sss
Ingressando em um domínio:
adcli
kinit
antes de usar, ele o faz com base nos dados fornecidos.
adcli join -D mydomain.net -U Administrator--show-details –v
adcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
net
Utilitário
Sambanet
utilitário faz parte do conjunto Samba.smb.conf
arquivo 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 no
ao usar esta opção./bin/passwd
, que não suporta nada além de NIS e arquivo de senha local.GSSAPICleanupCredentials yes
kdestroy
logoutGSSAPIStrictAcceptorCheck no
host/<FQDN>@REALM
para 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.keytab
arquivo, que inclua oshost/<FQDN>@REALM
ssh -K <ip>
que funcionem sem solicitar uma senha (presumindo que você já tenha um 'kinit', claro).