====== 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'annuaire d'une infrastructure de base de données évolutive et centralisée. Les objets (utilisateurs, systèmes, groupes, imprimantes, applications) sont stockées selon une hiérarchie composée de nuds, darbres, de forêts et domaines.
===== 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 lAD comme backend. En outre, il est la solution DNS par défaut lors de lapprovisionnement et la mise à niveau d'un contrôleur AD Samba.
modifier le fichier smb.conf et mettre l'adresse gateway:
sudo nano /usr/local/samba/etc/smb.conf
dns forwarder = 10.0.2.1
on va lancer Samba 4 et verifier son bon fonctionnement DNS.
lancer samba en mode debug :
sudo /usr/local/samba/sbin/samba -i -M single -d 3
pour verifier le service ldap :
$ host -t SRV _ldap._tcp.krb.
_ldap._tcp.krb has SRV record 0 100 389 samba.krb.
pour verifier le service Kerberos :
$ host -t SRV _kerberos._udp.krb.
_kerberos._udp.krb has SRV record 0 100 88 samba.krb.
pour verifier le nom de la machine samba :
host -t A samba.krb.
samba.krb has address 10.0.2.15
si l'adresse retourner n'est pas la bonne alors on met à jour le dns via la commande samba-tool :
samba-tool dns update 127.0.0.1 samba
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 lutilisateur 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 jai détruis le ticket de la machine "krb5cc_machine_KRB". Le montage n'est plus possible.
Ainsi, il y a deux niveaux d'authentification : le premier concerne l'authentification de la machine et le deuxième l'authentification de l'utilisateur.
===== 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'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 lorsquun utilisateur ou groupe est créé par loutil « samba-tool ». Loutil samba-tool active les attributs Windows par défaut. Le problème cest que si ces attributs ne sont pas activés lauthentification des utilisateurs sur un poste linux ne fonctionne pas.
l'outil "wbinfo" permet de récupérer des éléments de la base LDAP.
==== 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 dajouter un groupe à lutilisateur.
on crée le fichier samba4usergroup executable :
sudo nano /usr/local/samba/bin/samba4usergroup
on rend le fichier exécutable:
sudo chmod +x samba4usergroup
#!/bin/bash
#add a posix group to a s4 user
#usage samba4usergroup
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"