# Serviços de domínio

Capítulo destinado  aos softwares provedores de serviços de domínio, como Samba e MS AD Directory Services

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

### 1. Introdução

<span style="color: #444444; font-family: 'Open Sans', Arial, sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">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.</span>

### 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:**

```shell
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:**

```shell
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 `<em>nmtui</em>`

**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

```shell
nano /etc/pam.d/common-session
```

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

<table id="bkmrk-session-required-pam" style="width: 812px;"><tbody><tr><td style="width: 810.5px;">session required pam\_mkhomedir.so skel=/etc/skel/ umask=0022

</td></tr></tbody></table>

**3.2.3.b. No Centos**

```shell
authconfig --update --enablesssd --enablesssdauth --enablemkhomedir
```

##### 3.3. Configuração do sudo

Execute o comando a seguir no shell do computador cliente:

<p class="callout warning">Neste exemplo, aos membros do grupo chamado "EXEMPLO\_SUDO", será permitido o uso do sudo. <span style="text-decoration: underline;">Substitua pelo grupo correto na hora da execução do comando</span></p>

```shell
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:

```shell
nano /etc/krb5.conf
```

Deixe o arquivo conforme mostrado a seguir.

<p class="callout warning">Neste exemplo, o nome do domínio utilizado foi "EXEMPLO.LOCAL". Altere o nome para o domínio correto.</p>

<p class="callout warning">Neste exemplo, o FQDN do servidor controlador de domínio utilizado foi "DC01.EXEMPLO.LOCAL". Altere o nome para o FQDN correto.</p>

<table id="bkmrk-%C2%A0-%5Blogging%5D-default" style="width: 812px; background-color: #f8f8f8;"><tbody><tr><td style="width: 778px;"><span style="font-weight: 400;">\[logging\]</span>

<span style="font-weight: 400;"> default = SYSLOG:NOTICE</span>

<span style="font-weight: 400;"> default = FILE:/var/log/krb5.log</span>

  
<span style="font-weight: 400;">\[libdefaults\]</span>

<span style="font-weight: 400;">default\_realm = DOMINIO.LOCAL</span>

  
<span style="font-weight: 400;">\# MIT Kerberos Variables.</span>

<span style="font-weight: 400;">krb5\_config = /etc/krb.conf</span>

<span style="font-weight: 400;">krb5\_realms = /etc/krb.realms</span>

<span style="font-weight: 400;">default\_keytab\_name = /etc/krb5.keytab</span>

  
<span style="font-weight: 400;">dns\_lookup\_kdc = no</span>

<span style="font-weight: 400;">dns\_lookup\_realm = no</span>

<span style="font-weight: 400;">ticket\_lifetime = 24h</span>

<span style="font-weight: 400;">kdc\_timesync = 1</span>

<span style="font-weight: 400;">ccache\_type = 4</span>

<span style="font-weight: 400;">forwardable = true</span>

<span style="font-weight: 400;">proxiable = true</span>

  
<span style="font-weight: 400;">\[realms\]</span>

<span style="font-weight: 400;"> DOMINIO.LOCAL= {</span>

<span style="font-weight: 400;"> </span><span style="font-weight: 400;">kdc = DC01.DOMINIO.LOCAL</span>

<span style="font-weight: 400;"> </span><span style="font-weight: 400;">admin\_server = DC01.DOMINIO.LOCAL  
</span>

<span style="font-weight: 400;"> </span><span style="font-weight: 400;">default\_domain = DOMINIO.LOCAL  
</span>

<span style="font-weight: 400;">}</span>

  
<span style="font-weight: 400;">\[domain\_realm\]</span>

<span style="font-weight: 400;">.ifpe.local = DOMINIO.LOCAL  
</span>

</td></tr></tbody></table>

##### 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:

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

Deixe o arquivo conforme mostrado a seguir.

<p class="callout warning">Neste exemplo, o nome do domínio utilizado foi "EXEMPLO.LOCAL". Altere o nome para o domínio correto.</p>

<p class="callout warning">Neste exemplo, o FQDN do servidor controlador de domínio utilizado foi "DC01.EXEMPLO.LOCAL". Altere o nome para o FQDN correto.</p>

<p class="callout warning">Substitua "<span style="font-weight: 400;">CN=USUARIO\_SSSD,OU=SUB,DC=DOMINIO,DC=LOCAL</span>" e "<span style="font-weight: 400;">XXXXX\_SENHA\_DO\_SSSD\_XXXXX</span>" pelo CN e senha corretos</p>

<table id="bkmrk-%5Bsssd%5D-debug_level-%3D" style="width: 812px; background-color: #f8f8f8;"><tbody><tr><td style="width: 813.5px;"><span style="font-weight: 400;">\[sssd\]</span>

<span style="font-weight: 400;">debug\_level = 7</span>

<span style="font-weight: 400;">reconnection\_retries = 2</span>

  
<span style="font-weight: 400;">config\_file\_version = 2</span>

<span style="font-weight: 400;">sbus\_timeout = 10</span>

<span style="font-weight: 400;">services = nss,pam</span>

<span style="font-weight: 400;">domains = DOMINIO.LOCAL  
</span>

  
<span style="font-weight: 400;">\[nss\]</span>

<span style="font-weight: 400;">debug\_level = 7</span>

<span style="font-weight: 400;">reconnection\_retries = 2</span>

  
<span style="font-weight: 400;">filter\_users = root, daemon, bin, sys, sync, games, man, lp, mail, news, uucp, proxy</span>

<span style="font-weight: 400;">override\_homedir = /home/%u.%d</span>

<span style="font-weight: 400;">fallback\_homedir = /home/%u</span>

<span style="font-weight: 400;">default\_shell = /bin/bash</span>

  
<span style="font-weight: 400;">\[pam\]</span>

<span style="font-weight: 400;">debug\_level = 7</span>

<span style="font-weight: 400;">reconnection\_retries = 2</span>

  
<span style="font-weight: 400;">pam\_verbosity = 2</span>

<span style="font-weight: 400;">pam\_id\_timeout = 15</span>

  
<span style="font-weight: 400;">offline\_credentials\_expiration = 2</span>

<span style="font-weight: 400;">offline\_failed\_login\_attempts = 2</span>

<span style="font-weight: 400;">offline\_failed\_login\_delay = 2</span>

  
<span style="font-weight: 400;">\[domain/DOMINIO.LOCAL\]</span>

<span style="font-weight: 400;">debug\_level = 7</span>

<span style="font-weight: 400;">reconnection\_retries = 2</span>

  
<span style="font-weight: 400;">enumerate = False</span>

<span style="font-weight: 400;">cache\_credentials = True</span>

<span style="font-weight: 400;">entry\_cache\_timeout = 600</span>

  
<span style="font-weight: 400;">\# access\_provider = simple</span>

<span style="font-weight: 400;">access\_provider = ldap</span>

<span style="font-weight: 400;">auth\_provider = krb5</span>

<span style="font-weight: 400;">chpass\_provider = krb5</span>

<span style="font-weight: 400;">id\_provider = ldap</span>

  
<span style="font-weight: 400;">krb5\_server = DC01.DOMINIO.LOCAL  
</span>

<span style="font-weight: 400;">krb5\_realm = DOMINIO.LOCAL  
</span>

<span style="font-weight: 400;">krb5\_store\_password\_if\_offline = True</span>

<span style="font-weight: 400;">krb5\_kpasswd = DC01.DOMINIO.LOCAL  
</span>

<span style="font-weight: 400;">krb5\_renew\_interval = 30m</span>

<span style="font-weight: 400;">krb5\_renewable\_lifetime = 7d</span>

  
<span style="font-weight: 400;">ldap\_default\_bind\_dn = CN=USUARIO\_SSSD,OU=SUB,DC=DOMINIO,DC=LOCAL</span>

<span style="font-weight: 400;">ldap\_default\_authtok = XXXXX\_SENHA\_DO\_SSSD\_XXXXX</span>

<span style="font-weight: 400;">ldap\_group\_object\_class = group</span>

<span style="font-weight: 400;">ldap\_id\_mapping = True</span>

<span style="font-weight: 400;">ldap\_id\_use\_start\_tls = True</span>

<span style="font-weight: 400;">ldap\_network\_timeout = 5</span>

<span style="font-weight: 400;">ldap\_referrals = False</span>

<span style="font-weight: 400;">ldap\_schema = ad</span>

<span style="font-weight: 400;">ldap\_search\_base = DC=DOMINIO,DC=LOCAL  
</span>

<span style="font-weight: 400;">ldap\_sudo\_search\_base = DC=DOMINIO,DC=LOCAL  
</span>

<span style="font-weight: 400;">ldap\_tls\_reqcert = never</span>

<span style="font-weight: 400;">ldap\_tls\_cacert = /etc/ssl/private/sssd-ca.pem</span>

<span style="font-weight: 400;">ldap\_uri = ldaps://DC01.DOMINIO.LOCAL</span>

  
<span style="font-weight: 400;">ldap\_access\_order = expire</span>

<span style="font-weight: 400;">ldap\_account\_expire\_policy = ad</span>

<span style="font-weight: 400;">ldap\_user\_member\_of = memberOf</span>

<span style="font-weight: 400;">ldap\_user\_object\_class = user</span>

<span style="font-weight: 400;">ldap\_force\_upper\_case\_realm = True</span>

</td></tr></tbody></table>

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

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