Samba en serveur de fichiers autonome
Installation et configuration de Samba
Après avoir installé Samba
aptitude install samba
il faut éditer le fichier /etc/samba/smb.conf sous Debian ou Ubuntu. Voici le contenu du mien :
[global] workgroup = SMBGROUP # nom du groupe de travail affiche dans le voisinage reseau netbios name = kelussmb # nom du serveur affiche dans le voisinage reseau, sinon nom linux du serveur server string = samba serveur # commentaires affiches a cote du nom du serveur dans le voisinage reseau security = USER # authentification au niveau des utilisateurs et non au niveau des partages username map = /etc/samba/smbusers # localisation du fichier contenant les alias entre les utilisateurs Windows et les utilisateurs Linux preferred master = yes # le demon nmbd peut devenir le maitre d'exploration du groupe de travail prefere en forcant des elections pour le maitre d'exploration du groupe de travail local master = yes # le demon nmbd peut devenir le maitre d'exploration local du sous-reseau en participant a l'election du maitre d'exploration local domain master = No # le demon nmbd ne devient pas le controle de domaine du groupe de travail dns proxy = No # nmbd ne jouera pas le role de proxy dns pour la resolution wins invalid users = root # root n'a pas le droit de se connecter log level = 1 # niveau de log par defaut syslog = 0 # definit le niveau des messages qui seront envoyes a syslog max log size = 1000 # taille max des logs samba [partage] path = /home/partage read only = No create mask = 0755
Création des utilisateurs
Une fois smb.conf modifié, on peut passer à la création des utilisateurs Samba qui seront donc les noms d'utilisateurs utilisés sous Windows pour accéder aux partages du serveur Linux. La base d'authentification Samba étant le fichier /etc/samba/smbpasswd, les utilisateurs doivent aussi exister dans /etc/passwd, la base d'utilisateurs Linux.
Pour créer un utilisateur, rien de plus simple : un petit coup de
smbpasswd -a nomutilisateur
on renseigne le mot de passe pour Samba et le tour est joué. A condition bien sûr que nomutilisateur existe aussi dans /etc/passwd, sinon, il faudra aussi faire un
adduser nomutilisateur
pour créer l'utilisateur dans la base de comptes Linux.
On peut aussi utiliser le mappage entre les utilisateurs Samba/Windows et les utilisateurs Linux. Par exemple, faire que administrateur soit en fait root sous Linux. Pour ça, il suffit d'éditer le fichier /etc/samba/smbusers et de rajouter root = administrateur.
Samba membre d'un domaine NT avec gestion des ACL
Installation et configuration de Samba
Comme d'habitude, on installe Samba et Winbind avec
aptitude install samba winbind
On édite ensuite le fichier /etc/samba/smb.conf :
[global] workgroup = SMBGROUP # nom du domaine à joindre server string = %h server (Samba %v) # texte apparaissant dans le champ commentaire dans l'explorateur Windows security = DOMAIN # on va utiliser le controleur de domaine pour authentifier les utilisateurs obey pam restrictions = no # on n'utilise pas PAM pour les droits d'acces car ca pose problème au niveau des changements de droits d'acces par l'utilisateur password server = * # n'importe quel controleur de domaine fera l'affaire, samba le trouvera par broadcast (comportement normal d'une machine NT) username map = /etc/samba/smbusers # permet de faire des alias entre les noms des utilisateurs log level = 1 # pour avoir un peu d'infos, plus le nombre est eleve, plus il y a d'infos syslog = 0 # on net met aucun message (excepte les erreurs de lancement) dans syslog, tout sera loggue à part log file = /var/log/samba/log.%m # chemin du fichier de log, un log par machine (%m) : log.kelus.net par exemple max log size = 1000 # la taille max du fichier en octets avant d'effectuer une rotation preferred master = No # on ne veut pas que la machine linux devienne maitre pour l'exploration reseau local master = No # on ne veut pas que la machine linux devienne maitre local domain master = No # on ne veut surtout pas etre controleur de domaine ! dns proxy = No # on ne veut pas que la machine linux joue le role de serveur WINS wins server = ip_du_serveur # mais on va utiliser plutot ce serveur panic action = /usr/share/samba/panic-action %d # l'action standard en cas de crash idmap uid = 2000-5000 # les uid que winbind va utiliser pour gerer les comptes d'utilisateurs du domaine qui n'existent pas en local sur la machine linux idmap gid = 2000-5000 # les gid que winbind va utiliser pour gerer les groupes d'utilisateurs du domaine qui n'existent pas en local sur la machine linux winbind use default domain = yes # winbind va traiter les utilisateurs n'ayant pas de composante domaine dans leur nom en leur rajoutant le nom de domaine invalid users = root # root n'a pas le droit de se connecter winbind separator = + # le separateur entre le domaine et le nom d'utilisateur, par exemple SMBGROUP\toto devient SMBGROUP+toto winbind cache time = 300 # la duree (en secondes) de conservation dans le cache de winbindd des requetes que winbind a faites aupres du serveur WINS winbind enum users = yes # permet l'enumeration par winbind des utilisateurs winbind enum groups = yes # idem pour les groupes nt acl support = yes # on supporte le comportement des ACL de Windows NT [partage] path = /home/partage # son chemin dans l'arborescence de la machine linux read only = No # ce n'est pas en lecture seule create mask = 0755 # le masque par défaut de création, tous les droits pour le proprietaire, et lecture/exécution pour le reste
Il faut aussi modifier le fichier /etc/nsswitch.conf de la manière suivante :
passwd: files winbind
group: compat winbind
afin d'utiliser winbind pour notamment la correspondance uid et gid avec les noms d'utilisateurs et les groupes.
Voilà un samba basique mais qui fonctionne, sauf au niveau des changement des droits d'accès pour plusieurs utilisateurs, et c'est là que les ACL vont entrer en jeu.
Gestion des ACL
Pour gèrer les ACL, il faut deux choses, un noyau Linux les supportant et un samba compilé avec le support des ACL. Les ACL se positionnent au niveau du système de fichier, mais tous les systèmes de fichier ne les gère pas. Parmi les heureux élus, on trouve notamment ext3 (mais nécessite un patch du noyau (uniquement 2.4) pour fonctionner) et XFS qui les gère en natif.
Pour le noyau, le 2.6 supporte les ACL en standard et c'est activé dans le noyau Debian de base pour pas mal de système de fichiers.
Pour le 2.4, il faut rajouter un patch suivant le système de fichier que l'on veut utiliser,le noyau Debian de base n'en supporte aucun.
Pour Samba, le paquet fournit par Debian a le support des ACL compilé, donc tout va bien
Je m'étais d'abord tourné vers XFS, mais les ACL ne fonctionnent pas vraiment : les modifications des droits étaient bien effectuées, mais n'étaient pas prises en compte, je n'en ai pas trouvé la raison. Aucun soucis avec ce bon vieux ext3.
Pour monter un système de fichier ext3 avec les acl d'activées, il faut rajouter l'option acl dans le /etc/fstab. Par exemple, pour les rajouter sur la partition /dev/sda7 :
/dev/sda7 /home ext3 defaults,acl 0 2
C'est tout, pas besoin de reformater ou d'utiliser tune2fs.
Pour manipuler les ACL, il faut installer le paquet acl avec
aptitude install acl
On obtient alors setfacl pour modifier les acl et getfacl pour les afficher. Il est conseillé de lire le man de ces deux commandes pour bien comprendre comment les utiliser, mais leur fonctionnement est en fait très simple.
Voici un exemple :
setfacl -m u:testsamba:rw tux
On donne les droits d'écriture et de lecture à l'utilisateur sur le répertoire tux qui appartient à l'utilisateur kelus.
Un petit coup de
getfacl tux
nous retourne
#file: tux #owner: kelus #group: root user::rwx user:testsamba:rw- group::--- mask::rwx other::r-x default:user::rwx default:user:testsamba:rwx default:group::--- default:mask::rwx default:other::r-x
On constate que kelus est toujours propriétaire de tux et a bien les droits rwx et l'utilisateur testsamba a bien les droits rw-. Merveilleux non ?
Rejoindre un domaine NT
Bon, on a maintenant un Samba et Winbind bien configurés (très sommairement quand même), un système de fichier journalisé avec ACL, il va peut-être être temps de rajouter notre machine linux au domaine SMBGROUP
Rien de plus simple, il faut uniquement un compte d'administrateur du domaine et le mot de passe qui va bien et ensuite taper :
net join member -U compte_administrateur_du_domaine
Samba en contrôleur de domaine NT avec des profils itinérants
Installation et configuration de Samba
Peu de changement dans cette étape primordiale, toujours un petit coup de
aptitude install samba
suivi d'une édition du fichier /etc/samba/sbm.conf
[global]
workgroup = SMBGROUP
# nom du groupe de travail affiche dans le voisinage reseau
netbios name = KELUSSMB
# nom du serveur affiche dans le voisinage reseau, sinon nom linux du serveur
security = user
# authenfication au niveau de l'utilisateur et non au niveau des partages
unix password sync = yes
# synchronisation de la base des mots de passe samba avec celle de linux
smb passwd file = /etc/samba/smbpasswd
# localisation du fichier de mots de passe de samba
passwd program = /usr/bin/passwd %u
# programme a lancer lors d'une modification de mot de passe sous Windows
username map = /etc/samba/smbusers
# localisation du fichier contenant les alias entre les utilisateurs Windows et les utilisateurs Linux
add user script = /usr/sbin/useradd -m %u
# commande executee lors de la creation d'un utilisateur sous Windows
delete user script = /usr/sbin/userdel -r %u
# commande executee lors de la suppression d'un utilisateur sous Windows
add group script = /usr/sbin/groupadd %g
# commande executee lors de la creation d'un groupe sous Windows
delete group script = /usr/sbin/groupdel %g
# commande executee lors de la suppression d'un groupe sous Windows
add user to group script = /usr/sbin/usermod -G %g %u
# commande executee lors de l'ajout d'un utilisateur a un groupe
add machine script = /usr/sbin/useradd -s /bin/false -d /dev/null -g machines %u
# commande executee lors du rajout d'une machine au domaine
logon path = \\%L\Profils\%U
# repertoire ou sont stockes les profils itinerants sur le client Windows
logon drive = H:
# lecteur local Windows sur lequel sera monte le repertoire de l'utilisateur (valable uniquement pour Windows NT)
logon home = \\%L\%U
# idem precedemment mais pour Windows 9x en plus
domain logons = Yes
# le serveur samba va fournir le service de connexion reseau aux postes Windows 9x pour son groupe de travail et devenir controleur de domaine NT
preferred master = Yes
# le demon nmbd peut devenir le maitre d'exploration du groupe de travail prefere en forcant des elections pour le maitre d'exploration du groupe
de travail
domain master = Yes
# le demon nmbd devient le controleur de domaine du groupe de travail
[homes]
valid users = %S
# utilisateurs pouvant acceder au partage home, ici les utilisateurs ne pourront acceder qu'a leur propre repertoire
read only = No
# pas de lecture seule
browseable = No
# le partage n'apparait dans la liste des partages du voisinage reseau
[public]
path = /partage
guest ok = Yes
# l'utilisateur guest peut acceder a ce partage
[netlogon]
path = /var/lib/samba/netlogon/scripts
# localisation du repertoire contenant les scripts de connexion reseau
admin users = kelus
# utilisateur ayant les droits administrateurs sur ce partage
guest ok = No
# l'utilisateur guest ne peut pas y acceder
browseable = No
# le partage n'apparait dans la liste des partages du voisinage reseau
writable = No
# pas d'ecriture sauf pour les utilisateurs specifies dans admin users
[Profils]
path = /var/lib/samba/profiles
# localisation du repertoire contenant les profils itinerants sur le serveur samba
read only = No
# pas de lecture seule
browseable = No
#le partage n'apparait dans la liste des partages du voisinage reseau
guest ok = Yes
#l'utilisateur guest peut y acceder
profile acls = Yes
# permet de garantir le bon fonctionnement des verifications des acl sur les profils par Windows 2000 et XP
Création des utilisateurs
Comme pour Samba dans le rôle de serveur de fichiers autonome, les comptes utilisateurs Samba sont toujours stockés dans la base /etc/samba/smbpasswd, pas d'annuaire LDAP, on reste dans quelque-chose de simple.
Donc, pour créer les utilisateurs, on fait comme précédemment : un coup de
adduser nomutilisateur
puis un
smbpasswd -a nomutilisateur
Toutefois, il est aussi possible de passer par les outils d'administration des comptes utilisateurs dans un domaine sous Windows. Bien sûr, il faut que le compte administrateur du domaine soit déjà créé.
Il ne reste donc plus qu'à créer les utilisateurs et à faire rejoindre le domaine aux ordinateurs sous Windows.
Répertoires à créer
A la lecture du smb.conf, on remarque que deux nouveaux répertoires entre en jeu :
- /var/lib/samba/netlogon/scripts qui contient donc les scripts à lancer lors de la connexion au réseau,
- /var/lib/samba/profiles qui va contenir les profils des utilisateurs afin de les rendre itinérants (il faudra donc que les utilisateurs aient les droits d'écriture sur ce répertoire).
Pour les créer, rien de particulier :
mkdir -p /var/lib/samba/netlogon/scripts mkdir -p /var/lib/samba/profiles
Ensuite, si on a eu la bonne idée de créer un groupe contenant les utilisateurs Samba, par exemple, smbgroup, on donne les droits d'écriture à ces utilisateurs sur /var/lib/samba/profiles pour qu'il puisse créer leurs profils itinérants :
chgrp smbgroup /var/lib/samba/profiles && chmod g+rwx /var/lib/samba/profiles