Ceci est une ancienne révision du document !
Samba AD DC - Intégration de machines au domaine
Cette page détail une possibilité d'intégration d'une machine Ubuntu dans un domaine Samba - Active Directory Domain Controller (AD DC).
Prérequis
Résolution de nom de domaine
Une bonne résolution de nom de domaine est indispensable au sein d'un domaine Samba AD DC. Dans le fichier /etc/resolv.conf, il faut retrouver un serveur DNS du domaine et le domaine de recherche.
- /etc/resolv.conf
nameserver 192.168.1.11 search example.com
Ces paramètres sont soit fournis par le serveur DHCP du réseau ou configurés de façon statique dans le fichier /etc/network/interfaces par l'intermédiaire du paquet resolvconf avec les commandes dns-nameservers et dns-search.
- /etc/network/interfaces
auto eth0 iface eth0 inet static address 192.168.1.101 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 192.168.1.11 dns-search example.com
Les tests suivant devraient renvoyer des résultats corrects (se référer à Samba AD DC - Tests du DNS)
dig ubndc01.example.com
dig -t SRV _kerberos._tcp.example.com
dig doc.ubuntu-fr.org
Synchronisation NTP
La synchronisation du temps entre les machines qui utilisent l'authentification Kerberos est indispensable. L'authentification Kerberos est une des fonctionnalités de Samba AD DC. Pour ce faire, il faut installer le paquet ntp
sudo apt-get install ntp
Configurer ntp pour qu'il se synchronise sur le DC. Voici un exemple de configuration simplifiée :
- /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp # Specify one or more NTP servers. server ubndc01.example.com # By default, exchange time with everybody, but don't allow configuration. restrict default kod notrap nomodify nopeer mssntp limited # Local users may interrogate the ntp server more closely. restrict 127.0.0.1
Redémarrer le service ntp
sudo service ntp restart
Vérifier le bon fonctionnement de ntp
ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== 192.168.1.11 10.240.242.252 10 u 887 1024 377 0.632 -0.919 2.476
Joindre la machine au domaine Samba AD DC
Pour l'exemple, le nom de la machine qui sera jointe au domaine est UBNWKS01
Installer samba
Il faut installer le paquet samba
sudo apt-get install samba
Configurer samba
La configuration de samba peut être réécrite comme suit :
- /etc/smb.conf
# Global parameters [global] workgroup = EXAMPLE realm = EXAMPLE.COM netbios name = ubnwks01 security = ADS encrypt passwords = yes idmap config EXAMPLE:backend = ad idmap config EXAMPLE:schema_mode = rfc2307 idmap config EXAMPLE:range = 10000-39999 idmap config *:backend = tdb idmap config *:range = 40000-49999 winbind nss info = rfc2307 winbind trusted domains only = no winbind use default domain = yes winbind enum users = yes winbind enum groups = yes winbind refresh tickets = yes
Les lignes idmap config EXAMPLE … sont très importantes. Elles définissent le backend (méthode d'accès) AD (Active Directory), le schéma rfc2307 (contenant les extensions NIS utiles pour les systèmes Linux et UNIX) et le range d'identifiant numérique pour les utilisateurs et groupes. Ce range doit être défini dans la politique du domaine. Afin d'éviter des usurpations d'identité et de droits, il faut garantir que ces numéros soient uniques. Ils ne peuvent donc pas être utilisés localement (sur aucune machine du domaine).
Les lignes idmap config *:… définissent le backend tdb (base de données locale) et le range d'identifiants pour les utilisateurs et groupes venant d'autres domaines. On pourrait retrouver ici les utilisateurs et groupes venant de BUILTIN sous Windows.
Les lignes winbind … définissent d'autres options pour l'utilisation de winbind. Notamment, use default domain permet de ne pas devoir inscrire à chaque fois le nom du domaine pour un utilisateur ou un groupe.
Appliquer les modifications
Il faut arrêter et redémarrer les services smbd et nmbd.
sudo service smbd stop && sudo service nmbd stop sudo service smbd start && sudo service nmbd start
Joindre la machine au domaine
sudo net join -UAdministrator Enter Administrator's password: Using short domain name -- EXAMPLE Joined 'UBNWKS01' to dns domain 'example.com' No DNS domain configured for ubnwks01. Unable to perform DNS Update. DNS update failed: NT_STATUS_INVALID_PARAMETER
On peut ajouter manuellement le record dans le DNS avec la commande samba-tool comme suit :
samba-tool dns add ubndc01 example.com ubnwks01 A 192.168.1.101 -U Administrator
Peut-être aurait-il fallu exécuter cette commande avant de joindre la machine au domaine ? A vérifier…
Mettre en place winbind
Installer les paquets
Il faut installer libnss-winbind et libpam-winbind
sudo apt-get install libnss-winbind libpam-winbind
A ce stade, la commande wbinfo devrait déjà fonctionner mais pas getent pour les utilisateurs et groupes du domaine (correctement configurés).
wbinfo -u wbinfo -g
Configurer Name Service Switch
Il faut ajouter winbind aux possibilités passwd et group.
- /etc/nsswitch.conf
passwd: compat winbind group: compat winbind
A ce stade, la commande getent passwd devrait lister les utilisateurs du domaine (correctement configurés).
getent passwd ... administrator:*:10000:10000:Administrator:/home/example/administrator:/bin/bash ...
A ce stade, la commande getent group ne devrait pas lister les groupes du domaine (correctement configurés) à cause de la ligne winbind use default domain = yes présente dans /etc/samba/smb.conf. Mais, on peut obtenir les informations sur un groupe du domaine en spécifiant ce groupe à la commande getent
getent group "Domain Admins" domain admins:x:10000:administrator
La commande id peut également être utilisée pour lister l'identifiant d'un utilisateur du domaine (son UID), l'identifiant de son groupe principal (GID) et les identifiants des autres groupes auxquels il appartient tenant compte de l'héritage.
id administrator uid=10000(administrator) gid=10000(domain admins) groups=10000(domain admins),10005(schema admins),10007(group policy creator owners),10017(denied rodc password replication group),10004(enterprise admins),10003(domain users)
Tout ceci montre une situation correctement configurée c'est-à-dire que chaque utilisateur ou groupe de domaine possède un identifiant NIS unique. Dans le cas contraire, par exemple pas d'identifiant pour le groupe schema admins donnerait ce résultat avec la commande id
id administrator uid=10000(administrator) gid=10000(domain admins) groups=10000(domain admins),4294967295,10007(group policy creator owners),10017(denied rodc password replication group),10004(enterprise admins),10003(domain users)
Configurer PAM
Le module PAM de winbind gère le mécanisme d'authentification des utilisateurs. C'est celui-ci qui va permettre aux utilisateurs de se loguer sur la machine physiquement ou de façon distante. Par défaut, il ne faut rien faire. Cependant lorsqu'un utilisateur du domaine voudra se loguer sur la machine, son répertoire HOME n'existera probablement pas sur cette machine. Afin de remédier à ce problème, il faut créer un fichier /usr/share/pam-configs/mkhomedir qui va permettre de créer automatiquement le répertoire HOME de l'utilisateur qui se connecte.
- /usr/share/pam-configs/mkhomedir
Name: Create home directory during login Default: yes Priority: 900 Session-Type: Additional Session: required pam_mkhomedir.so umask=0077 skel=/etc/skel
Il faut finalement activer le module qui vient d'être créé
sudo pam-auth-update
Package configuration ┌─────────────────────────┤ PAM configuration ├──────────────────────────┐ │ PAM profiles to enable: │ │ │ │ [*] Create home directory during login │ │ [*] Unix authentication │ │ [*] Winbind NT/Active Directory authentication │ │ [*] Register user sessions in the systemd control group hierarchy │ │ [*] Inheritable Capabilities Management │ │ │ │ <Ok> <Cancel> │ └────────────────────────────────────────────────────────────────────────┘
On peut à présent tester l'authentification soit sur une autre console (Ctrl+F2) ou avec ssh
ssh administrator@localhost ... administrator@localhost's password: Creating directory '/home/example/administrator'. ... administrator@ubnwks01:~$ pwd /home/example/administrator
On voit que le répertoire HOME de l'utilisateur a été créé lors du processus de login (même par SSH).
Outils
Kerberos
Il pourra être utile d'installer les outils Kerberos (notamment kinit, klist, kdestroy, …) pour investiguer, tester et dépanner les problèmes relatifs à Kerberos.
sudo apt-get install krb5-user
Plus d'infos, se référer à Samba AD DC - Tests de Kerberos
Sudo
Afin de donner les droits superutilisateur local à un groupe du domaine (Domain Admins), il faut modifier avec la commande visudo le fichier /etc/sudoers.
sudo visudo
Et ajouter les lignes
- /etc/sudoers
... # Allow members of domain group "Domain Admins" to execute any command %domain\ admins ALL=(ALL:ALL) ALL ...
A présent, les membres du groupe "Domain Admins" peuvent exécuter toutes les commandes avec sudo.
Samba-tool
L'outil samba-tool peut être utilisé pour administrer à distance le domaine en ajoutant en fin de commande -H ldap://ubndc01.example.com. Ne pas mettre l'IP d'un serveur !
L'authentification peut se faire de façon traditionnelle pour tous les utilisateurs en ajoutant en fin de commande -U <domain username>
localuser@ubnwks01:~$ samba-tool user list -U Administrator -H ldap://ubndc01.example.com Password for [EXAMPLE\Administrator]: administrator krbtgt Guest
Ou sur base du ticket Kerberos en ajoutant en fin de commande -k yes pour un utilisateur du domaine correctement authentifié
administrator@ubnwks01:~$ samba-tool user list -k yes -H ldap://ubndc01.example.com administrator krbtgt Guest
Ou sur base du ticket Kerberos en ajoutant en fin de commande -k yes pour un utilisateur quelconque ayant demandé un ticket avec kinit pour le compte d'un utilisateur du domaine
localuser@ubnwks01:~$ kinit administrator@EXAMPLE.COM Password for administrator@EXAMPLE.COM: localuser@ubnwks01:~$ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: administrator@EXAMPLE.COM Valid starting Expires Service principal 10/31/2014 15:41:37 11/01/2014 01:41:37 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 11/01/2014 15:41:31 localuser@ubnwks01:~$ samba-tool user list -k yes -H ldap://ubndc01.example.com administrator krbtgt Guest localuser@ubnwks01:~$ kdestroy
Références
Contributeur principal : Qedinux