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

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