#!/bin/bash
# Criado: Tácio de Jesus Andrade - tacio@multiti.com.br
# Data: 22-12-2019
# Função: Script que Integra o OpenMediaVault 3, 4 ou 5 no Domínio
# Informações: Antes de executar esse script verifique se o DNS server é o Domain Controller e se pinga para o dominio.local 

echo "Informe o nome do domínio Ex. EXEMPLO.LOCAL: " ; read DOMAIN
echo "Informe o nome do seu Domain Controller Ex. dc01.exemplo.local: " ; read DC
echo "Informe o usuário que será usado como Domain Admin para integrar ao domínio: " ; read DOMAINUSER
# Instala os pacotes necessários
apt-get install krb5-user krb5-config winbind samba samba-common smbclient cifs-utils libpam-krb5 libpam-winbind libnss-winbind

# Backup arquivo Kerberos
cp /etc/krb5.conf /etc/krb5.conf.ori

# Corrige arquivo Kerberos
echo "[logging]
Default = FILE:/var/log/krb5.log

[libdefaults]
ticket_lifetime = 24000
clock-skew = 300
default_realm = $DOMAIN
dns_lookup_realm = true
dns_lookup_kdc = true

[realms]
`echo $DOMAIN`  = {
kdc = $DC
default_domain = `echo $DOMAIN | tr 'A-Z' 'a-z'`
admin_server = $DC
}

[domain_realm]
.`echo $DOMAIN | tr 'A-Z' 'a-z'` = $DOMAIN
`echo $DOMAIN | tr 'A-Z' 'a-z'` = $DOMAIN

[login]
krb4_convert = true
krb4_get_tickets = false" > /etc/krb5.conf

# Corrige o problema de resolução de DNS e faz os usuários do winbind poderem logar
cp /etc/nsswitch.conf /etc/nsswitch.conf.ori
echo "passwd:         compat winbind
group:          compat winbind
shadow:         files
gshadow:        files

# hosts:          files mdns4_minimal [NOTFOUND=return] dns myhostname
hosts:          dns files mdns4_minimal [NOTFOUND=return] myhostname
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis" > /etc/nsswitch.conf

# Testa se a conexão com o DC está ok
echo "


Digite a senha de Administrador do domínio para checar a viabilidade de integrar ao domínio" 
kinit $DOMAINUSER
klist

# Adicione isso no Extras do samba para integrar ao domínio
echo "Habilite o samba e adicione isso no campo Extras do samba do OpenMediaVault pela interface gráfica:

security = ads
realm = `echo $DOMAIN`
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
obey pam restrictions = yes
protocol = SMB3
netbios name = `hostname | cut -d '.' -f1`
password server = *
encrypt passwords = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind use default domain = yes
winbind refresh tickets = yes
idmap config `echo $DOMAIN | cut -d '.' -f1` : backend  = rid
idmap config `echo $DOMAIN | cut -d '.' -f1` : range = 1000-9999
Idmap config *:backend = tdb 
idmap config *:range = 85000-86000 
template shell    = /bin/sh
lanman auth = no
ntlm auth = yes
client lanman auth = no
client plaintext auth = No
client NTLMv2 auth = Yes" > /tmp/smb.tmp
cat /tmp/smb.tmp

# Requisita o Enter para continuar a configuração
echo "


Após fazer a alteração, digite Enter: " ; read ENTER

# Integra ao domínio
echo "


Digite a senha de Administrador do domínio para integrar o OpenMediaVault ao DC" 
net ads join -U $DOMAINUSER
net ads testjoin

# Reinicia os serviços
/etc/init.d/smbd restart
/etc/init.d/winbind restart

# Lista os usuários do domínio
sleep 3
wbinfo -u

echo "Reinicie o servidor e verifique se os usuários foram adicionados a interface gráfica com sucesso!"