Samba 4 peut s’exécuter comme un contrôleur de domaine (DC). Dans un environnement de production, il est recommandé d’exécuter plusieurs DC pour des raisons de « basculement ». Samba 4 est administrable depuis un client Windows à l’aide des outils RSAT.
Prérequis
- Une machine Linux debian de préférence.
- Configurer le serveur DHCP en pointant l’adresse du serveur DNS primaire vers le futur DC.
- Un serveur NTP opérationnel.
- Un nom de domaine : dom.jbsky.fr
Comme Microsoft et Samba4 préconise d’utiliser un nom DNS réel, j’ai mis un nom de domaine réel en 3 parties (Active Directory Naming FAQ). Soit le contrôleur de domaine n°1 aura un FQND : dc1.dom.jbsky.fr.
Configurer le serveur
- Configurer une adresse IP statique pour le DC À vérifier que le fichier
/etc/hosts
résout correctement son FQND :
127.0.0.1 localhost.localdomain localhost 192.168.0.1 dc1.dom.jbsky.fr dc1
- Modification du fichier fstab, on ajoute dans les options pour chaque montage « acl,user_xattr,barrier=1 ».
UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX / ext4 errors=remount-ro,user_xattr,acl,barrier=1 0 1 UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /home ext4 defaults,user_xattr,acl,barrier=1 0 2 UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /usr ext4 defaults,user_xattr,acl,barrier=1 0 2 UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX /var ext4 defaults,user_xattr,acl,barrier=1 0 2 UUID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX none swap sw 0 0
- On met à jour son système et on installe les paquets nécessaires :
apt-get update && apt-get upgrade apt-get install ca-certificates build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls28-dev libreadline-dev python-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev attr acl docbook-xsl libcups2-dev libpam0g-dev ntpdate ntp -y
Purge des précédentes installations
- Attention, désinstallé aussi tous les serveur DNS comme unbound/dnsmasq!
apt-get remove krb5-config smbldap-tools libcrypt-smbhash-perl libnss3 \ libnss-mdns libnss-ldapd libnss-ldap samba-libs samba-common samba-doc \ samba-libs:amd64 ldb-tools samba --purge --auto-remove rm /usr/include/samba-4.0/ -R rm /usr/lib/samba -R rm /etc/samba/smb.conf rm /usr/lib/python2.7/dist-packages/samba -R rm /var/lib/samba/ -R
Compilation/Installation de samba 4:
cd /usr/src wget http://ftp.samba.org/pub/samba/samba-latest.tar.gz tar xvf samba-latest.tar.gz
- A l’heure où j’écris, nous sommes à la version 4.5.5.
cd samba-4.5.5 ./configure --enable-debug --enable-selftest --prefix=/usr --enable-fhs \ --sysconfdir=/etc \ --localstatedir=/var \ --with-lockdir=/var/run/samba \ --with-statedir=/var/lib/samba \ --with-cachedir=/var/cache/samba make make install
Création de l’AD
samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2
Vérifier que la ligne ci-dessous, dans le fichier smb.conf, pointe bien sur le serveur DNS habituel de votre réseau.
dns forwarder = 8.8.8.8
Il est possible d’ajouter un répertoire de partage dans le fichier smb.conf, par exemple :
echo "[home$]" >> /etc/samba/smb.conf echo -e "\tpath = /home/%U" >> /etc/samba/smb.conf echo -e "\tread only = No" >> /etc/samba/smb.conf
Le signe $ indique que le partage est caché.
On lance le service.
samba
On vérifie que samba écoute bien sur le port 53.
netstat -aneptu |grep ":53 " tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 0 60722 16374/samba tcp6 0 0 :::53 :::* LISTEN 0 60720 16374/samba udp 0 0 0.0.0.0:53 0.0.0.0:* 0 60723 16374/samba udp6 0 0 :::53 :::* 0 60721 16374/samba
Test du DNS :
cat "nameserver 127.0.0.1" > /etc/resolv.conf dhost -t SRV _ldap._tcp.dom.jbsky.fr host -t SRV _kerberos._udp.dom.jbsky.fr host -t A dc1.dom.jbsky.fr
ajout de la zone de recherche inversé, évite une erreur 41 avec nslookup.
samba-tool dns zonecreate dc1 10.168.192.in-addr.arpa --username=administrator
Si tout est ok jusqu’ici et que les pares feux correctement ouvert, on peux maintenant joindre un Client au domaine.
/!\
*Suite a un duplication de profil (à force de test), j’ai du nettoyer dans le registre de la machine cliente:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\S-1-5-21-XXXXXXXX-XXXXXXXXX-XXXXXXX-XXXX
Mappage des Groupes
Scénario deluge
Deluge est un serveur de téléchargement de torrent.
Prérequis
- J’ai ajouté dans le fichier smb.conf le partage deluge.
- Enfin, j’ai un user/group Unix du nom de deluge qui possède les droits sur le répertoire. L’idéal est que l’uid correspond bien au gid sur les futurs répertoires partagé..
- Créer un groupe deluge et un utilisateur appartenant au groupe deluge avec les outils RSAT.
Configuration
- La base de donnée de mappage idmap.ldb se situe dans le répertoire /var/lib/samba/private/.
- Elle est accessible par la commande ci-dessous:
ldbedit -e nano -H /var/lib/samba/private/idmap.ldb
- La commande qui nous intéresse pour trouver les SID correspondant aux groupes et utilisateurs du domaine et wbinfo.
wbinfo --help -n, --name-to-sid=NAME Converts name to sid -u, --domain-users Lists all domain users -g, --domain-groups Lists all domain groups -s, --sid-to-name=SID Converts sid to name -S, --sid-to-uid=SID Converts sid to uid -Y, --sid-to-gid=SID
- La procédure est un peu lourde dans le sens où il faut d’abord obtenir le SID (option -n) grâce au nom soit du groupe (option -g) soit de l’utilisateur (option -u). * Ensuite, voir la correspondance (option -Y) et la créer si elle n’existe pas.
- Enfin, il est possible de changer le numéro xid dans la base de donnée de mappage.
- En dernier lieu, vérifier si le numéro correspond enfin au numéro unix.
wbinfo -g DOM\deluge
- Pour obtenir le numéro SID :
wbinfo -n "DOM\deluge" # S-1-5-21-466102154-213423172-5412416656-1108 SID_DOM_GROUP (2) wbinfo -Y S-1-5-21-466102154-213423172-5412416656-1108 # 3000012 ldbedit -e nano -H /var/lib/samba/private/idmap.ldb objectsid=S-1-5-21-466102154-213423172-5412416656-1108 # 0 adds 1 modifies 0 deletes
forcer la mise à jour du mappage
- il faut nettoyer le cache.
net cache flush #Permet de mettre à jour le mapage wbinfo -Y S-1-5-21-466102154-213423172-5412416656-1108 # 129
Personnellement, j’ai créée une fonction adedit dans /usr/local/sbin
#!/bin/bash if [[ "$1" == "" ]] then ldbedit -e nano -H /var/lib/samba/private/idmap.ldb else ldbedit -e nano -H /var/lib/samba/private/idmap.ldb objectsid=`wbinfo -n "$1" | cut -d" " -f1`; fi
Dans mon cas, je souhaite que seulement le groupe DOM/deluge ait les droit rxw sur le repertoire /home/deluge
setfacl -b -R /home/deluge/ #nettoyage des ACL setfacl -m g:deluge:rwx -R /home/deluge/ getfacl /home/deluge # file: home/deluge/ # owner: deluge # group: deluge user::rwx group::rwx group:deluge:rwx mask::rwx other::r-x
- Quand ça ne mappe pas correctement, vérifier la base de donné pour voir s’il n’y a pas des doublons au niveau des SID ou des xid.
ldbedit -e nano -H /var/lib/samba/private/idmap.ldb
=> Cette commande affiche le fichier de base de donnée de mappage.
- Avoir la liste complète des users/groupes
getent group getent passwd
boot
- Téléchargement
wget https://raw.githubusercontent.com/jbsky/jbsky/master/debian/rootfs/etc/init.d/samba
- Rendre le script exécutable
chmod 755 /etc/init.d/samba
- Activation du script au démarrage de la machine.
update-rc.d samba defaults
Changer le mot de passe
samba-tool user Julien –noexpiry
samba-tool user setpassword Julien
source
https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
https://wiki.samba.org/index.php/Active_Directory_Naming_FAQ
Pour la compilation, je m’appuie essentiellement sur cet article.
http://www.bidouilleit.com/2014/02/06/installation-configuration-et-administration-samba-4-ad/