====== Samba 4 et NFSv4 ====== - auteur : Jessica Kiragossian - Samba 4 prend en charge d’une 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 l’Active Directory, qui est composé des protocoles : LDAP, Kerberos et DNS. L’Active 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 nœuds, d’arbres, de forêts et domaines. ===== 1)Configuration du proxy sur les machines ===== 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. ===== 2)mise à jour et installation openssh-server sur les machines ===== 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 ===== 3)installation de Samba 4 sur le serveur ===== 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. ===== 4)configuration réseau du serveur ===== 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 ===== 5)initialisation du domaine sur le serveur ===== 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 ===== 6)DNS ===== 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 l’AD comme backend. En outre, il est la solution DNS par défaut lors de l’approvisionnement 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 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 ===== 7)NTP ===== 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 ===== 8)Kerberos 5 ===== 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 ===== 9)configuration du backup ===== 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 ===== 10)configuration du partage de dossiers samba sur le serveur ===== 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 ===== 11)joindre un poste windows 7 au domaine Samba 4 ===== 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 ==== a)configuration réseaux ==== 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. ==== b)configuration ntp ==== 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. ==== c)installation de l'outil RSAT ==== 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. ==== d)configuration des profils itinérants ==== 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. ==== e)configuration des droits des dossiers de partage ==== 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". ==== f)tests sous windows ==== 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. ==== g)test synchronisation ==== 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 l’utilisateur sont chargés. ===== 12)SSSD sur le serveur ===== 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 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 ===== 13)poste client linux ===== 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 ===== 14)NFSv4===== on va configurer notre serveur samba 4 pour qu'il intègre nfs4. ==== a)sur le serveur de Samba4 ==== 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 ==== b)sur le client Linux ==== 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 j’ai 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. ===== 15)Apache et LDAP ===== L’Institut Fourier utilise le service Web avec l’annuaire 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 : 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 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. ===== 16)Scripts ===== 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 lorsqu’un utilisateur ou groupe est créé par l’outil « samba-tool ». L’outil samba-tool active les attributs Windows par défaut. Le problème c’est que si ces attributs ne sont pas activés l’authentification des utilisateurs sur un poste linux ne fonctionne pas. l'outil "wbinfo" permet de récupérer des éléments de la base LDAP. ==== a)Script lancement samba automatique ==== 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 ==== b)Script : ajouter un groupe ==== 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 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 ==== c)Script : ajouter un utilisateur ==== 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 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 ==== d)Script : ajouter un groupe à un utilisateur ==== Le script permet d’ajouter un groupe à l’utilisateur. 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 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 ==== e)Script : supprimer un utilisateur ==== 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 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"