- auteur : Jessica Kiragossian -
Samba 4 prend en charge dune manière transparente des domaines Active Directory, en implémentant en natif les protocoles tels que LDAP, Kerberos, RPC et SMB 3. En fait, Samba 4 est lActive Directory, qui est composé des protocoles : LDAP, Kerberos et DNS. LActive Directory permet aux administrateurs système Windows de gérer en toute sécurité les objets d'annuaire d'une infrastructure de base de données évolutive et centralisée. Les objets (utilisateurs, systèmes, groupes, imprimantes, applications) sont stockées selon une hiérarchie composée de nuds, darbres, de forêts et domaines.
on configure le proxy : - soit à l'installation d'Ubuntu
- soit après l'installation où on crée le fichier “01proxy” :
sudo nano /etc/apt/apt.conf.d/01proxy
on ajoute à ce fichier les lignes suivantes :
Acquire::http::proxy "http://ifcache:3128"; Acquire::ftp::proxy "http://ifcache:3128";
avec “ifcache” le nom du proxy et “3128” son port.
on effectue les mises à jours :
sudo apt-get update sudo apt-get upgrade
on installe openssh-server pour pouvoir ouvrir plusieurs fenêtres par la suite :
sudo apt-get install openssh-server
on peut changer le mot de passe de root :
sudo passwd root
Tout d'abord, j'ai installé Samba 4 par compilation, en installant les librairies dont Samba 4 a besoin et en chargeant la version 4.1.0 via la commande git, qui est un logiciel de gestion de versions décentralisé.
on installe les paquets dont Samba 4 a besoin :
# apt-get install build-essential, libacl1-dev, python-dev, libldap2-dev, pkg-config, gdb, libgnutls-dev, libblkid-dev, libreadline-dev, python-dnspython, libpopt-dev, libbsd-dev, attr, docbook-xsl, libcups2-dev, git
on va devoir configurer git pour télécharger samba4 :
sudo git config --global http.proxy http://ifcache:3128/
la dernière commande crée un fichier .gitconfig dans ~ contenant l'information sur le proxy :
[http] proxy = http://ifcache:3128/
on peut maitenant copier samba dans le dossier “/usr/src/samba4” :
sudo git clone http://git.samba.org/samba.git /usr/src/samba4/
le téléchargement peut prendre 1 à 2 minutes.
on se place dans le dossier samba4 crée :
cd /usr/src/samba4/
après le téléchargement, on choisit la dernière version 4.1.7 :
sudo git checkout tags/samba-4.1.7
on peut maintenant compiler samba 4.1.7 :
sudo ./configure --enable-debug sudo make sudo make install
la compilation prend plusieurs minutes.
on doit rajouter les chemins PATH suivants dans /etc/sudoers et /etc/environment :
:/usr/local/samba/sbin:/usr/local/samba/bin
J'ai choisi de ne pas l'installer avec le paquet « samba4 » en accord avec le service informatique qui gèrera les mises à jour de la version de Samba car la version installée par le paquet est 4.0.0.
Après l'installation, le répertoire d'installation “/usr/local/samba/” a été créé.
Il contient les répertoires suivants :
/bin : les exécutables utiles pour l'administration du serveur.
/etc : le fichier de configuration de samba smb.conf.
/lib : toutes les librairies.
/include : les fichiers d'en-tête.
/private : la base de données du serveur et la configuration du domaine AD.
/var : la configuration annexe du serveur (GPO, ACL, etc.).
/sbin : le démon principal samba.
/share : les fichiers d'initialisation du domaine.
modifier la configuration IP de la machine :
sudo nano /etc/network/interfaces
iface eth0 inet static address 10.0.2.15 netmask 255.255.255.0 gateway 10.0.2.1 dns-nameservers 10.0.2.15 dns-search krb
redémarrer la machine pour prendre en compte les modifications :
sudo reboot
on vérifie le contenu du fichier resolv.conf :
sudo nano /etc/resolv.conf
nameserver 10.0.2.15 search krb
on monte la partition :
sudo mount / -o remount,acl,user_xattr,barrier=1
et modifie l'entrée dans /etc/fstab :
/dev/mapper/samba--vg-root / ext4 errors=remount-ro,defaults,acl,user_xattr,barrier=1 0 1
on configure le domaine de samba grace à l'outil “samba-tool” :
sudo /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --use-xattrs=yes --realm=KRB --domain=AD --adminpass=P@ssword --server-role=dc
“use-rfc2307” : utiliser l'extension LDAP rfc2307 pour renseigner les options Unix de l'AD et avoir des UID / GID correctement renseigné entre les serveurs du domaine.
“use-xattrs=yes” : utiliser les attributs étendus.
“realm=KRB” : le royaume et domaine DNS est KRB.
“domain=AD” : le domaine windows est AD.
“adminpass=P@ssword” : le mot de passe de l'administrator est P@ssword.
“server-role=dc” : le role du serveur est controleur de domaine Active Directory.
La configuration de Samba 4 « smb.conf » est générée automatiquement lors de la configuration du domaine.
si on veut reconfigurer le domaine samba via samba-tool, il faut supprimer l'ancienne configuration et l'ancienne base de données :
# rm -r /usr/local/samba/private/* #rm /usr/local/samba/etc/smb.conf
L'Active Directory est fortement basé sur un service DNS actif qui est sécurisé par défaut. En effet, il permet aux clients de trouver leur DC. De plus, « SAMBA_INTERNAL » n'accepte que les mises à jour DNS sécurisées via Kerberos. Le serveur DNS interne est intégré dans Samba et utilise lAD comme backend. En outre, il est la solution DNS par défaut lors de lapprovisionnement et la mise à niveau d'un contrôleur AD Samba.
modifier le fichier smb.conf et mettre l'adresse gateway:
sudo nano /usr/local/samba/etc/smb.conf
dns forwarder = 10.0.2.1
on va lancer Samba 4 et verifier son bon fonctionnement DNS.
lancer samba en mode debug :
sudo /usr/local/samba/sbin/samba -i -M single -d 3
pour verifier le service ldap :
$ host -t SRV _ldap._tcp.krb. _ldap._tcp.krb has SRV record 0 100 389 samba.krb.
pour verifier le service Kerberos :
$ host -t SRV _kerberos._udp.krb. _kerberos._udp.krb has SRV record 0 100 88 samba.krb.
pour verifier le nom de la machine samba :
host -t A samba.krb.
samba.krb has address 10.0.2.15
si l'adresse retourner n'est pas la bonne alors on met à jour le dns via la commande samba-tool :
samba-tool dns update 127.0.0.1 samba <old dns address> <new dns address>
on peut verifier les information de notre samba :
sudo samba-tool domain info 127.0.0.1
Forest : krb
Domain : krb
Netbios domain : AD
DC name : samba.krb
DC netbios name : SAMBA
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
Maintenant que le DNS fonctionne, il faut configurer le service NTP pour qu'ensuite les tickets Kerberos créés soient synchronisés avec Samba 4.
on va d'abord installer le service NTP sur le serveur :
sudo apt-get install ntp
on modifie le fichier “/etc/ntp.conf” :
sudo nano /etc/ntp.conf
en ajoutant le script suivant pour synchroniser automatiquement le serveur samba et les clients :
# ntp sur lui meme server 127.127.1.0 # l'horloge système de samba est la source de temps avec un niveau hiérarchique de 12. # Le niveau stratum le plus précis est le stratum 0 et est réservé aux horloges atomiques. # Le niveau suivant, Stratum 1, est réservé aux serveurs NTP locaux : les serveurs horloges # atomiques. Les Stratum 2 à 15 sont les serveurs NTP connectés. fudge 127.127.1.0 stratum 12 # emplacement des signatures. Samba4 crée un socket que NTP peut utiliser pour avoir ses # réponses signés. L'emplacement par défaut est contrôlé par la directive # "NTP signd socket directory" dans la configuration de Samba4 : "smb.conf". NTPsigndsocket /usr/local/samba/var/lib/NTP_signd/ # les clients Active Directory ont besoin d'un serveur MS-SNTP # qui signe de manière crypté les réponses restrict default mssNTP
Le NTP étant configuré il est possible de faire du Kerberos. Samba 4 utilise l'implémentation Heimdal, de ce fait j'ai installé l'outil heimdal-clients pour pouvoir configurer Kerberos 5. Il est nécessaire de configurer Kerberos pour pouvoir tester par la suite NFSv4.
sudo apt-get install heimdal-clients
on configure Kerberos :
realm : KRB serveur Kerberos du royaume : samba.krb serveur administratif du royaume Kerberos : samba.krb
on va modifier le fichier /etc/krb5.conf :
[libdefaults] allow_weak_crypto = tue [domain realm] .krb = KRB krb = KRB
on va tester le service Kerberos :
-ajouter un utilisateur au domaine :
sudo /usr/local/samba/bin/samba-tool user add tutu new Password: ***** Retype Password: ***** User 'tutu' created successfully
attention a bien mettre un mot de passe a plus de 7 caractères et complexe sinon le message d'erreur suivant s'affiche :
ERROR(ldb): Failed to add user 'tutu': - 0000052D: Constraint violation - check_password_restrictions: the password does not meet the complexity criteria!
-générer la keytab :
sudo /usr/local/samba/bin/samba-tool domain exportkeytab /etc/krb5.keytab
on initialise le ticket de tutu :
kinit tutu tutu@KRB's Password:
on vérifie l'existance de ce ticket :
klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: tutu@KRB Issued Expires Principal May 14 15:27:21 2014 May 15 01:27:15 2014 krbtgt/KRB@KRB
si le kinit ne fonctionne pas :
kinit tutu tutu@KRB's Password: kinit: Preauthentication failed while getting initial credentials
alors changer le mot de passe de l'utilisateur :
sudo samba-tool user setpassword tutu
New Password:
Changed password OK
on reteste :
sudo kinit tutu Password for tutu@KRB: sudo klist Credentials cache: FILE:/tmp/krb5cc_1000 Principal: tutu@KRB Issued Expires Principal May 7 14:57:26 2014 May 8 00:57:22 2014 krbtgt/KRB@KRB
le script de sauvegarde de samba n'est pas installé. il faut donc recopier l'executable source samba_backup et y définir des droits d'accès :
sudo cp /usr/src/samba4/source4/scripting/bin/samba_backup /usr/sbin sudo chown root:root /usr/sbin/samba_backup sudo chmod 750 /usr/sbin/samba_backup
on crée le dossier de backups spécifié dans le $WHERE de samba_backup :
sudo mkdir /usr/local/backups sudo chmod 750 /usr/local/backups
tester le backup :
sudo /usr/sbin/samba_backup
les fichiers suivants apparaissent dans le repertoire “/usr/local/backups” :
etc.{time}.tar.bz2 samba4_private.{time}.tar.bz2 sysvol.{time}.tar.bz2
pour que le temps affiche la date et l'heure on modifie le fichier “samba_backup” :
WHEN=`date +%d%m%y%H%M`
éditer le backup :
sudo crontab -e
et ajouter la ligne suiante pour qu'il s'effectue toute les heures :
0 * * * * /usr/sbin/samba_backup
on vérifie le contenu de :
sudo cd /usr/local/backups/ sudo ll
on modifie le fichier “/usr/local/samba/etc/smb.conf” :
# Global parameters [global] # domaine DNS Windows workgroup = AD # royaume Kerberos et nom du domaine DNS Linux realm = KRB # nom de la machine du serveur Samba 4 netbios name = SAMBA # rôle de la machine server role = active directory domain controller # DNS de relais : passerelle du serveur Samba 4 dns forwarder = 10.0.2.1 # norme RFC2307 est utilisée par le serveur Samba 4 pour pouvoir # ajoute les attributs Unix des utilisateurs Linux idmap_ldb:use rfc2307 = yes [home] # commentaire du répertoire comment = Home Directory # chemin où se trouve le dossier path = /home/samba/home # pas uniquement lisible read only = no [profiles] # commentaire du répertoire comment = Users profiles # chemin où se trouve le dossier path = /home/samba/profiles # pas uniquement lisible read only = no [partage] # commentaire du répertoire comment = input # chemin où se trouve le dossier path = /home/samba/partage # pas uniquement lisible read only = no # tous les droits sont accordés au super-utilisateur et aux utilisateurs sur ce répertoire create mask = 0770 [netlogon] path = /usr/local/samba/var/locks/sysvol/krb/scripts read only = No [sysvol] path = /usr/local/samba/var/locks/sysvol read only = No
Le répertoire netlogon est partagé d'office lors de l'installation de Samba 4. C'est dans ce répertoire que le système met les scripts, les commandes à exécuter lors de la connexion, etc.
Le répertoire « sysvol » est un répertoire partagé qui stocke la copie serveur des fichiers publics du domaine, qui sont répliqués entre tous les contrôleurs de domaine du domaine.
il faut créer les dossiers de partage nommés ci-dessus :
sudo mkdir /home/samba sudo mkdir /home/samba/home sudo mkdir /home/samba/profiles sudo mkdir /home/samba/partage sudo chmod 1777 /home/samba/profiles
Dans notre cas, le poste Windows 7 va servir à configurer les profiles itinérants grâce à l'outil RSAT qui intègre l'Active Directory. l'outil RSAT se trouve à l'adresse : http://www.microsoft.com/en-us/download/details.aspx?id=7887
on configure l'adresse IP de la machine windows 7 pour qu'elle soit dans le meme réseau que le serveur :
address IP : 10.0.2.10 netmask : 255.255.255.0 gateway : 10.0.2.1 DNS : 10.0.2.15
on teste la connexion entre les deux machines :
-à partir du poste windows :
C:\Users\administrator>ping 10.0.2.15 Ping 10.0.2.15 with 32 bytes of data: Reply from 10.0.2.15: bytes=32 time<1ms TTL=64
-à partir du poste linux :
$ ping 10.0.2.10 PING 10.0.2.10 (10.0.2.10) 56(84) bytes of data. 64 bytes from 10.0.2.10: icmp_req=1 ttl=64 time=0.040 ms
on peut maintenant ajouter la machine au domaine “KRB” : aller dans les propriétés de la machine puis dans “change settings” modifier le nom de domaine et mettre “AD”. un mot de passe pour l'administrateur est demandé pour accéder au domaine AD.
La machine va redémarrer.
notre machine windows 7 étant dans le même domaine que notre serveur samba, on peut y configurer le NTP pour qu'elle se synchronise avec Samba4. Pour se faire il faut executer en tant qu'administrateur (cmd>clic droit> executer en tant qu'administrateur) les commandes suivantes :
C:\Windows\system32>w32tm /config /syncfromflags:domhier The command completed successfully. C:\Windows\system32>w32tm /config /update The command completed successfully. C:\Windows\system32>w32tm /resync /nowait Sanding resync command to local computer The command completed successfully.
l'outil RSAT (Remote Server Administrative Tools) installe les outils d'administration serveur windows.
on télécharge l'outil à l'adresse : http://www.microsoft.com/en-us/download/details.aspx?id=7887.
après l'installation, il faut suivre la doc RSAT et installer les outils dont on a besoins : Role administration Tools, Server Manager, Group Policy Management Tools.
on se connecte sous le compte “administrator” et on lance l'active directory via la commande dsa.msc.
on configure les profiles itinerants : dans le dossier “Users” sélectionner “tutu”. dans l'onglet “Profile” de ses proprieties ajouter le chemin du profile et celui du home :
User profile Profile path: \\samba.krb\profiles\%username%
Home folder Connect: H: to \\samba.krb\home\%username%
Après l'ajout du chemin du home on peut remarquer que le dossier “tutu” apparait sur le serveur :
$ cd /home/samba/home/ /home/samba/home$ ll total 16 drwxr-xr-x 3 root root 4096 mai 15 11:41 ./ drwxr-xr-x 5 root root 4096 mai 14 16:22 ../ drwxrwxr-x+ 2 3000000 users 4096 mai 15 11:41 tutu/
on ajoute un groupe dans le dossier “Users” que l'on nomme “user_unix”. dans ses proprieties on rajoute le membre “tutu” dans l'onglet “Members” et on active les attributs unix dans l'onglet “UNIX attributes” en sélectionnant le NIS domain “ad”.
on active les attributs Unix dans l'onglet “UNIX attributes” en sélectionnant le NIS domain “ad” et en ajoutant un “primary group” user_unix.
partage du dossier “/home/samba/home” indiqué dans le fichier “smb.conf” : lancer l'outil “Computer Management” : on change de machine à manager : clic droit sur “Computer Management (Local)”>“Connect to another computer”, on saisie 10.0.2.15.
dans “System Tools/Shared Folders/Shares” sélectionner le dossier “home” et modifier les permissions de ce dossier dans ses proprieties de la manière suivante :
dans l'onglet “Share Permissions” ajouter les groupes :
Authenticated Users Domain Admins SYSTEM
on accorde à ses groupes un contrôle total : Full Control, et supprimer le groupe “everyone”.
dans “System Tools/Shared Folders/Shares” sélectionner le dossier “profiles” et modifier les permissions de ce dossier dans ses proprieties de la manière suivante : dans l'onglet “Security” on ajoute les groupes :
Authenticated Users Domain Admins SYSTEM Administrators
ayant les droits suivants:
Domain Users : Traverse folder/execute file, List folder/read data, Create folder/append data Administrator : Full Control
pour “Authenticated Users” modifier le champ d'application des droits dans “advanced” : this folder only.
on supprime les groupes :
Everyone CREATOR GROUP Account Unknown
dans “System Tools/Shared Folders/Shares” sélectionner le dossier “partage” et accroder tous les droits à “Authenticated Users”.
nous allons nous connecter en tant que “tutu” sous windows 7.
après authentification, le dossier “tutu” a été créé dans le repertoire “C:\Users” et le disque \\samba.krb\home a été monté.
si le dossier créé est temporaire alors le profil itinerant ne se synchronise pas. pour que le profil itinerant se synchronise correctement faire : sous “cmd” saisir “regedit” puis supprimer la clé de l'utilisateur en mode temporaire dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\. redémarrer le poste et se reconnecter.
on va créer un autre utilisateur titi via dsa.msc : clic droit sur le dossier “Users” et “New User”. on effectue les même modifications au profil que celles faites sur “tutu”.
on va verifier les droits d'accès des dossiers partagés : l'utilisateur tutu n'a pas accès aux dossiers “home” et “profiles” de “titi”. il peut ajouter un dossier ou un fichier dans le dossier “partage”.
on va créer un dossier “bibli” dans le dossier “partage” sous windows. seul les utilisateurs appartenant au groupe “bibli” pourront avoir accès à ce dossier.
on lance dsa.msc et on crée le groupe bibli dans le dossier “Users”. on active les attributs unix et on ajoute l'utilisateur titi comme membre du groupe.
on modifie les droits d'accès à ce dossier : seul le groupe bibli a tous les droits, il faut donc supprimer l'héritage des droits du dossier “partage”.
titi a bien accès au dossier car il appartient au groupe contrairement à tutu qui n'a aucun droits sur le dossier.
Ce test permet de comprendre comment se passe la synchronisation du profil sous Windows.
nous allons ajouter un fichier iso de 676Mo sous le profile titi et verifier la synchronisation.
à partir de samba on effectue la commande “ifconfig” :
RX bytes:13343078 (13.3 MB) TX bytes:6666973 (6.6 MB)
on ajoute le fichier iso et on se déconnecte pour mettre à jour le profile.
sur samba on effectue à nouveau la commande “ifconfig” :
RX bytes:735903644 (735.9 MB) TX bytes:9156483 (9.1 MB)
on remarque que le fichier iso a bien été ajouté car on passé de 13MB à 735MB.
on se connecte sous titi et on refait un ifconfig à partir de samba :
RX bytes:736138088 (736.1 MB) TX bytes:9408612 (9.4 MB)
Contrairement à la version 3 de Samba, à la fermeture de la session seuls les éléments modifiés sont sauvegardés sur le serveur. Lors de la connexion, les éléments modifiés du profil de lutilisateur sont chargés.
J'ai décidé d'utiliser l'outil SSSD, grâce au cache, pour l'authentification des utilisateurs car il est facile et rapide à configurer. Il peut récupérer les données de POSIX (UID / GID, répertoire personnel, Shell, etc.) de l'Active Directory si le domaine a été approvisionné avec l'option rfc2307, ce qui permet une gestion centralisée des données POSIX dans AD avec les outils communs et les mêmes ID sur chaque machine. De plus, il n'a pas besoin que la machine soit jointe au domaine. Seules les connexions LDAP et Kerberos sont utiles.
SSSD est installé sur le serveur, mais également sur les postes clients Linux pour pouvoir faire du NFSv4.
on va installer sssd et sssd-tools pour permettre aux clients de s'authentifier :
sudo apt-get install sssd sudo apt-get install sssd-tools
on créer le fichier /etc/sssd/sssd.conf :
[sssd] services = nss, pam config_file_version = 2 domains = default [nss] [pam] [domain/default] id_provider = ldap ldap_schema = rfc2307bis ldap_referrals = false ldap_uri = ldap://samba.krb ldap_search_base = dc=krb ldap_force_upper_case_realm = true access_provider = simple auth_provider = krb5 chpass_provider = krb5 ldap_sasl_mech = GSSAPI ldap_sasl_authid = samba$@KRB krb5_realm = KRB krb5_server = samba.krb krb5_kpasswd = samba.krb ldap_krb5_keytab = /etc/krb5.sssd.keytab ldap_user_object_class = user ldap_user_name = sAMAccountName ldap_user_home_directory = unixHomeDirectory ldap_user_principal = userPrincipalName ldap_user_shell = loginShell ldap_group_object_class = group
attribuer les droits suivants au fichier /etc/sssd/sssd.conf :
sudo chmod 0600 /etc/sssd/sssd.conf
ensuite on configure le fichier /etc/nsswitch.conf :
passwd: files sss group: files sss
on redemarre le service sssd :
sudo /etc/init.d/sssd restart
on peut mettre à jour le cache :
sudo sss_cache -UG
ou
sudo sss_cache -d KRB
on génère la keytab :
sudo samba-tool domain exportkeytab /etc/krb5.sssd.keytab --principal=samba$
on vérifie le contenu de la keytab :
sudo ktutil -k /etc/krb5.sssd.keytab list [sudo] password for jessica: FILE:/etc/krb5.sssd.keytab: Vno Type Principal Aliases 1 des-cbc-crc samba$@KRB 1 des-cbc-md5 samba$@KRB 1 arcfour-hmac-md5 samba$@KRB
on initialise la keytab :
sudo kinit -k -t /etc/krb5.sssd.keytab samba\$@KRB
on vérifie que le kinit a été pris en compte :
sudo klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: samba$@KRB Issued Expires Principal May 7 13:49:47 2014 May 7 23:49:47 2014 krbtgt/KRB@KRB May 7 13:51:22 2014 May 7 23:49:47 2014 ldap/samba.krb@KRB
on effectue une recherche ldap pour verifier le contenu LDAP :
sudo /usr/bin/ldapsearch -H ldap://samba.krb -Y GSSAPI -N -b DC=krb SASL/GSSAPI authentication started SASL username: samba$@KRB SASL SSF: 56 SASL data security layer installed. # extended LDIF # # LDAPv3 # base <DC=krb> with scope subtree # filter: (objectclass=*) # requesting: ALL # ... # search reference ref: ldap://krb/CN=Configuration,DC=krb # search reference ref: ldap://krb/DC=DomainDnsZones,DC=krb # search reference ref: ldap://krb/DC=ForestDnsZones,DC=krb # search result search: 4 result: 0 Success # numResponses: 276 # numEntries: 272 # numReferences: 3
tester la configuration nsswitch.conf :
sudo getent passwd tutu tutu:*:10000:1000:tutu:/home/tutu:/bin/sh
on va installer un poste client sous Ubuntu 12.04 pour tester la connexion des utilisateurs AD et l'accès aux dossiers de partage.
on configure le proxy comme sur le serveur samba et on installe openssh-server pour pouvoir récupérer les keytabs.
sur ce poste nous allons installer heimdal-clients, sssd et sssd-tools.
la configuration de sssd et sssd-tools est la même que celle du serveur samba dans la pratie précedente.
on modifie la configuration réseau de la machine cliente :
sudo nano /etc/network/interfaces iface eth0 inet static address 10.0.2.16 netmask 255.255.255.0 gateway 10.0.2.1 dns-nameservers 10.0.2.15 dns-search krb
on redémarre la machine pour prendre en compte les changements effectués.
grâce à openssh on va copier la keytab krb5.sssd.keytab de samba. sur le serveur samba on envoie cette clé au client :
sudo scp /etc/krb5.sssd.keytab jessica@10.0.2.16:/tmp
sur le client on copie la clé dans le dossier “etc” :
sudo cp /tmp/krb5.keytab /etc
on met à jour le cache :
sudo sss_cache -d KRB
on teste ldap :
sudo getent passwd tutu tutu:*:10000:10000:tutu:/home/tutu:/bin/sh sudo getent passwd titi titi:*:10001:10000:titi:/home/titi:/bin/sh
on va configurer notre serveur samba 4 pour qu'il intègre nfs4.
on va créer un utilisateur nfs-user pour le service nfs :
sudo samba-tool user add nfs-user sudo samba-tool user setexpiry nfs-user --noexpiry
créer le service nfs et générer sa keytab :
sudo samba-tool spn add nfs/samba.krb nfs-user sudo samba-tool domain exportkeytab /etc/krb5.keytab --principal=nfs/samba.krb sudo samba-tool domain exportkeytab /etc/krb5.keytab --principal=nfs/SAMBA$
on copie cette keytab sur le client :
scp /etc/krb5.keytab 10.0.2.16:/etc/
Pour que le service NFSv4 fonctionne sur le serveur, l'outil nfs-kernel-server doit être installé et configuré comme suit car le montage NFSv4 se fait par authentification Kerberos 5.
modifier le fichier /etc/default/nfs-kernel-server :
NEED_SVCGSSD = yes
faire les exports des homes dans le fichier /etc/exports avec une protection Kerberos :
# export du répertoire /home/samba/home sécurisé kerberos 5 # avec droits écriture, compatible pour toutes versions, non synchronisé, # pas de vérification d'appartenance et UID / GID du compte anonyme 65534 /home/samba/home gss/krb5(rw,insecure,fsid=0,async,no_subtree_check,anonuid=65534,anongid=65534)
pour verifier que les exports ont été pris en compte :
sudo exportfs -v
modifier le fichier /etc/idmapd.conf :
Domain = krb
redémarrer les services:
sudo service nfs-kernel-server restart sudo idmapd restart
Pour que le service NFSv4 fonctionne sur le poste client Linux, l'outil nfs-common doit être installé.
Sur le poste client Linux, j'ai installé « samba4-clients » pour pouvoir utiliser la commande « net ads » qui permet d'ajouter la machine cliente au domaine et de créer automatiquement une keytab pour la machine.
La configuration de samba4-clients (/etc/samba/smb.conf) est la suivante :
# nom de domaine Windows workgroup = AD #nom de domaine Kerberos et DNS realm = KRB # sécurité par Active Directory Security security = ADS
modifier le fichier /etc/hosts pour permettre l'ajout de la machine au domaine :
127.0.1.1 nfs4-client.krb nfs4-client 10.0.2.15 samba.krb samba
on joint la machine au domaine :
sudo net ads join -U administrator
on rajoute au fichier smb.conf :
# méthode Kerberos par système de keytab
kerberos method = system keytab
on crée la keytab de la machine cliente :
sudo net ads keytab create -U administrator
cela crée le fichier /tmp/krb5cc_machine_KRB :
sudo klist -c /tmp/krb5cc_machine_KRB Credentials cache: FILE:/tmp/krb5cc_machine_KRB Principal: NFS4-CLIENT$@KRB Issued Expires Principal May 19 15:59:34 2014 May 20 01:59:34 2014 krbtgt/KRB@KRB May 19 15:59:34 2014 May 20 01:59:34 2014 nfs/samba.krb@ May 19 15:59:34 2014 May 20 01:59:34 2014 nfs/samba.krb@KRB
monter les homes :
sudo mount -t nfs4 -o sec=krb5 10.0.2.15:/ /home/
Pour que les utilisateurs aient leur répertoire personnel monté automatiquement, j'ai installé l'outil « autofs ». Autofs contôle les opérations des démons d'automount qui montent automatiquement des systèmes de fichiers quand ils sont employés et les démontent après une période d'inactivité.
on modifie le fichier /etc/auto.master :
/home /etc/auto.home
on créer le fichier /etc/auto.home et on ajoute :
* -fstype=nfs4,rw,user,sec=krb5 10.0.2.15:/&
on modifie le fichier /etc/default/autofs :
LDAP_URI="ldap://samba.krb" SEARCH_BASE="c=krb"
sur le serveur samba on créer le dossier home “tutu” et on y crée le fichier tutu.txt. on ajoute dans ce fichier le contenu : tututu.
sur la machine cliente, on se connecte sous tutu pour verifier que ca marche :
$ su tutu Mot de passe : $ bash tutu@nfs4-client:~$ nano /home/tutu/tutu.txt tututu
Lors du montage aucun mot de passe n'est demandé car le serveur fait confiance au ticket généré par SSSD sur le client NFSv4.
Pour vérifier ce raisonnement j'ai démonté le montage du répertoire personnel et jai détruis le ticket de la machine “krb5cc_machine_KRB”. Le montage n'est plus possible.
Ainsi, il y a deux niveaux d'authentification : le premier concerne l'authentification de la machine et le deuxième l'authentification de l'utilisateur.
LInstitut Fourier utilise le service Web avec lannuaire LDAP existant. Pour tester le service Web Apache avec LDAP, on configure Apache et on le teste sur le navigateur.
installer Apache2 et mettre en place les modules d'authentificattion LDAP sur le client Linux :
sudo a2enmod ldap auth_basic authnz_ldap authz_user
on créer le dossier /var/www/ldap.
on configure apache :
sudo nano /etc/apache2/sites-enabled/000-default
on modifie ce fichier comme suit :
<Directory /var/www/ldap> AuthType basic AuthName "test_apache" AuthBasicProvider ldap AuthLDAPBindDN cn=administrator,cn=Users,dc=krb AuthLDAPBindPassword "P@ssword" AuthLDAPURL "ldap://samba.krb:389/cn=Users,dc=krb?sAMAccountName?sub?(objectClass=*)" require valid-user <Directory>
redemarrer apache :
sudo /etc/init.d/apache2 restart
on teste via le navigateur :
http://10.0.2.14/ldap
Lors du test un login et un mot de passe sont demandés pour pouvoir accéder au dossier ldap sur Apache et ça fonctionne.
On écrit des scripts pour faciliter la création des utilisateurs et des groupes et ainsi activer les attributs Linux. En effet, les attributs Unix ne sont pas activés lorsquun utilisateur ou groupe est créé par loutil « samba-tool ». Loutil samba-tool active les attributs Windows par défaut. Le problème cest que si ces attributs ne sont pas activés lauthentification des utilisateurs sur un poste linux ne fonctionne pas.
l'outil “wbinfo” permet de récupérer des éléments de la base LDAP.
on crée le fichier “samba4” que l'on place dans le repertoire “/etc/init.d/” pour qu'il se lance automatiquement.
on ajoute le contenu suivant à ce fichier :
#! /bin/sh ### BEGIN INIT INFO # Provides: samba # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start Samba daemons ### END INIT INFO # # Start/stops the Samba daemon (samba). # Adapted from the Samba 3 packages. # SAMBAPID=/var/run/samba/samba.pid # clear conflicting settings from the environment unset TMPDIR # See if the daemon and the config file are there test -x /usr/local/samba/sbin -a -r /usr/local/samba/etc/ || exit 0 . /lib/lsb/init-functions case "$1" in start) log_daemon_msg "Starting Samba 4 daemon" "samba" if ! start-stop-daemon --start --quiet --oknodo --exec /usr/local/samba/sbin/samba -- -D; then log_end_msg 1 exit 1 fi log_end_msg 0 ;; stop) log_daemon_msg "Stopping Samba 4 daemon" "samba" start-stop-daemon --stop --quiet --name samba $SAMBAPID # Wait a little and remove stale PID file sleep 1 if [ -f $SAMBAPID ] && ! ps h `cat $SAMBAPID` > /dev/null then # Stale PID file (samba was succesfully stopped), # remove it (should be removed by samba itself IMHO.) rm -f $SAMBAPID fi log_end_msg 0 ;; restart|force-reload) $0 stop sleep 1 $0 start ;; *) echo "Usage: /etc/init.d/samba {start|stop|restart|force-reload}" exit 1 ;; esac exit 0
on modifie les droits du fichier :
sudo chmod 755 /etc/init.d/samba4
on met à jour les autostarts :
sudo update-rc.d samba4 defaults
on regarde les attributs unix dans la base LDAP :
$ ldapsearch -H ldap://samba.krb -Y GSSAPI -N -b DC=krb "(&(objectClass=group)(sAMAccountName=*))"
on crée le fichier samba4group executable :
sudo nano /usr/local/samba/bin/samba4group
on rend le fichier exécutable:
sudo chmod +x samba4group
son contenu :
#!/bin/bash #creates a posix group suitable for containing Linux users #usage samba4group <name> echo "Creating s4 posix group "$1 samba-tool group add $1 #get the gid strgid=$(wbinfo --group-info=$1) gid=$(echo $strgid | cut -d ":" -f 3) #add the posix attributes to the group echo "dn: cn=$1,cn=Users,dc=krb changetype: modify add:mssFU30NisDomain mssFU30NisDomain: ad - add: gidnumber gidnumber: $gid - add: mssFU30Name mssFU30Name: $1" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 rm /tmp/$1
Le script crée un utilisateur Windows et Linux avec un groupe primaire Unix associé.
on crée le fichier samba4user executable :
sudo nano /usr/local/samba/bin/samba4user
on rend le fichier exécutable:
sudo chmod +x samba4user
son contenu :
#!/bin/bash #creates a s4 user, posix-ifies him, places him in a posix group #sets his windows primaryGroup=posixGroup and set's some common #defaults for logging onto windows #usage samba4user <user> <group> echo "Creating s4 posix user "$1 echo "Please enter pwd for "$1 samba-tool user add $1 sleep 2 #get the uid struid=$(wbinfo -i $1) uid=$(echo $struid | cut -d ":" -f 3) #get the gid strgid=$(wbinfo --group-info=$2) gid=$(echo $strgid | cut -d ":" -f 3) #get the group from the sid strsid=$(wbinfo --gid-to-sid=$gid) primarygid=$(echo $strsid | cut -d "-" -f 8) strwg=$(echo $struid | cut -d "\\" -f 1) #add the posix attributes to the user echo "dn: CN=$1,CN=Users,DC=krb changetype: modify add: msSFU30NisDomain msSFU30NisDomain: ad - add: uidnumber uidnumber: $uid - add: gidnumber gidnumber: $gid - add:unixhomedirectory unixhomedirectory: /home/$1 - add:msSFU30Name msSFU30Name: $1 - add:uid uid: $1 - add: loginshell loginshell: /bin/sh" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 samba-tool group addmembers $2 $1 #set the user to the posix group echo "dn: CN=$1,CN=Users,DC=krb changetype: modify replace: primarygroupid primarygroupid: $primarygid" > /tmp/$1 echo "sleeping. . ." sleep 5 #add the posix attributes to the group echo "dn: CN=$2,CN=Users,DC=krb changetype: modify add: msSFU30PosixMember msSFU30PosixMember: CN=$1,CN=Users,DC=krb - add:memberuid memberuid: $1" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 mkdir /home/samba/home/$1 chown -R $1:$2 /home/samba/home/$1 rm /tmp/$1 hostname=$(hostname -s) echo "dn: CN=$1,CN=Users,DC=krb changetype: modify add: profilePath profilePath: \\\\$hostname\\profiles\\$1 - add: homeDrive homeDrive: Z: - add: homeDirectory homeDirectory: \\\\$hostname\\home\\$1" > /tmp/$1 echo "sleeping. . ." sleep 5 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 echo "New user: " $1 "POSIX-ified as follows:" echo "uid " $uid echo "gid " $gid echo "primaryGroupID " $primarygid " :$2" echo "getent passwd $1" echo $(getent passwd $1) echo "sid " $(wbinfo --gid-to-sid=$gid) db=/usr/local/samba/private/sam.ldb ldbsearch --url=$db cn=$1 | grep \\\\$hostname ldbsearch --url=$db cn=$1 | grep homeDrive rm /tmp/$1
Le script permet dajouter un groupe à lutilisateur.
on crée le fichier samba4usergroup executable :
sudo nano /usr/local/samba/bin/samba4usergroup
on rend le fichier exécutable:
sudo chmod +x samba4usergroup
#!/bin/bash #add a posix group to a s4 user #usage samba4usergroup <user> <group> echo "Adding s4 posix group "$2 "to s4 posix user "$1 #get the sid sid=$(wbinfo --name-to-sid="$1") usersid=$(echo "$sid" | cut -d " " -f1) echo "found $1 sid= $usersid" ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 samba-tool group addmembers $2 $1 #add the posix attributes to the group echo "dn: CN=$2,CN=Users,DC=krb changetype: modify add: msSFU30PosixMember msSFU30PosixMember: CN=$1,CN=Users,DC=krb - add:memberuid memberuid: $1" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 rm /tmp/$1
Pour pouvoir supprimer un utilisateur appartenant à des groupes, il faut récupérer les noms des groupes auquel il appartient.
on crée le fichier samba4usergroup executable :
sudo nano /usr/local/samba/bin/samba4userdelete
on rend le fichier exécutable:
sudo chmod +x samba4userdelete
Le dernier script permet de supprimer un utilisateur :
#!/bin/sh #deletes a user and his home and profile folder #deletes a user who belongs to groups #tidies up idmap.ldb #usage samba4userdelete <user> echo "Deleting user $1" #get the sid sid=$(wbinfo --name-to-sid="$1") usersid=$(echo "$sid" | cut -d " " -f1) echo "found $1 sid= $usersid" #get the groups of user groups=$(wbinfo --user-groups="$1") #count the number of groups nb=$(echo "$groups"|wc -l) echo "nb=$nb" #compteur=number - 1 cpt=$(($nb - 1)) echo "cpt=$cpt" #debut boucle for i in $(seq 1 "$cpt") do gid=$(echo "$groups" | cut -d " " -f $(($i+1))) echo "found gid= $gid" name=$(wbinfo --gid-info="$gid" | cut -d ":" -f 1 | cut -d"\\" -f 2) echo "name=$name" ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 echo "dn: CN=$name,CN=Users,DC=krb changetype: modify delete: msSFU30PosixMember msSFU30PosixMember: CN=$1,CN=Users,DC=krb" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 rm /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 echo "dn: CN=$name,CN=Users,DC=krb changetype: modify delete: memberUid memberUid: $1" > /tmp/$1 ldbmodify --url=/usr/local/samba/private/sam.ldb -b dc=krb /tmp/$1 rm /tmp/$1 done ldbdel --url=/usr/local/samba/private/idmap.ldb CN=$usersid samba-tool user delete $1 rm -r /home/samba/home/$1 rm -r /home/samba/profiles/$1 echo "$1 deleted"