Cliente: Configuração do SSSD (controlador de domínio Samba4)

1. Introdução

O System Security Services Daemon é um pacote de software originalmente desenvolvido para o sistema operacional Linux que fornece um conjunto de daemons para gerenciar o acesso a diretórios remotos e mecanismos de autenticação. Funciona como um agregado de daemons que gerenciam mecanismos de autenticação remota, assim como serviços de diretórios que manipula diretamente o PAM e o NSS.

2. Obtendo os dados

Para que a configuração seja realizada com sucesso, certifique-se de:

  • Ter acesso administrativo ao computador no qual o SSSD será instalado

  • Saber a distribuição linux utilizada no computador no qual o SSSD será instalado

  • Saber o nome do domínio

  • Saber o(s) endereço(s) IP do(s) controlador(es) do domínio

  • Possuir um arquivo com o certificado da CA utilizada pelo servidor

  • Possuir os dados de usuário e senha utilizados pelo SSSD

3. Executando a configuração

Instale os pacotes necessários para o funcionamento do serviço do SSSD. A lista varia conforme a distribuição.

3.1. Instalação dos pacotes

3.1.a. No Debian/Ubuntu:

apt install -y sudo cracklib-runtime ldap-utils libbasicobjects0 libc-ares2 libcollection4 \
 libcrack2 libdhash1 libini-config5 libipa-hbac0 libldap-common libnl-3-200 libnl-route-3-200 \
 libldb1 libnspr4 libnss-sss libntdb1 libopts25 libpwquality-common libpwquality1 libpam-pwquality \
 libpath-utils1 libpam-sss libsss-sudo libpython2.7 libref-array1 libsasl2-modules-gssapi-mit \
 libnss3 libsss-idmap0 libtalloc2 libtdb1 libtevent0 libwbclient0 ntp python-sss python-talloc \
 samba-libs sssd sssd-ad sssd-ad-common sssd-common sssd-ipa sssd-krb5 sssd-krb5-common sssd-ldap\
 sssd-proxy krb5-config krb5-user libgssrpc4

3.1.b. No Centos:

yum install -y sudo sssd ntp openldap sssd-ldap pam_ldap pam_krb5 krb5-workstation
3.2. Configuração do sistema

3.2.1. Configuração do DNS

Para que os servidores utilizados por este serviço sejam resolvidos corretamente, defina as configurações de rede para utilizar o IP do controlador de domínios como o servidor DNS primário do computador cliente e o nome do domínio ao qual o computador será ingressado no domínio a ser utilizado para buscas.

Essa configuração pode ser realizada de formas diferentes. A forma recomendada difere de acordo com o sistemas operacional utilizado.

  • No Debian/Ubuntu: Edite o arquivo /etc/network/interfaces
  • No Centos: Utilize o comando nmtui

3.2.2. Certificado da CA utilizado pelo samba

A comunicação entre o cliente e o servidor samba utiliza TLS para proteger os dados. Utilizando esta técnica, o cliente usa um certificado para se autenticar com o servidor.

Crie o arquivo /etc/ssl/private/sssd-ca.pem contendo o certificado da CA utilizado pelo samba.

3.2.3. Criação automática da pasta do usuário

Uma vez que o SSSD tenha autenticado os usuários no domínio e tenham acesso ao sistema, a pasta do usuário não será criada automaticamente.

Para habilitar a criação automática da pasta do usuário, siga o procedimento:

3.2.3.a. No Debian/Ubuntu

Execute o seguinte comando no shell do computador

nano /etc/pam.d/common-session

Insira a linha a seguir após o primeiro bloco de comentários

session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

3.2.3.b. No Centos

authconfig --update --enablesssd --enablesssdauth --enablemkhomedir
3.3. Configuração do sudo

Execute o comando a seguir no shell do computador cliente:

Neste exemplo, aos membros do grupo chamado "EXEMPLO_SUDO", será permitido o uso do sudo. Substitua pelo grupo correto na hora da execução do comando

echo '%EXEMPLO_SUDO ALL=(ALL) ALL' > /etc/sudoers.d/ldap_sudo_group
chmod 0600 /etc/sudoers.d/ldap_sudo_group

O item iniciado por um símbolo de percentual (%EXEMPLO_SUDO) indica o nome do grupo que irá receber as permissões do sudo.

 

3.4. Configuração do kerberos

Cabe ao kerberos garantir a troca de chaves, de forma segura, entre os computadores de uma rede que o utilize. Para tal, é necessário configurar o cliente para se comunicar aos provedores deste serviço.

Execute o comando a seguir no shell do computador cliente:

nano /etc/krb5.conf

Deixe o arquivo conforme mostrado a seguir.

Neste exemplo, o nome do domínio utilizado foi "EXEMPLO.LOCAL". Altere o nome para o domínio correto.

Neste exemplo, o FQDN do servidor controlador de domínio utilizado foi "DC01.EXEMPLO.LOCAL". Altere o nome para o FQDN correto.

[logging]

default = SYSLOG:NOTICE

default = FILE:/var/log/krb5.log


[libdefaults]

default_realm = DOMINIO.LOCAL


# MIT Kerberos Variables.

krb5_config = /etc/krb.conf

krb5_realms = /etc/krb.realms

default_keytab_name = /etc/krb5.keytab


dns_lookup_kdc = no

dns_lookup_realm = no

ticket_lifetime = 24h

kdc_timesync = 1

ccache_type = 4

forwardable = true

proxiable = true


[realms]

  DOMINIO.LOCAL= {

    kdc = DC01.DOMINIO.LOCAL

    admin_server = DC01.DOMINIO.LOCAL

    default_domain = DOMINIO.LOCAL

}


[domain_realm]

.ifpe.local = DOMINIO.LOCAL

3.5. Configuração do SSSD

O SSSD é o serviço que realiza a autenticação em si, se apoiando na resolução de nomes e nas facilidades oferecidas pelo kerberos.

3.5.1. O arquivo de configuração principal

Execute o comando a seguir no shell do computador cliente:

touch /etc/sssd/sssd.conf
chmod 600 /etc/sssd/sssd.conf
nano /etc/sssd/sssd.conf

Deixe o arquivo conforme mostrado a seguir.

Neste exemplo, o nome do domínio utilizado foi "EXEMPLO.LOCAL". Altere o nome para o domínio correto.

Neste exemplo, o FQDN do servidor controlador de domínio utilizado foi "DC01.EXEMPLO.LOCAL". Altere o nome para o FQDN correto.

Substitua  "CN=USUARIO_SSSD,OU=SUB,DC=DOMINIO,DC=LOCAL" e "XXXXX_SENHA_DO_SSSD_XXXXX" pelo CN e senha corretos

[sssd]

debug_level = 7

reconnection_retries = 2


config_file_version = 2

sbus_timeout = 10

services = nss,pam

domains = DOMINIO.LOCAL


[nss]

debug_level = 7

reconnection_retries = 2


filter_users = root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp, proxy

override_homedir = /home/%u.%d

fallback_homedir = /home/%u

default_shell = /bin/bash


[pam]

debug_level = 7

reconnection_retries = 2


pam_verbosity = 2

pam_id_timeout = 15


offline_credentials_expiration = 2

offline_failed_login_attempts = 2

offline_failed_login_delay = 2


[domain/DOMINIO.LOCAL]

debug_level = 7

reconnection_retries = 2


enumerate = False

cache_credentials = True

entry_cache_timeout = 600


# access_provider = simple

access_provider = ldap

auth_provider = krb5

chpass_provider = krb5

id_provider = ldap


krb5_server = DC01.DOMINIO.LOCAL

krb5_realm = DOMINIO.LOCAL

krb5_store_password_if_offline = True

krb5_kpasswd = DC01.DOMINIO.LOCAL

krb5_renew_interval = 30m

krb5_renewable_lifetime = 7d


ldap_default_bind_dn = CN=USUARIO_SSSD,OU=SUB,DC=DOMINIO,DC=LOCAL

ldap_default_authtok = XXXXX_SENHA_DO_SSSD_XXXXX

ldap_group_object_class = group

ldap_id_mapping = True

ldap_id_use_start_tls = True

ldap_network_timeout = 5

ldap_referrals = False

ldap_schema = ad

ldap_search_base = DC=DOMINIO,DC=LOCAL

ldap_sudo_search_base = DC=DOMINIO,DC=LOCAL

ldap_tls_reqcert = never

ldap_tls_cacert = /etc/ssl/private/sssd-ca.pem

ldap_uri = ldaps://DC01.DOMINIO.LOCAL


ldap_access_order = expire

ldap_account_expire_policy = ad

ldap_user_member_of = memberOf

ldap_user_object_class = user

ldap_force_upper_case_realm = True

3.5.2. Controlando a execução do serviço

systemctl enable sssd # Ativa o início automático do serviço após o boot
systemctl start sssd # Inicia o serviço imediatamente