Passer d’un schéma rfc2307 à un schéma tdb

En environnement Windows, un groupe peut être propriétaire d’un fichier, alors qu’en Linux seul un utilisateur peut être propriétaire d’un fichier.

Samba va gérer ça en donnant un id unique aux groupes (GUID) et aux utilisateurs (UID).

De fait, un groupe peut être propriétaire d’un dossier sous Linux grâce son id. Le winbind en mode RFC2307 ne sait pas gérer ça, il faut revenir en mode tdb, la configuration par défaut de Samba-AD.

Ce problème n’est pas visible tant que domain admins n’a pas d’id historique. Si c’est le cas, il n’arrivera pas à interfacer l’id du groupe, le groupe et le dossier dont il est propriétaire.

Convertir un idmap rfc2307 en tdb

  • Dans un premier temps, il faut nettoyer la base de données idmap.ldb :

    for i in $(ldbsearch  -H /var/lib/samba/private/idmap.ldb  dn  | grep ^dn | awk '{ print $2 }' | grep -v CONFIG) ; do echo "ldbdel -H /var/lib/samba/private/idmap.ldb $i" ; done
    

    Indication

    Ce code va vous afficher les lignes de commandes à exécuter. Elles ne sont pas exécutées!. Vous pouvez supprimer la commande echo pour les exécuter directement ou copier coller la sortie dans un bash. Une fois la commande lancée il peut être aussi utile de vider le cache.

    net cache flush
    
  • On redémarre le service samba lorsque la commande a terminé :

    # Debian
    systemctl restart samba-ad-dc
    # RedHat8 and derived distributions
    systemctl restart samba
    
  • On ré-initialise les droits sur le sysvol, puis on réinitialise les ACLs :

    setfacl -b /var/lib/samba/sysvol
    chown -R root:root /var/lib/samba/sysvol
    chmod 755 /var/lib/samba/sysvol
    samba-tool ntacl sysvolreset
    samba-tool ntacl sysvolcheck
    

Si les commandes ne renvoient pas d’erreur alors tout est OK.

On peut vérifier les nouveaux mapping avec les commandes Winbind ou bien avec les commandes ldbsearch.

ldbsearch  -H /var/lib/samba/idmap.ldb

Synchroniser avec des serveurs distants

Si vous utilisez rsync pour faire la synchronisation avec un numeric id, il faut aussi synchroniser à la fois les bases idmap ainsi que les droits sur les fichiers (droits ugo, acl posix et attributs étendus).

Si l’on synchronise le fichier idmap.ldb par rsync, il faut penser à vider les caches et à relancer Samba :

net cache flush
systemctl restart samba