version 0.3 - non distribuable - en cours de correction

Samba et le support ACL sur Debian




Suite à mon article concernant l'intégration d'un DNS BIND dans un réseau Windows 2000, certains on pensé que je ne montrais pas assez comment se débarasser de Windows. C'est chose faite, puisque celui-ci vous donne l'arme pour faire dégager le serveur de fichier Windows qui déshonnorait votre salle de serveurs.
Le support des ACLs sur un serveur Samba est le moyen ultime de l'intégrer totalement dans une entreprise fonctionnant avec des clients Windows (car bien sur, vous n'avez pas réussi à convaincre votre PDG de virer ces stations Windows). En effet, depuis l'intégration de Winbind dans le code principal de Samba il y a un peu plus de deux ans plus rien ne s'oppose à l'intégration d'un serveur de fichier Samba dans un domaine Windows de 1000 ou 2000 utilisateurs. Pourquoi alors faire fonctionner Samba avec les ACLs POSIX ? Sans rentrer dans le débat du "pourquoi de ACLs", on peut simplement dire que comme la gestion de la sécurité sous NT et Windows 2000 passe à la fois par les droits posés sur les partages ET sur ceux posés au niveau du système de fichier NTFS, si on veut vraiment avoir les mêmes fonctionalités qu'un serveur de fichier NT, il faut intégrer le support des ACLs à Samba.

L'intégration des ACLs sur le système de fichier permet d'affiner très fortement la sécurité, tout en évitant de créer une multitude de groupes pour chaque objet.
Sur le site de bestbits, il y a une page qui explique à quoi servent les ACLs: http://acl.bestbits.at/example.html


Introduction

Cette doc s'adresse aux utilisateurs de Debian, même si d'autres peuvent s'en inspirer pour une mise en place sur une autre distribution. Ce n'est pas que je voue un amour immodéré à Debian (je serais plutôt Mandrake), mais c'est le système dont la mise à jour sur le long terme m'a paru la plus aisée, d'une part. D'autre part les paquetages Samba sur Debian ne sont pas compilés pour supporter les ACLs, et il n'y a pas de support ACLs intégré à Debian par défaut. La manipulation pour la mise en place est quelque peu complexe, sans être difficile, et il m'a semblé bon de baliser le chemin.

Ce document s'adresse à des techniciens relativement expérimentés qui savent au moins compiler un kernel, et qui ont un minimum d'expérience sur cette distribution, mais je pense que des débutants peuvent  s'en sortir. Il n'existe à ce jour, à ma connaissance, aucun document décrivant cette manipulation pour une Debian. Enfin, comme le disait ma grand-mère, "il faut souffrir pour être bon" (à prononcer avec l'accent "pied-noir").

La base de départ est la suivante: Debian Woody 3.0 installée avec kernel bf24. J'ai choisi d'utiliser le système de fichier XFS comme support des ACLs pour ses bonnes performances avec Samba. Mon choix de départ a été d'utiliser au maximum les paquets Debian existants et les paquets sources, ceci toujours dans une optique de facilité de maintenance du système à long terme.


Il y a globalement 5 grandes étapes:
 - La mise en place du système de fichier XFS
 - L'installation du support des ACLs pour le système
 - L'installation de Samba
 - Le paramétrage de Samba
 - Les tests.


Mise en place du système de fichier XFS

Une méthode un peu différente de la mienne est décrite par Daniel Robbins:
http://www-106.ibm.com/developerworks/opensource/library/l-fs10.html?dwzone=opensource
Daniel Robbins qui dirige le projet "Gentoo" a une approche bien moins orientée distribution que moi. Comme annoncé, je me suis servi exclusivement des paquets Debian.

Il faut commencer par télécharger les sources du kernel et le patch, et patcher le kernel:
Installer le paquetage kernel-source-2.4.18, et puis le kernel-patch-xfs livré dans la partie stable:
apt-get install kernel-source-2.4.18
apt-get install kernel-patch-xfs
Patcher le noyau en executant le script de patch dans /usr/src/linux/, puis passer à "make menuconfig" et activer les options:
  <*> SGI XFS filesystem support
[*] Enable XFS Realtime support
[*] Enable XFS Quota
<*> Enable XFS DMAPI
Finir de configurer le kernel: make dep, make clean, make bzimage, make modules, make modules_install.
Pour ceux qui n'ont jamais configuré et compilé un kernel, je conseille la lecture de l'excellent et très pédagogique guide de Christian Casteyde: YAGIL
Explication de ces options:
-"XFS Realtime" vous permet de configurer une zone de stockage dont les performances seront réellement déterminantes pour des applications temps réel.
-"XFS Quota" permet d'activer... les quotas sur les volumes XFS.
-"XFS DMAPI" : cette options sera utile à des outils de gestion de stockage quand des applications prévues pour utiliser DMAPI seront développées.  Il n'y a pas pour l'instant de projet abouti. Certaines sont en développement chez SGI et chez IBM.

Ceux qui voudraient installer le noyau comme un vrai paquet Debian, veuillez pardonner à un misérable hérétique, et rendez vous à l'adresse suivante:
http://lea-linux.org/kernel/kernel_debian.php3

Le kernel est installé, a booté, il reste à installer les outils XFS. C'est la partie la plus simple de toute l'installation.

srvfichiers:~# apt-cache search xfs filesystem | grep xfs
kernel-patch-xfs - XFS Filesystem support for Linux 2.4.14, 2.4.17 and 2.4.18
xfsdump - Administrative utilities for the XFS filesystem
xfslibs-dev - XFS filesystem-specific static libraries and headers.
xfsprogs - Utilities for managing the XFS filesystem


Etape suivante, on les installe:

srvfichiers:~# apt-get install xfsdump xfslibs-dev xfsprogs
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
attr dmapi libattr1
The following NEW packages will be installed:
attr dmapi libattr1 xfsdump xfslibs-dev xfsprogs
0 packages upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 1226kB of archives. After unpacking 3371kB will be used.
Do you want to continue? [Y/n]
[... ...bla-bla... ...]
Setting up xfslibs-dev (2.0.3-1) ...
srvfichiers:~#


Voyons déjà si on peut formater une partition en XFS ?

srvfichiers:~# mkfs
mkfs mkfs.ext2 mkfs.ext3 mkfs.minix mkfs.xfs


Le fichier dmesg est catégorique aussi. Le kernel supporte bien le système de fichier SGI-XFS:

Journalled Block Device driver loaded
Coda Kernel/Venus communications, v5.3.18, coda@cs.cmu.edu
SGI XFS with ACLs, DMAPI, realtime, quota, no debug enable


C'est bien engagé. On va donc créer une nouvelle partition avec cfdisk:

                                  cfdisk 2.11n

Disk Drive: /dev/sda
Size: 240067280896 bytes
Heads: 255 Sectors per Track: 63 Cylinders: 29186

Name Flags Part Type FS Type [Label] Size (MB)
------------------------------------------------------------------------------
sda1 Boot Primary Linux ext3 197.41
sda5 Logical Linux ext3 1497.01
sda6 Logical Linux ext3 3997.49
sda7 Logical Linux ext3 3002.23
sda8 Logical Linux swap 699.15
sda9 Logical Linux 230669.76



[Bootable] [ Delete ] [ Help ] [Maximize] [ Print ]
[ Quit ] [ Type ] [ Units ] [ Write ]

un petit reboot,

et on crée le système de fichier:

srvfichiers:~# mkfs.xfs /dev/sda9
meta-data=/dev/sda9 isize=256 agcount=54, agsize=1048576 blks
data = bsize=4096 blocks=56315849, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=0
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=6874
realtime =none extsz=65536 blocks=0, rtextents=0

On peut augmenter la taille du journal à 32MB:

mkfs.xfs -l size=32m /dev/sda9

on le monte - mount /dev/sda9 /data - et on va voir dans /proc:

srvfichiers:/# grep data /proc/mounts
/dev/sda9 /data xfs rw 0 0

On a donc un système de fichier monté en XFS.
Vérifiez que le paquetage attr est bien installé. Il sert à ajouter des attributs à des objets du système de fichier.
Bon! C'était vraiment trop facile. Maintenant, mes loupiots, on va moins rire!



Mise en place des ACLs supportées par XFS

On n'a pas recompilé un kernel uniquement par toute bête "geekitude", donc on met en place ces satanées ACLs.
Il faut commencer par télécharger les paquetages manquants:

srvfichiers:~# apt-get install acl acl-dev attr-dev
The following extra packages will be installed:
  libacl1
The following NEW packages will be installed:
  acl acl-dev attr-dev libacl1

Les paquetages acl-dev et attr-dev seront nécessaires plus tard pour la configuration de Samba. Il n'y a donc pas vraiment de raison de les faire attendre.

Maintenant, un petit test pour voir si tout se passe bien:

srvfichiers:/_data# setfacl -dm u:toto:rwx zztop
srvfichiers:/_data# getfacl zztop
# file: zztop
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:toto:rwx
default:group::r-x
default:mask::rwx
default:other::r-x

srvfichiers:/_data# setfacl -dm g:utilisateurs:rwx zztop
srvfichiers:/_data# getfacl zztop
# file: zztop
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:toto:rwx
default:group::r-x
default:group:utilisateurs:rwx
default:mask::rwx
default:other::r-x

C'était toujours aussi facile, mais ça ne va pas durer!

Compilation de Samba avec le support XFS.

Je vais expliquer sommairement la manoeuvre: on va se servir des sources des paquets existants, les modifier, et compiler pour reconstruire de vrais paquets debian avec nos options pour Samba. Ca permet d'avoir tout de propre avec les fichiers installés directement aux bons endroits. L'exécutable qui reconstruit des paquets à partir des sources est debuild.

Il faut commencer par télécharger les sources du paquetages avec 

apt-get source Samba

Le paquet se décompresse dans le répertoire courant.
Aller dans le répertoire Debian pour y modifier les fichiers rules et changelog.

Pour le fichier changelog on n'est pas obligé de faire quelque chose de vraiment super propre. Personnellement, j'ai juste fait ça:

Samba (2.2.3a-6) stable; urgency=low
* Modification du fichier rules

-- Fabrice Clerc <fclerc@linux-france.org> Tue, 13 Nov 2002 10:57:40 -0500
Comme j'ai pris une bordée d'injures à propos de ce fichier lors de la compilation du paquetage, j'ai recopié l'entrée suivante, et je l'ai modifiée ensuite, parce que ça a l'air sensible, cette bête là!

Pour le fichier rules, j'ai ajouté les options de compilation désirées à savoir principalement l'option --with-acl-support, comme suit:

        [ -f source/Makefile ] || (cd source && ./configure \
--host=$(DEB_HOST_GNU_TYPE) \
--build=$(DEB_BUILD_GNU_TYPE) \
--with-fhs \
--prefix=/usr \
--sysconfdir=/etc \
--with-privatedir=/etc/Samba \
--localstatedir=/var \
--with-netatalk \
--with-smbmount \
--with-pam \
--with-syslog \
--with-Sambabook \
--with-utmp \
--with-readline \
--with-pam_smbpass \
--with-libsmbclient \
--with-winbind \
--with-msdfs \
--with-acl-support \
--with-quotas)

Il faut faire attention au "\" en fin de ligne, et à la parenthèse fermée ")"en fin d'options.
Il est tout à fait possible de compiler les toutes dernières sources de Samba (2.2.7 à ce jour) en réutilisant ces options de compilations et en les mettant l'une à la suite de l'autre, mais ce n'est pas aussi propre.

Ceci fait, j'ai bien sur eu quelques menu soucis:

J'ai du télécharger les paquetages nécessaire à la compilation des sources à la construction des fichiers .deb: devscripts pbuilder.

Ajout des quelques paquets de dépendance:
debhelper (>=2.0.103), libpam0g-dev, libreadline4-dev, libcupsys2-dev, autoconf  (oui, tout ça!).

Bref !! Ceci fait, on relance debuild: ça cause, ça cause, ça cause, ça cause, ça cause toutours, ça cause longtemps, et... ça ne cause plus.
on remonte d'un répertoire, on fait ls *.dev et là sous nos yeux de geek émerveillés, nous trouvons tout plein de paquets debs. Ca a marché!
Hé non! En cours de route, j'ai pu voir: "configure --with-acl-support: no"
et dans le fichier config.log:

/usr/lib/libacl.so: undefined reference to `fgetxattr'
/usr/lib/libacl.so: undefined reference to `removexattr'
/usr/lib/libacl.so: undefined reference to `setxattr'
/usr/lib/libacl.so: undefined reference to `fsetxattr'
/usr/lib/libacl.so: undefined reference to `getxattr'

Bref!! Ca ne marche pas.
En fait, ce qui se passe, c'est que la version ACL installée en Woody est la 2.0.8 et que Samba a besoin d'une version 2.0.12 ou supérieure pour fonctionner.
Ce n'est pas grave, parce que maintenant que vous êtes chauds, le reste va se faire en 5 minutes.

On a donc le choix de soit compiler les paquetages de la version "testing", soit d'installer la version Sid de acl-dev et libacl1 et de tourner avec ces versions.
Il m'a paru plus propre de compiler les paquetages de la version "testing" sur ma version "stable", et d'installer les paquets ainsi créés. On appelle ça faire un backport. Donc comme pour Samba, on télécharge les sources en faisant apt-get source, sauf que là, on ne modifie pas les fichiers rules et changelog, on fait directement debuild, et on installe les paquets générés.

Ensuite, dernière chose, il faut supprimer le fichier config.cache. C'est obligatoire sinon debuild ne marche pas, il recompile avec les options du précédent ./configure (qui n'avait pas fonctionné correctement), et forcément ça ne gaze pas.

Et en route pour la gloire:
On se positionne dans le répertoire samba-2.2.3a (celui qui contient les répertoires source-debian-examples-doc....)
et on tape debuild, et c'est parti. Quand tout le charabia est passé, on a normalement de jolis paquets .deb dans le répertoire parent; cette fois-ci, c'est la bonne:

srvfichiers:/_sauve/Samba-2.2.3a# ls *.deb
libpam-smbpass_2.2.3a-6_i386.deb Samba-common_2.2.3a-6_i386.deb smbclient_2.2.3a-6_i386.deb winbind_2.2.3a-6_i386.deb
libsmbclient-dev_2.2.3a-6_i386.deb Samba-doc_2.2.3a-6_all.deb smbfs_2.2.3a-6_i386.deb
libsmbclient_2.2.3a-6_i386.deb Samba_2.2.3a-6_i386.deb swat_2.2.3a-6_i386.deb

Et comme dirait le chef de Dilbert: Yapuka, Yaka-fokon...  installe :dpkg -i *.deb, et zou!

Bon! Si vous voulez vraiment être certains avant de lancer debuild que ça va correctement se compiler, vous faites une copie du répertoire source, et vous y faites ./configure --with-acl-support, et vous regardez ce que ça dit. Si c'est bon, vous pouvez y aller.

Paramétrage de Samba...

Il reste à mettre en place un smb.conf qui tienne la route, à modifier le fichier /etc/nsswitch.conf, joindre le domaine NT, redémarrer les services, et ça tournera.
Je me permets ici de mettre un bout de l'explicaton contenue dans le Winbind How-To, parce que celui-ci n'existe qu'en anglais (la page man est traduite, elle).
Le démon de démarrage winbindd est installé séparément, mais il est possible de le faire démarrer en même temps que Samba; pour cela, il suffit de modifier le script init.d (cf la doc). Moi, je ne l'ai pas fait.

Le fichier nsswitch.conf permet à Samba de savoir quelle méthode de résolution des noms d'utilisateurs doit être utilisée et dans quel ordre. Il faut modifier les lignes group et passwd comme suit:

#passwd:         compat
#group: compat
group: files winbind
passwd: files winbind
shadow: compat

Puis modifier le fichier smb.conf en adaptant mon exemple:

        workgroup = MON-DOMAINE
netbios name = SRVFICHIERS
security = DOMAIN
encrypt passwords = Yes
password server = *
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind separator = +

Inscrire le serveur dans le domaine domaine NT. Pour cela, arrêter les démons de Samba, taper la comande magique, et redémarrer les démons. Je ne sais pas pourquoi j'explique tout ça, vous l'avez fait avant moi.

srvfichiers:~# /etc/init.d/Samba stop
Stopping Samba daemons: nmbd smbd.
srvfichiers:~# smbpasswd -j MON-DOMAINE -r MONCPD -U fabrice
Password:
Joined domain MON-DOMAINE.

Bien sur fabrice a le droit d'ajouter des stations au domaine MON-DOMAINE, quant à mon mot de passe, vous pouvez courir pour l'avoir, non mais!
Dans l'Administrateur de Serveur (NT4) ou dans la mmc Utilisateurs et Ordinateurs Active Directory (Windows 2000) la machine a bien été créée.

On redémarre les démons smbd, nmbd, etwinbind, et on teste la bonne connexion au domaine: avec "wbinfo -u" et "wbinfo -g"

srvfichiers:~# wbinfo -u
MON-DOMAINE+56F787A9-79A6-49DA-8
MON-DOMAINE+billgetz
MON-DOMAINE+IUSR_EXCHANGE
srvfichiers:~# wbinfo -g
MON-DOMAINE+Admins du domaine
MON-DOMAINE+Utilisa. du domaine
MON-DOMAINE+Invits du domaine
MON-DOMAINE+Ordinateurs du domaine

C'est bon, les utilisateurs et les groupes fonctionnent.
Créons un partage pour tester tout ça. Dans smb.conf, ajoutons (il faut bien créer un partage pour tester, n'est-ce pas ?!):

[data]
path = /_data
read only = No
valid users = MON-DOMAINE+billgetz
admin users = MON-DOMAINE+billgetz



...et test


Allons voir le résultat. Pour la capture d'écran, j'ai ajouté quelques utilisateurs au niveau de l'ACL de mon répertoire "tz":


capture d'ecran d'une acl vue de l'explorateur windows



J'ai essayé de faire la même chose sur mon autre serveur qui n'est pas compilé pour supporter les ACL, et le résultat est nettement moins probant en ajoutant le compte fabrice. On croit que ça marche, on clique sur appliquer, et tous les espoirs s'effondrent:

capture d'ecran - securite sans acl nt a marche po


Il faut bien le support des ACLs dans Samba pour pouvoir les gérer, vous n'avez pas fait tout ça pour rien. Voilà. Vous n'avez pas démérité, je vous paye une bonne bière.

Conclusion

Normalement, et si tout va bien, vous êtes arrivés au même résultat que moi.  La prochaine étape concerne l'exploitation des ACLs, et leur intégration avec la sécurité Unix classique de type propriétaire-groupe-reste du monde, et la sécurité des partages. Cela fera, je pense, l'objet d'un document prochainement. Si vous avez des difficultés, vous pouvez me contacter à l'adresse indiquée au bas du document.


Note:

La MMC, est l'interface d'administration des machines Windows depuis la version Windows 2000.
Active Directory est l'annuaire LDAP qui contient tous les objets du domaine Windows 2000


Bibliographie

Inexistante.


Webographie

La page de Daniel Robbins concernant l'installation du système de fichier XFS sur un noyau 2.4.18:
http://www-106.ibm.com/developerworks/opensource/library/l-fs10.html?dwzone=opensource

Celle de bestbits pour les ACLs, leur installation, leur mise en oeuvre.
http://acl.bestbits.at/

La page d'accueil de SGI pour le système de fichier XFS:
http://oss.sgi.com/projects/xfs/index.html


Remerciements


- En tout premier lieu à Christian Perrier dont les nombreuses contributions sur la mailing list de Samba, et le gentil coup de pouce par mail m'ont permis de boucler cette doc. Quand j'aurai 5 minutes, je ferai une page retraçant l'historique de ses interventions qui m'ont permis d'arriver là. Il a mis en ligne ses "backports" de Samba 2.2.8 pour Debian Woody à cette adresse: http://www.perrier.eu.org/debian
- Puis à Olivier Parisy pour sa relecture.

Et toujours à mon écran, mes chats, mon clavier, ma plante verte, pour leur toujours indéfectible soutien, et a mes amis de l'abul.

Suite à mon article sur Netbios non-signé du linuxmag 44, je signe dès maintenant, comme ça, si les extra-terrestres débarquent ils sauront que c'est moi qui ait écrit ça.

Fabrice Clerc