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

Outils personnels