Ci-dessous, les différences entre deux révisions de la page.
Révision précédente | |||
— | samba4 [2020/09/10 14:34] (Version actuelle) – modification externe 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Samba 4 et NFSv4 ====== | ||
+ | - 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' | ||
+ | |||
+ | |||
+ | |||
+ | ===== 1)Configuration du proxy sur les machines ===== | ||
+ | |||
+ | on configure le proxy : | ||
+ | - soit à l' | ||
+ | |||
+ | - soit après l' | ||
+ | <code bash> | ||
+ | on ajoute à ce fichier les lignes suivantes : | ||
+ | <code bash> | ||
+ | Acquire:: | ||
+ | avec " | ||
+ | |||
+ | ===== 2)mise à jour et installation openssh-server sur les machines ===== | ||
+ | on effectue les mises à jours : | ||
+ | <code bash> | ||
+ | sudo apt-get upgrade</ | ||
+ | |||
+ | on installe openssh-server pour pouvoir ouvrir plusieurs fenêtres par la suite : | ||
+ | <code bash> | ||
+ | |||
+ | on peut changer le mot de passe de root : | ||
+ | <code bash> | ||
+ | |||
+ | ===== 3)installation de Samba 4 sur le serveur ===== | ||
+ | |||
+ | Tout d' | ||
+ | |||
+ | on installe les paquets dont Samba 4 a besoin : <code bash># apt-get install build-essential, | ||
+ | |||
+ | on va devoir configurer git pour télécharger samba4 : | ||
+ | <code bash> | ||
+ | |||
+ | la dernière commande crée un fichier .gitconfig dans ~ contenant l' | ||
+ | <code bash> [http] | ||
+ | proxy = http:// | ||
+ | |||
+ | on peut maitenant copier samba dans le dossier "/ | ||
+ | <code bash> | ||
+ | le téléchargement peut prendre 1 à 2 minutes. | ||
+ | |||
+ | on se place dans le dossier samba4 crée : | ||
+ | <code bash>cd / | ||
+ | |||
+ | après le téléchargement, | ||
+ | <code bash> | ||
+ | |||
+ | on peut maintenant compiler samba 4.1.7 : | ||
+ | <code bash> | ||
+ | sudo make | ||
+ | sudo make install</ | ||
+ | la compilation prend plusieurs minutes. | ||
+ | |||
+ | on doit rajouter les chemins PATH suivants dans / | ||
+ | <code bash> :/ | ||
+ | |||
+ | J'ai choisi de ne pas l' | ||
+ | |||
+ | Après l' | ||
+ | |||
+ | Il contient les répertoires suivants : | ||
+ | |||
+ | /bin : les exécutables utiles pour l' | ||
+ | |||
+ | /etc : le fichier de configuration de samba smb.conf. | ||
+ | |||
+ | /lib : toutes les librairies. | ||
+ | |||
+ | /include : les fichiers d' | ||
+ | |||
+ | /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' | ||
+ | |||
+ | ===== 4)configuration réseau du serveur ===== | ||
+ | |||
+ | modifier la configuration IP de la machine : | ||
+ | <code bash> | ||
+ | <code bash> | ||
+ | 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 : | ||
+ | <code bash> | ||
+ | |||
+ | on vérifie le contenu du fichier resolv.conf : | ||
+ | <code bash> | ||
+ | <code bash> | ||
+ | search krb</ | ||
+ | |||
+ | ===== 5)initialisation du domaine sur le serveur ===== | ||
+ | |||
+ | on monte la partition : | ||
+ | <code bash> | ||
+ | |||
+ | et modifie l' | ||
+ | <code bash>/ | ||
+ | |||
+ | on configure le domaine de samba grace à l' | ||
+ | <code bash> | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | " | ||
+ | |||
+ | 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' | ||
+ | <code bash># rm -r / | ||
+ | #rm / | ||
+ | |||
+ | ===== 6)DNS ===== | ||
+ | L' | ||
+ | |||
+ | modifier le fichier smb.conf et mettre l' | ||
+ | <code bash> | ||
+ | <code bash>dns forwarder = 10.0.2.1</ | ||
+ | |||
+ | on va lancer Samba 4 et verifier son bon fonctionnement DNS. | ||
+ | |||
+ | lancer samba en mode debug : | ||
+ | <code bash> | ||
+ | |||
+ | pour verifier le service ldap : | ||
+ | <code bash>$ host -t SRV _ldap._tcp.krb. | ||
+ | _ldap._tcp.krb has SRV record 0 100 389 samba.krb.</ | ||
+ | |||
+ | pour verifier le service Kerberos : | ||
+ | <code bash>$ 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 : | ||
+ | <code bash> | ||
+ | samba.krb has address 10.0.2.15</ | ||
+ | |||
+ | si l' | ||
+ | <code bash> | ||
+ | |||
+ | on peut verifier les information de notre samba : | ||
+ | <code bash> | ||
+ | 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' | ||
+ | |||
+ | on va d' | ||
+ | <code bash> | ||
+ | |||
+ | on modifie le fichier "/ | ||
+ | <code bash> | ||
+ | |||
+ | en ajoutant le script suivant pour synchroniser automatiquement le serveur samba et les clients : | ||
+ | <code bash># ntp sur lui meme | ||
+ | server 127.127.1.0 | ||
+ | # l' | ||
+ | # 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' | ||
+ | # "NTP signd socket directory" | ||
+ | NTPsigndsocket / | ||
+ | |||
+ | # 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' | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | on configure Kerberos : | ||
+ | <code bash> | ||
+ | serveur Kerberos du royaume : samba.krb | ||
+ | serveur administratif du royaume Kerberos : samba.krb</ | ||
+ | |||
+ | on va modifier le fichier / | ||
+ | <code bash> | ||
+ | | ||
+ | [domain realm] | ||
+ | .krb = KRB | ||
+ | krb = KRB</ | ||
+ | |||
+ | on va tester le service Kerberos : | ||
+ | |||
+ | -ajouter un utilisateur au domaine : | ||
+ | <code bash> | ||
+ | new Password: ***** | ||
+ | Retype Password: ***** | ||
+ | User ' | ||
+ | attention a bien mettre un mot de passe a plus de 7 caractères et complexe sinon le message d' | ||
+ | <code bash> | ||
+ | </ | ||
+ | |||
+ | -générer la keytab : | ||
+ | <code bash> | ||
+ | |||
+ | on initialise le ticket de tutu : | ||
+ | <code bash> | ||
+ | tutu@KRB' | ||
+ | |||
+ | on vérifie l' | ||
+ | <code bash> | ||
+ | Credentials cache: FILE:/ | ||
+ | Principal: tutu@KRB | ||
+ | |||
+ | Issued | ||
+ | May 14 15:27:21 2014 May 15 01:27:15 2014 krbtgt/ | ||
+ | </ | ||
+ | |||
+ | si le kinit ne fonctionne pas : | ||
+ | <code bash> | ||
+ | tutu@KRB' | ||
+ | kinit: Preauthentication failed while getting initial credentials</ | ||
+ | |||
+ | alors changer le mot de passe de l' | ||
+ | <code bash> | ||
+ | New Password: | ||
+ | Changed password OK</ | ||
+ | |||
+ | on reteste : | ||
+ | <code bash> | ||
+ | Password for tutu@KRB: | ||
+ | sudo klist | ||
+ | Credentials cache: FILE:/ | ||
+ | Principal: tutu@KRB | ||
+ | |||
+ | Issued | ||
+ | May 7 14:57:26 2014 May 8 00:57:22 2014 krbtgt/ | ||
+ | </ | ||
+ | |||
+ | ===== 9)configuration du backup | ||
+ | |||
+ | le script de sauvegarde de samba n'est pas installé. | ||
+ | il faut donc recopier l' | ||
+ | <code bash> | ||
+ | sudo chown root:root / | ||
+ | sudo chmod 750 / | ||
+ | </ | ||
+ | |||
+ | on crée le dossier de backups spécifié dans le $WHERE de samba_backup : | ||
+ | <code bash> | ||
+ | sudo chmod 750 / | ||
+ | |||
+ | tester le backup : | ||
+ | <code bash> | ||
+ | |||
+ | les fichiers suivants apparaissent dans le repertoire "/ | ||
+ | <code bash> | ||
+ | samba4_private.{time}.tar.bz2 | ||
+ | sysvol.{time}.tar.bz2 | ||
+ | </ | ||
+ | |||
+ | pour que le temps affiche la date et l' | ||
+ | <code bash> | ||
+ | |||
+ | éditer le backup : | ||
+ | <code bash> | ||
+ | et ajouter la ligne suiante pour qu'il s' | ||
+ | <code bash>0 * * * * / | ||
+ | |||
+ | on vérifie le contenu de : | ||
+ | <code bash> | ||
+ | sudo ll | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== 10)configuration du partage de dossiers samba sur le serveur ===== | ||
+ | |||
+ | on modifie le fichier "/ | ||
+ | <code bash> | ||
+ | # 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: | ||
+ | [home] | ||
+ | # commentaire du répertoire | ||
+ | comment = Home Directory | ||
+ | # chemin où se trouve le dossier | ||
+ | path = / | ||
+ | # pas uniquement lisible | ||
+ | read only = no | ||
+ | [profiles] | ||
+ | # commentaire du répertoire | ||
+ | comment = Users profiles | ||
+ | # chemin où se trouve le dossier | ||
+ | path = / | ||
+ | # pas uniquement lisible | ||
+ | read only = no | ||
+ | [partage] | ||
+ | # commentaire du répertoire | ||
+ | comment = input | ||
+ | # chemin où se trouve le dossier | ||
+ | path = / | ||
+ | # 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 = / | ||
+ | read only = No | ||
+ | [sysvol] | ||
+ | path = / | ||
+ | read only = No | ||
+ | </ | ||
+ | |||
+ | Le répertoire netlogon est partagé d' | ||
+ | |||
+ | 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 : | ||
+ | <code bash> | ||
+ | sudo mkdir / | ||
+ | sudo mkdir / | ||
+ | sudo mkdir / | ||
+ | sudo chmod 1777 / | ||
+ | </ | ||
+ | |||
+ | ===== 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' | ||
+ | l' | ||
+ | |||
+ | ==== a)configuration réseaux ==== | ||
+ | |||
+ | on configure l' | ||
+ | <code bash> | ||
+ | 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 : | ||
+ | <code bash> | ||
+ | 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 : | ||
+ | <code bash>$ 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 " | ||
+ | |||
+ | 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' | ||
+ | <code bash> | ||
+ | The command completed successfully. | ||
+ | C: | ||
+ | The command completed successfully. | ||
+ | C: | ||
+ | Sanding resync command to local computer | ||
+ | The command completed successfully.</ | ||
+ | |||
+ | ==== c)installation de l' | ||
+ | |||
+ | l' | ||
+ | |||
+ | on télécharge l' | ||
+ | |||
+ | après l' | ||
+ | |||
+ | ==== d)configuration des profils itinérants ==== | ||
+ | |||
+ | on se connecte sous le compte " | ||
+ | |||
+ | on configure les profiles itinerants : | ||
+ | dans le dossier " | ||
+ | <code bash> | ||
+ | Profile path: \\samba.krb\profiles\%username%</ | ||
+ | <code bash> | ||
+ | Connect: H: to \\samba.krb\home\%username%</ | ||
+ | |||
+ | Après l' | ||
+ | <code bash>$ cd / | ||
+ | / | ||
+ | total 16 | ||
+ | drwxr-xr-x | ||
+ | drwxr-xr-x | ||
+ | drwxrwxr-x+ 2 3000000 users 4096 mai 15 11:41 tutu/ | ||
+ | </ | ||
+ | |||
+ | on ajoute un groupe dans le dossier " | ||
+ | |||
+ | on active les attributs Unix dans l' | ||
+ | |||
+ | ==== e)configuration des droits des dossiers de partage ==== | ||
+ | |||
+ | partage du dossier "/ | ||
+ | lancer l' | ||
+ | on change de machine à manager : clic droit sur " | ||
+ | |||
+ | dans " | ||
+ | |||
+ | dans l' | ||
+ | <code bash> | ||
+ | Domain Admins | ||
+ | SYSTEM</ | ||
+ | on accorde à ses groupes un contrôle total : Full Control, et supprimer le groupe " | ||
+ | |||
+ | dans " | ||
+ | dans l' | ||
+ | <code bash> | ||
+ | Domain Admins | ||
+ | SYSTEM | ||
+ | Administrators</ | ||
+ | ayant les droits suivants: | ||
+ | <code bash> | ||
+ | Administrator : Full Control</ | ||
+ | |||
+ | pour " | ||
+ | |||
+ | on supprime les groupes : | ||
+ | <code bash> | ||
+ | CREATOR GROUP | ||
+ | Account Unknown</ | ||
+ | |||
+ | dans " | ||
+ | ==== f)tests sous windows ==== | ||
+ | |||
+ | nous allons nous connecter en tant que " | ||
+ | |||
+ | après authentification, | ||
+ | |||
+ | si le dossier créé est temporaire alors le profil itinerant ne se synchronise pas. | ||
+ | pour que le profil itinerant se synchronise correctement faire : | ||
+ | sous " | ||
+ | redémarrer le poste et se reconnecter. | ||
+ | |||
+ | on va créer un autre utilisateur titi via dsa.msc : clic droit sur le dossier " | ||
+ | |||
+ | on va verifier les droits d' | ||
+ | l' | ||
+ | |||
+ | on va créer un dossier " | ||
+ | |||
+ | on lance dsa.msc et on crée le groupe bibli dans le dossier " | ||
+ | |||
+ | on modifie les droits d' | ||
+ | |||
+ | 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 " | ||
+ | <code bash>RX bytes: | ||
+ | |||
+ | on ajoute le fichier iso et on se déconnecte pour mettre à jour le profile. | ||
+ | |||
+ | sur samba on effectue à nouveau la commande " | ||
+ | <code bash>RX bytes: | ||
+ | |||
+ | on remarque que le fichier iso a bien été ajouté | ||
+ | |||
+ | on se connecte sous titi et on refait un ifconfig à partir de samba : | ||
+ | <code bash>RX bytes: | ||
+ | |||
+ | Contrairement à la version 3 de Samba, à la fermeture de la session | ||
+ | |||
+ | ===== 12)SSSD sur le serveur ===== | ||
+ | |||
+ | J'ai décidé d' | ||
+ | |||
+ | 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' | ||
+ | <code bash> | ||
+ | sudo apt-get install sssd-tools</ | ||
+ | |||
+ | on créer le fichier / | ||
+ | <code bash> | ||
+ | services = nss, pam | ||
+ | config_file_version = 2 | ||
+ | domains = default | ||
+ | |||
+ | [nss] | ||
+ | |||
+ | [pam] | ||
+ | |||
+ | [domain/ | ||
+ | id_provider = ldap | ||
+ | ldap_schema = rfc2307bis | ||
+ | ldap_referrals = false | ||
+ | ldap_uri = ldap:// | ||
+ | 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 = / | ||
+ | |||
+ | 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 / | ||
+ | <code bash> | ||
+ | |||
+ | ensuite on configure le fichier / | ||
+ | <code bash> | ||
+ | group: | ||
+ | </ | ||
+ | |||
+ | on redemarre le service sssd : | ||
+ | <code bash> | ||
+ | |||
+ | on peut mettre à jour le cache : | ||
+ | <code bash> | ||
+ | ou | ||
+ | <code bash> | ||
+ | |||
+ | on génère la keytab : | ||
+ | <code bash> | ||
+ | |||
+ | on vérifie le contenu de la keytab : | ||
+ | <code bash> | ||
+ | [sudo] password for jessica: | ||
+ | FILE:/ | ||
+ | |||
+ | Vno Type Principal | ||
+ | 1 des-cbc-crc | ||
+ | 1 des-cbc-md5 | ||
+ | 1 arcfour-hmac-md5 | ||
+ | </ | ||
+ | |||
+ | on initialise la keytab : | ||
+ | <code bash> | ||
+ | |||
+ | on vérifie que le kinit a été pris en compte : | ||
+ | <code bash> | ||
+ | Credentials cache: FILE:/ | ||
+ | Principal: samba$@KRB | ||
+ | |||
+ | Issued | ||
+ | May 7 13:49:47 2014 May 7 23:49:47 2014 krbtgt/ | ||
+ | May 7 13:51:22 2014 May 7 23:49:47 2014 ldap/ | ||
+ | |||
+ | on effectue une recherche ldap pour verifier le contenu LDAP : | ||
+ | <code bash> | ||
+ | SASL/GSSAPI authentication started | ||
+ | SASL username: samba$@KRB | ||
+ | SASL SSF: 56 | ||
+ | SASL data security layer installed. | ||
+ | # extended LDIF | ||
+ | # | ||
+ | # LDAPv3 | ||
+ | # base < | ||
+ | # filter: (objectclass=*) | ||
+ | # requesting: ALL | ||
+ | # | ||
+ | ... | ||
+ | # search reference | ||
+ | ref: ldap:// | ||
+ | |||
+ | # search reference | ||
+ | ref: ldap:// | ||
+ | |||
+ | # search reference | ||
+ | ref: ldap:// | ||
+ | |||
+ | # search result | ||
+ | search: 4 | ||
+ | result: 0 Success | ||
+ | |||
+ | # numResponses: | ||
+ | # numEntries: 272 | ||
+ | # numReferences: | ||
+ | |||
+ | tester la configuration nsswitch.conf : | ||
+ | <code bash> | ||
+ | tutu: | ||
+ | |||
+ | |||
+ | ===== 13)poste client linux ===== | ||
+ | |||
+ | on va installer un poste client sous Ubuntu 12.04 pour tester la connexion des utilisateurs AD et l' | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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 : | ||
+ | <code bash> | ||
+ | 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 : | ||
+ | <code bash> | ||
+ | |||
+ | sur le client on copie la clé dans le dossier " | ||
+ | <code bash> | ||
+ | |||
+ | on met à jour le cache : | ||
+ | <code bash> | ||
+ | |||
+ | on teste ldap : | ||
+ | <code bash> | ||
+ | tutu: | ||
+ | sudo getent passwd titi | ||
+ | titi: | ||
+ | |||
+ | ===== 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 : | ||
+ | <code bash> | ||
+ | sudo samba-tool user setexpiry nfs-user --noexpiry</ | ||
+ | |||
+ | créer le service nfs et générer sa keytab : | ||
+ | <code bash> | ||
+ | sudo samba-tool domain exportkeytab / | ||
+ | sudo samba-tool domain exportkeytab / | ||
+ | |||
+ | on copie cette keytab sur le client : | ||
+ | <code bash>scp / | ||
+ | |||
+ | Pour que le service NFSv4 fonctionne sur le serveur, l' | ||
+ | |||
+ | modifier le fichier / | ||
+ | <code bash> | ||
+ | |||
+ | faire les exports des homes dans le fichier / | ||
+ | <code bash># export du répertoire / | ||
+ | # avec droits écriture, compatible pour toutes versions, non synchronisé, | ||
+ | # pas de vérification d' | ||
+ | / | ||
+ | |||
+ | pour verifier que les exports ont été pris en compte : | ||
+ | <code bash> | ||
+ | |||
+ | modifier le fichier / | ||
+ | <code bash> | ||
+ | |||
+ | redémarrer les services: | ||
+ | <code bash> | ||
+ | sudo idmapd restart</ | ||
+ | ==== b)sur le client Linux ==== | ||
+ | |||
+ | Pour que le service NFSv4 fonctionne sur le poste client Linux, l' | ||
+ | |||
+ | Sur le poste client Linux, j'ai installé « samba4-clients » pour pouvoir utiliser la commande « net ads » qui permet d' | ||
+ | |||
+ | La configuration de samba4-clients (/ | ||
+ | <code bash># 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' | ||
+ | <code bash> | ||
+ | 10.0.2.15 | ||
+ | |||
+ | on joint la machine au domaine : | ||
+ | <code bash> | ||
+ | |||
+ | on rajoute au fichier smb.conf : | ||
+ | <code bash># méthode Kerberos par système de keytab | ||
+ | kerberos method = system keytab | ||
+ | </ | ||
+ | |||
+ | on crée la keytab de la machine cliente : | ||
+ | <code bash> | ||
+ | |||
+ | cela crée le fichier / | ||
+ | <code bash> | ||
+ | Credentials cache: FILE:/ | ||
+ | Principal: NFS4-CLIENT$@KRB | ||
+ | |||
+ | Issued | ||
+ | May 19 15:59:34 2014 May 20 01:59:34 2014 krbtgt/ | ||
+ | May 19 15:59:34 2014 May 20 01:59:34 2014 nfs/ | ||
+ | May 19 15:59:34 2014 May 20 01:59:34 2014 nfs/ | ||
+ | |||
+ | monter les homes : | ||
+ | <code bash> | ||
+ | |||
+ | Pour que les utilisateurs aient leur répertoire personnel monté automatiquement, | ||
+ | |||
+ | on modifie le fichier / | ||
+ | <code bash>/ | ||
+ | |||
+ | on créer le fichier / | ||
+ | <code bash>* -fstype=nfs4, | ||
+ | |||
+ | on modifie le fichier / | ||
+ | <code bash> | ||
+ | SEARCH_BASE=" | ||
+ | |||
+ | sur le serveur samba on créer le dossier home " | ||
+ | on ajoute dans ce fichier le contenu : tututu. | ||
+ | |||
+ | sur la machine cliente, on se connecte sous tutu pour verifier que ca marche : | ||
+ | <code bash>$ su tutu | ||
+ | Mot de passe : | ||
+ | $ bash | ||
+ | tutu@nfs4-client: | ||
+ | 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 " | ||
+ | |||
+ | Ainsi, il y a deux niveaux d' | ||
+ | |||
+ | ===== 15)Apache et LDAP ===== | ||
+ | |||
+ | 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' | ||
+ | <code bash> | ||
+ | |||
+ | on créer le dossier / | ||
+ | |||
+ | on configure apache : | ||
+ | <code bash> | ||
+ | |||
+ | on modifie ce fichier comme suit : | ||
+ | <code bash>< | ||
+ | AuthType basic | ||
+ | AuthName " | ||
+ | AuthBasicProvider ldap | ||
+ | AuthLDAPBindDN cn=administrator, | ||
+ | AuthLDAPBindPassword " | ||
+ | AuthLDAPURL " | ||
+ | require valid-user | ||
+ | < | ||
+ | |||
+ | redemarrer apache : | ||
+ | <code bash> | ||
+ | |||
+ | on teste via le navigateur : | ||
+ | <code bash> | ||
+ | |||
+ | 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 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' | ||
+ | |||
+ | ==== a)Script lancement samba automatique ==== | ||
+ | |||
+ | on crée le fichier " | ||
+ | |||
+ | on ajoute le contenu suivant à ce fichier : | ||
+ | <code bash> #! /bin/sh | ||
+ | ### BEGIN INIT INFO | ||
+ | # Provides: samba | ||
+ | # Required-Start: | ||
+ | # Required-Stop: | ||
+ | # Default-Start: | ||
+ | # Default-Stop: | ||
+ | # Short-Description: | ||
+ | ### END INIT INFO | ||
+ | # | ||
+ | # Start/stops the Samba daemon (samba). | ||
+ | # Adapted from the Samba 3 packages. | ||
+ | # | ||
+ | |||
+ | SAMBAPID=/ | ||
+ | |||
+ | # clear conflicting settings from the environment | ||
+ | unset TMPDIR | ||
+ | # See if the daemon and the config file are there | ||
+ | test -x / | ||
+ | |||
+ | . / | ||
+ | |||
+ | case " | ||
+ | start) | ||
+ | log_daemon_msg " | ||
+ | if ! start-stop-daemon --start --quiet --oknodo --exec / | ||
+ | log_end_msg 1 | ||
+ | exit 1 | ||
+ | fi | ||
+ | |||
+ | log_end_msg 0 | ||
+ | ;; | ||
+ | stop) | ||
+ | log_daemon_msg " | ||
+ | |||
+ | 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 " | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ | |||
+ | on modifie les droits du fichier : | ||
+ | <code bash> | ||
+ | |||
+ | on met à jour les autostarts : | ||
+ | <code bash> | ||
+ | |||
+ | ==== b)Script : ajouter un groupe ==== | ||
+ | |||
+ | on regarde les attributs unix dans la base LDAP : | ||
+ | <code bash>$ ldapsearch -H ldap:// | ||
+ | |||
+ | |||
+ | on crée le fichier samba4group executable : | ||
+ | <code bash> | ||
+ | |||
+ | on rend le fichier exécutable: | ||
+ | <code bash> | ||
+ | |||
+ | son contenu : | ||
+ | <code bash># | ||
+ | #creates a posix group suitable for containing Linux users | ||
+ | #usage samba4group < | ||
+ | echo " | ||
+ | samba-tool group add $1 | ||
+ | #get the gid | ||
+ | strgid=$(wbinfo --group-info=$1) | ||
+ | gid=$(echo $strgid | cut -d ":" | ||
+ | #add the posix attributes to the group | ||
+ | echo "dn: cn=$1, | ||
+ | changetype: modify | ||
+ | add: | ||
+ | mssFU30NisDomain: | ||
+ | - | ||
+ | add: gidnumber | ||
+ | gidnumber: $gid | ||
+ | - | ||
+ | add: mssFU30Name | ||
+ | mssFU30Name: | ||
+ | ldbmodify --url=/ | ||
+ | rm / | ||
+ | |||
+ | ==== 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 : | ||
+ | <code bash> | ||
+ | |||
+ | on rend le fichier exécutable: | ||
+ | <code bash> | ||
+ | |||
+ | son contenu : | ||
+ | <code bash> #!/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 " | ||
+ | echo " | ||
+ | samba-tool user add $1 | ||
+ | sleep 2 | ||
+ | #get the uid | ||
+ | struid=$(wbinfo -i $1) | ||
+ | uid=$(echo $struid | cut -d ":" | ||
+ | #get the gid | ||
+ | strgid=$(wbinfo --group-info=$2) | ||
+ | gid=$(echo $strgid | cut -d ":" | ||
+ | #get the group from the sid | ||
+ | strsid=$(wbinfo --gid-to-sid=$gid) | ||
+ | primarygid=$(echo $strsid | cut -d " | ||
+ | strwg=$(echo $struid | cut -d " | ||
+ | #add the posix attributes to the user | ||
+ | echo "dn: CN=$1, | ||
+ | changetype: modify | ||
+ | add: msSFU30NisDomain | ||
+ | msSFU30NisDomain: | ||
+ | - | ||
+ | add: uidnumber | ||
+ | uidnumber: $uid | ||
+ | - | ||
+ | add: gidnumber | ||
+ | gidnumber: $gid | ||
+ | - | ||
+ | add: | ||
+ | unixhomedirectory: | ||
+ | - | ||
+ | add: | ||
+ | msSFU30Name: | ||
+ | - | ||
+ | add:uid | ||
+ | uid: $1 | ||
+ | - | ||
+ | add: loginshell | ||
+ | loginshell: / | ||
+ | |||
+ | ldbmodify --url=/ | ||
+ | samba-tool group addmembers $2 $1 | ||
+ | |||
+ | #set the user to the posix group | ||
+ | echo "dn: CN=$1, | ||
+ | changetype: modify | ||
+ | replace: primarygroupid | ||
+ | primarygroupid: | ||
+ | echo " | ||
+ | sleep 5 | ||
+ | |||
+ | #add the posix attributes to the group | ||
+ | echo "dn: CN=$2, | ||
+ | changetype: modify | ||
+ | add: msSFU30PosixMember | ||
+ | msSFU30PosixMember: | ||
+ | - | ||
+ | add: | ||
+ | memberuid: $1" > /tmp/$1 | ||
+ | |||
+ | ldbmodify --url=/ | ||
+ | mkdir / | ||
+ | chown -R $1:$2 / | ||
+ | rm /tmp/$1 | ||
+ | hostname=$(hostname -s) | ||
+ | echo "dn: CN=$1, | ||
+ | changetype: modify | ||
+ | add: profilePath | ||
+ | profilePath: | ||
+ | - | ||
+ | add: homeDrive | ||
+ | homeDrive: Z: | ||
+ | - | ||
+ | add: homeDirectory | ||
+ | homeDirectory: | ||
+ | echo " | ||
+ | sleep 5 | ||
+ | ldbmodify --url=/ | ||
+ | echo "New user: " | ||
+ | echo "uid " $uid | ||
+ | echo "gid " $gid | ||
+ | echo " | ||
+ | echo " | ||
+ | echo $(getent passwd $1) | ||
+ | echo "sid " $(wbinfo --gid-to-sid=$gid) | ||
+ | db=/ | ||
+ | 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 dajouter un groupe à lutilisateur. | ||
+ | |||
+ | on crée le fichier samba4usergroup executable : | ||
+ | <code bash> | ||
+ | |||
+ | on rend le fichier exécutable: | ||
+ | <code bash> | ||
+ | |||
+ | <code bash># | ||
+ | #add a posix group to a s4 user | ||
+ | #usage samba4usergroup < | ||
+ | |||
+ | echo " | ||
+ | #get the sid | ||
+ | sid=$(wbinfo --name-to-sid=" | ||
+ | usersid=$(echo " | ||
+ | echo "found $1 sid= $usersid" | ||
+ | |||
+ | ldbmodify --url=/ | ||
+ | samba-tool group addmembers $2 $1 | ||
+ | |||
+ | #add the posix attributes to the group | ||
+ | echo "dn: CN=$2, | ||
+ | changetype: modify | ||
+ | add: msSFU30PosixMember | ||
+ | msSFU30PosixMember: | ||
+ | - | ||
+ | add: | ||
+ | memberuid: $1" > /tmp/$1 | ||
+ | ldbmodify --url=/ | ||
+ | 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 : | ||
+ | <code bash> | ||
+ | |||
+ | on rend le fichier exécutable: | ||
+ | <code bash> | ||
+ | |||
+ | Le dernier script permet de supprimer un utilisateur : | ||
+ | <code bash># | ||
+ | #deletes a user and his home and profile folder | ||
+ | #deletes a user who belongs to groups | ||
+ | #tidies up idmap.ldb | ||
+ | #usage samba4userdelete < | ||
+ | |||
+ | echo " | ||
+ | #get the sid | ||
+ | sid=$(wbinfo --name-to-sid=" | ||
+ | usersid=$(echo " | ||
+ | echo "found $1 sid= $usersid" | ||
+ | #get the groups of user | ||
+ | groups=$(wbinfo --user-groups=" | ||
+ | #count the number of groups | ||
+ | nb=$(echo " | ||
+ | echo " | ||
+ | # | ||
+ | cpt=$(($nb - 1)) | ||
+ | echo " | ||
+ | |||
+ | #debut boucle | ||
+ | for i in $(seq 1 " | ||
+ | do | ||
+ | gid=$(echo " | ||
+ | " -f $(($i+1))) | ||
+ | echo "found gid= $gid" | ||
+ | name=$(wbinfo --gid-info=" | ||
+ | echo " | ||
+ | ldbmodify --url=/ | ||
+ | echo "dn: CN=$name, | ||
+ | changetype: modify | ||
+ | delete: msSFU30PosixMember | ||
+ | msSFU30PosixMember: | ||
+ | ldbmodify --url=/ | ||
+ | rm /tmp/$1 | ||
+ | |||
+ | ldbmodify --url=/ | ||
+ | echo "dn: CN=$name, | ||
+ | changetype: modify | ||
+ | delete: memberUid | ||
+ | memberUid: $1" > /tmp/$1 | ||
+ | ldbmodify --url=/ | ||
+ | rm /tmp/$1 | ||
+ | done | ||
+ | |||
+ | ldbdel --url=/ | ||
+ | samba-tool user delete $1 | ||
+ | rm -r / | ||
+ | rm -r / | ||
+ | echo "$1 deleted"</ |