# Samba AD DC (Docker) + Cliente Linux com Home Remota
**Domínio:** `FUTURELAB.DCC.UFMG.BR`
**IP do Servidor (DC1):** `192.168.7.130`
**Sistema Operacional Cliente:** Ubuntu / Debian
---
## Índice
1. [Configurar Resolver DNS](#1-configurar-resolver-dns)
2. [Preparação do Cliente Linux](#2-preparação-do-cliente-linux)
3. [Ingresso no Domínio (Join)](#3-ingresso-no-domínio-join)
4. [Automação da Home Remota (PAM & Mount)](#4-automação-da-home-remota-pam--mount)
5. [Redirecionamento de Diretórios XDG para Local](#5-redirecionamento-de-diretórios-xdg-para-local)
---
## 1. Configurar Resolver DNS
Edite `/etc/systemd/resolved.conf`:
```ini
[Resolve]
DNS=192.168.7.130
Domains=futurelab.dcc.ufmg.br
DNSStubListener=no
```
---
## 2. Preparação do Cliente Linux
### 2.1 DNS e Resolução de Nomes
O cliente deve apontar para o IP do DC1 para resolver o domínio e o Kerberos.
**`/etc/resolv.conf`**
```
nameserver 192.168.7.130
search futurelab.dcc.ufmg.br
```
**`/etc/hosts`**
```
127.0.0.1 localhost
[IP_DO_CLIENTE] ps-[FINAL-IP].futurelab.dcc.ufmg.br ps-[FINAL-IP]
```
### 2.2 Instalação de Pacotes
```bash
sudo apt update
sudo apt install -y sssd-ad sssd-tools realmd adcli krb5-user ntpdate libpam-mount cifs-utils keyutils
```
---
## 3. Ingresso no Domínio (Join)
### 3.1 Executar o Join
```bash
sudo realm join -U Administrator -v 192.168.7.130
```
### 3.2 Configurar o Kerberos
Edite o arquivo `/etc/krb5.conf`
```ini
[libdefaults]
default_realm = FUTURELAB.DCC.UFMG.BR
dns_lookup_realm = false
dns_lookup_kdc = true
rdns = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
FUTURELAB.DCC.UFMG.BR = {
kdc = dc1.futurelab.dcc.ufmg.br
admin_server = dc1.futurelab.dcc.ufmg.br
default_domain = futurelab.dcc.ufmg.br
}
[domain_realm]
.futurelab.dcc.ufmg.br = FUTURELAB.DCC.UFMG.BR
futurelab.dcc.ufmg.br = FUTURELAB.DCC.UFMG.BR
```
### 3.2 Configurar o SSSD
Após o join, ajuste `/etc/sssd/sssd.conf` para usar nomes curtos (sem `@dominio`):
```ini
[domain/futurelab.dcc.ufmg.br]
[sssd]
domains = futurelab.dcc.ufmg.br
config_file_version = 2
services = nss, pam
[domain/futurelab.dcc.ufmg.br]
default_shell = /bin/bash
ad_server = dc1.futurelab.dcc.ufmg.br
krb5_store_password_if_offline = True
cache_credentials = True
krb5_realm = FUTURELAB.DCC.UFMG.BR
realmd_tags = manages-system joined-with-adcli
id_provider = ad
fallback_homedir = /home/%u
ad_domain = futurelab.dcc.ufmg.br
use_fully_qualified_names = False
ldap_id_mapping = True
access_provider = ad
# Nomes curtos sem @dominio
use_fully_qualified_names = False
fallback_homedir = /home/%u
# Permite login offline com credenciais em cache
cache_credentials = true
krb5_store_password_if_offline = true
# Evita enumeração completa de usuários/grupos (melhora desempenho)
enumerate = false
# Timeouts para não travar no login
ldap_network_timeout = 3
ldap_search_timeout = 5
ldap_opt_timeout = 5
# Cache de entradas e grupos
entry_cache_timeout = 600
entry_cache_group_timeout = 3600
krb5_ccname_template = FILE:/tmp/krb5cc_%U
krb5_server = dc1.futurelab.dcc.ufmg.br
```
### 3.3 Reiniciar o Serviço
```bash
sudo systemctl restart sssd
```
---
## 4. Automação da Home Remota (PAM & Mount)
### 4.1 Configuração do pam_mount
Edite `/etc/security/pam_mount.conf.xml` e adicione as linhas abaixo **antes** de ``:
```xml
```
### 4.2 Ativação no PAM
Edite `/etc/pam.d/common-session` e coloque:
```
session optional pam_umask.so
# and here are more per-package modules (the "Additional" block)
session required pam_unix.so
session optional pam_sss.so
session optional pam_keyinit.so force revoke
session optional pam_sss.so
session optional pam_mount.so
session optional pam_systemd.so
```
---
## 5. Redirecionamento de Diretórios XDG para Local
Redirecionar `.cache`, `.config` e `.local` para o disco local evita I/O remoto excessivo (especialmente pelo Nautilus).
### 5.1 Criar o Script de Perfil
Crie o arquivo `/etc/profile.d/xdg-local.sh` (aplicado a todos os usuários do domínio):
```bash
#!/bin/bash
export XDG_CONFIG_HOME="/var/local/appconfig/$USER/.config"
export XDG_CACHE_HOME="/var/local/appconfig/$USER/.cache"
mkdir -p "$XDG_CONFIG_HOME"
mkdir -p "$XDG_CACHE_HOME"
# Redireciona symlinks na home remota para os diretórios locais
if [ -d "/home/$USER" ]; then
# .cache remoto → local
if [ ! -L "/home/$USER/.cache" ]; then
rm -rf "/home/$USER/.cache" 2>/dev/null
ln -sfn "$XDG_CACHE_HOME" "/home/$USER/.cache"
fi
# .config remoto → local
if [ ! -L "/home/$USER/.config" ]; then
rm -rf "/home/$USER/.config" 2>/dev/null
ln -sfn "$XDG_CONFIG_HOME" "/home/$USER/.config"
fi
# .local remoto → local (inclui recently-used.xbel, muito acessado pelo Nautilus)
mkdir -p "/var/local/appconfig/$USER/.local/share"
if [ ! -L "/home/$USER/.local" ]; then
rm -rf "/home/$USER/.local" 2>/dev/null
ln -sfn "/var/local/appconfig/$USER/.local" "/home/$USER/.local"
fi
fi
export SNAP_USER_DATA="/var/local/appconfig/$USER/snap"
export SNAP_USER_COMMON="/var/local/appconfig/$USER/snap/common"
mkdir -p "$SNAP_USER_DATA" "$SNAP_USER_COMMON"
```
### 5.2 Criar o Diretório Base
```bash
sudo mkdir -p /var/local/appconfig
sudo chmod 777 /var/local/appconfig
```
### 5.3 Congigurar para apagar dados a cada 7 dias
```bash
sudo crontab -e
```
Adicione a seguinte linha
```bash
0 0 * * * find /var/local/appconfig -type f -mtime +7 -delete
```