samba – authentification avec sssd

sssd

SSSD permet de faire communiquer une machine linux et un domaine Active Directory. L’AD gère la gestion des identités dans de nombreux parcs informatique. SSSD permet d’authentifier les utilisateurs de linux sur l’Active Directory. Il offre également l’authentification hors-ligne et évite le doublement de compte en cas de non connexion avec le réseau de l’entreprise.

Pour DEBIAN

Vérifier que vous n’utilisiez pas précédemment nscd, dans le cas contraire, il vous faut les désinstaller

# apt-get remove --purge nscd nslcd nslcd-utils ldap-utils libnss-ldapd libpam-ldapd

Installer sssd

# apt-get autoclean && apt-get autoremove
# apt-get install samba-common-bin sssd-tools sssd libnss-sss libpam-sss realmd packagekit

Intégrer la machine avant Debian 9 au domaine avec les commandes suivantes

# mkdir -p /var/lib/samba/private
# realm join --user=colombet AD.MONDOMAINE.FR  

ou intégrer la machine après Debian 9 au domaine avec les commandes suivantes

# realm join --user=colombet AD.MONDOMAINE.FR  --install=/
# adcli join --user=colombet AD.MONDOMAINE.FR

Création automatique du homedirectory avec le paquet suivant

# apt-get install oddjob-mkhomedir
# echo "session required pam_mkhomedir.so skel=/etc/skel/ umask=0022" | tee -a /etc/pam.d/common-session

Créer un fichier template de sssd

# vi /etc/sssd/sssd.conf.ori

[sssd]
domains = AD.MONDOMAINE.FR
config_file_version = 2
services = nss, pam
sbus_timeout = 30

[nss]
filter_users = root
filter_groups = root
reconnection_retries = 5

[pam]
reconnection_retries = 5
offline_credentials_expiration = 0

[domain/AD.MONDOMAINE.FR]
ad_domain = AD.MONDOMAINE.FR
krb5_realm = AD.MONDOMAINE.FR
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_sasl_authid = NOM_DE_LA_MACHINE$
ldap_id_mapping = True
use_fully_qualified_names = False
fallback_homedir = /home/%u
#access_provider = ad
access_provider = simple

Copier le fichier template sssd

# cp /etc/sssd/sssd.conf.ori /etc/sssd/sssd.conf
# chmod 600 /etc/sssd/sssd.conf*

Activer le service sssd et relancer la machine

# systemctl enable sssd && systemctl start sssd
# pam-auth-update --force
# reboot

Tester la bonne intégration au domaine

# id colombet
uid=1000(colombet) gid=1000(colombet) groups=2000(sudo)

Activer l’utilisateur de faire su sudo via le groupe sudo

# apt-get install libsss-sudo
# echo "%sudo ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/domain_admins

# vi /etc/nsswitch.conf
sudoers:        files

Pour CENTOS 6

Installer sssd

# yum install realmd sssd oddjob oddjob-mkhomedir adcli samba-common ntpdate ntp

Intégrer la machine au domaine avec les commandes suivantes

# adcli join --user=colombet AD.MONDOMAINE.FR
Password for colombet@AD.MONDOMAINE.FR:

Créer le fichier sssd

# egrep -v '(^#|^$)' /etc/sssd/sssd.conf
[sssd]
domains = AD.MONDOMAINE.FR
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
services = nss, pam

[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
entry_cache_timeout = 300
entry_cache_nowait_percentage = 75

[domain/AD.MONDOMAINE.FR]
ad_domain = AD.MONDOMAINE.FR
krb5_realm = AD.MONDOMAINE.FR
realmd_tags = manages-system joined-with-samba
cache_credentials = True
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/%u
access_provider = ad

# chmod 600 /etc/sssd/sssd.conf*

# /etc/init.d/sssd restart

# chkconfig sssd on

# chkconfig sssd --list
sssd               0:arrêt    1:arrêt    2:marche    3:marche    4:marche    5:marche    6:arrêt

# authconfig --enablesssd --enablesssdauth --enablemkhomedir --update

# egrep -v '(^#|^$)' /etc/nsswitch.conf
passwd:     files sss
shadow:     files sss
group:      files sss
hosts:      files dns
bootparams: nisplus [NOTFOUND=return] files
ethers:     files
netmasks:   files
networks:   files
protocols:  files
rpc:        files
services:   files sss
netgroup:   files sss
sudoers:    files sss
publickey:  nisplus
automount:  files sss
aliases:    files nisplus

# ln -s /etc/pam.d/system-auth-local /etc/pam.d/system-auth

# echo "%domain\ admins ALL=(ALL:ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/domain_admins

# egrep -v '(^#|^$)' /etc/pam.d/system-auth
auth        required      pam_env.so
auth        sufficient    pam_unix.so try_first_pass nullok
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        sufficient    pam_sss.so use_first_pass
auth        required      pam_deny.so
account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so
password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     optional      pam_oddjob_mkhomedir.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

DEBUG

Sortir du domaine :

# realm leave -U colombet AD.MONDOMAINE.FR

Entrer dans un domaine :

# realm join -U colombet AD.MONDOMAINE.FR

Effacer le cache SSSD

sss_cache -E
service sssd stop
rm -f /var/lib/sss/db/*
rm -f /var/lib/sss/mc/*
service sssd start
getent passwd Administrator@ad.example.com

Erreurs pouvant apparaitre dans vos logs :

Comment faire pour que sudo cesse de vous envoyer des mails inutiles ? Ce problème est causé par le fait que le sudo cherche des directives dans un endroit où il ne les trouve pas : sss. Editer le fichier /etc/nsswitch.conf afin de modifier les valeurs de l’entrée sudoers.

sudoers: files sss

par

sudoers: files

L’erreur suivante apparait car il manque des paquets debian :

localhost realmd[12345]: couldn't check polkit authorization: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Pour y remédier, installer les paquets suivants :

# apt-get install libpolkit-agent-1-0 libpolkit-backend-1-0 policykit-1

Références