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 unbash
. 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