Linux Logando no AD com SSSD

Oi pessoal, Isaac aqui!

Alguns anos atrás logar o Linux no AD era uma baita dor de cabeça tinha que usar o Samba e me da preguiça só de pensar.

Na empresa nova em que estou trabalhando fui solicitado a fazer com que os servidores se usassem a base do AD para que apenas as pessoas do grupo determinado pudessem ter acesso, e pensei viiiiish, mas ai fui estudar um pouco e descobri a solução quase mágica que é o SSSD, como bom entusiasta de Software Livre, estou aqui pra compartilhar.

Primeiro de tudo precisamos baixar os pacotes necessários para o funcionamento:

Se estiver em algum “Filho do Debian”:

apt -y install realmd sssd sssd-tools adcli krb5-user packagekit samba-common samba-common-bin samba-libs resolvconf

Agora, se sua praia for os “chapéus vermelhos”:

yum install sssd sssd-tools adcli packagekit samba-common samba-common samba-libs krb5-workstation realmd

 

Depois disso Editamos o /etc/krb5.conf da seguite forma:

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
default_realm = DOMINIO.LOCAL
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes

[realms]
DOMINIO.LOCAL = {
kdc = servidor.dominio.local:88
admin_server = servidor.dominio.local:749
}

[domain_realm]
dominio.local = DOMINIO.LOCAL
.dominio.local = DOMINIO.LOCAL

 

 

Lembrando que aqui no nosso exemplo o nome do domínio é “dominio.local” e que o AD é meio chato então é importante as vezes deixar em caixa alta algumas coisas. Outra coisa, é importante que seu servidor de DNS consiga resolver o seu domínio e o nome do seu servidor de domínios.

Agora vamos adicionar a máquina ao domínio:

#kinit Administrator@DOMINIO.LOCAL

#realm leave DOMINIO.LOCAL

#realm discover DOMINIO.LOCAL

#realm join DOMINIO.LOCAL

 

Agora a cereja do bolo editar arquivo /etc/sssd/sssd.conf:

[sssd]
domains = dominio.local
config_file_version = 2
services = nss, pam , pac , sudo

[domain/dominio.local]
ad_domain = dominio.local
krb5_realm = DOMINIO.LOCAL
realmd_tags = manages-system joined-with-adcli
cache_credentials = False
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%d/%u
access_provider = ad
auth_provider = ad
chpass_provider = ad
#debug_level = 9
#debug_level = 0x0FF0
enumerate = True
case_sensitive = False
#testes
ldap_user_principal = nosuchattribute
krb5_validate = false
krb5_use_enterprise_principal = false
krb5_canonicalize = false
ad_gpo_access_control = permissive

[nss]
filter_groups = root
filter_users = root

[pam]
offline_credentials_expiration = 3

 

Agora, para que as pastas home dos usuários sejam criadas automaticamente quando for feito o login edite /etc/pam.d/common-account e inclua a linha:

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

 

Reiniciar e habilitar o sistema do sssd:

systemctl restart sssd

systemctl enable sssd

 

Pronto, os usuários do AD já podem se logar no seu Linux sem maiores problemas.

Agora tenho uns truques legais pra dar uma incrementada na situação:

1 – Para que apenas um grupo especifico do AD consiga logar no Linux

Editar o /etc/pam.d/sshd (ou /etc/pam.d/login para logins locais) e adicionar ou descomentar a linha:

account required pam_access.so

 

Ai então editamos o arquivo /etc/security/access.conf da seguinte forma

+:dominio.local\grupo_ad:ALL (permite o grupo_ad se logar vindo de qualquer ip)

+:suporte:ALL (permite o usuário local chamado suporte se logar de qualquer ip)

+:root:10.1.1.1(permite o usuário local root se logar vindo apenas de um ip específico)

-:ALL:ALL (nega o acesso de qualquer outro usuário a vindo de qualquer ip)

 

Reiniciar o Serviço do SSH!

 

2 – Para que um grupo do AD possa usar poderes de root:

Editar /etc/sudoers da maneira bagunçada que funcionou pra mim :

 

%dominio.local\\grupo_ad ALL=NOPASSWD: ALL
+dominio.local\\grupo_ad ALL=NOPASSWD: ALL
+grupo_ad@dominio.local ALL=NOPASSWD: ALL
%grupo_ad ALL=NOPASSWD: ALL

Bom ficou meio grande pra caramba, mas acho que da pra seguir certinho sem maiores problemas e o resultado é muito bom. Lembre-se sempre de deixar um usuário local de “back door” para que você consiga logar no servidor em qualquer eventualidade.

No mais é isso, espero que vocês usem e gostem do artigo. Até a próxima.

 

 

Anúncios