Outils pour utilisateurs

Outils du site


Panneau latéral

samba4

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 <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 

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 <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

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 :

<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.

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 <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

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 <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

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 <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

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 <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"
samba4.txt · Dernière modification : 2020/09/10 14:34 de 127.0.0.1