Installation et configuration de Samba
On installe Samba et Winbind avec
apt-get install samba winbind
On édite ensuite le fichier /etc/samba/smb.conf :
[global]
# nom du domaine à joindre
workgroup = SMBGROUP
# texte apparaissant dans le champ commentaire dans l'explorateur
# Windows
server string = %h server (Samba %v)
# on va utiliser le contrôleur de domaine pour authentifier les
#utilisateurs
security = DOMAIN
# on n'utilise pas PAM pour les droits d'accès car ça pose problème
# au niveau des changements de droits d'accès par l'utilisateur
obey pam restrictions = no
# n'importe quel contrôleur de domaine fera l'affaire, samba le
# trouvera par broadcast (comportement normal d'une machine
# Windows)
password server = *
# permet de faire des alias entre les noms des utilisateurs
username map = /etc/samba/smbusers
# pour avoir un peu d'informations
# plus le nombre est élevé, plus il y a d'informations
log level = 1
# on net met aucun message (excepte les erreurs de lancement) dans
# syslog, tout sera loggué à part
syslog = 0
# chemin du fichier de log, un log par machine (%m) :
# log.sulek.fr par exemple
log file = /var/log/samba/log.%m
# la taille max du fichier en octets avant d'effectuer une rotation
max log size = 1000
# on ne veut pas que la machine Linux devienne maître pour
# l'exploration réseau
preferred master = No
# on ne veut pas que la machine Linux devienne maître local
local master = No
# on ne veut surtout pas être contrôleur de domaine !
domain master = No
# on ne veut pas que la machine Linux joue le rôle de serveur WINS
dns proxy = No
# mais on va utiliser plutôt ce serveur
wins server = ip_du_serveur
# l'action standard en cas de crash
panic action = /usr/share/samba/panic-action %d
# les uid que Winbind va utiliser pour gérer les comptes
# d'utilisateurs du domaine qui n'existent pas en local sur la
# machine Linux
idmap uid = 2000-5000
# les gid que Winbind va utiliser pour gérer les groupes
# d'utilisateurs du domaine qui n'existent pas en local sur la
# machine Linux
idmap gid = 2000-5000
# Winbind va traiter les utilisateurs n'ayant pas de composante
# domaine dans leur nom en leur rajoutant le nom de domaine
winbind use default domain = yes
# root n'a pas le droit de se connecter
invalid users = root
# le séparateur entre le domaine et le nom d'utilisateur, par exemple
# SMBGROUP\toto devient SMBGROUP+toto
winbind separator = +
# la durée (en secondes) de conservation dans le cache de Winbind
# des requêtes que winbind a faites auprès du serveur WINS
winbind cache time = 300
# permet l'énumération par Winbind des utilisateurs
winbind enum users = yes
# idem pour les groupes
winbind enum groups = yes
# on supporte le comportement des ACL de Windows NT
nt acl support = yes
[partage]
# son chemin dans l'arborescence de la machine Linux
path = /home/partage
# ce n'est pas en lecture seule
read only = No
# le masque par défaut de création, tous les droits pour le
# propriétaire, et lecture/exécution pour le reste
create mask = 0755
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 (liste de contrôles d'accès) 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 fichiers, mais tous les systèmes de fichiers ne les gèrent 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èrent 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èmes de fichiers. Pour le 2.4, il faut rajouter un patch suivant le système de fichiers 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
apt-get 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 nsulek.
Un petit coup de
getfacl tux
nous retourne
#file: tux
#owner: nsulek
#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 nsulek 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
On a maintenant Samba et Winbind bien configurés (très sommairement quand même), un système de fichiers 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
Voilà, on peut maintenant accéder à notre machine Linux depuis Windows en utilisant la sécurité du domaine !
Installation et configuration de Samba
Après avoir installé Samba avec
apt-get install samba
il faut éditer le fichier /etc/samba/smb.conf sous Debian ou Ubuntu.
Voici le contenu du mien :
[global]
# nom du groupe de travail affiché dans le voisinage réseau
workgroup = SMBGROUP
# nom du serveur affiché dans le voisinage réseau,
# sinon nom linux du serveur
netbios name = sambasrv
# commentaires affichés à côté du nom du serveur
# dans le voisinage réseau
server string = Serveur Samba
# authentification au niveau des utilisateurs et non au niveau des
# partages
security = USER
# localisation du fichier contenant les alias entre les utilisateurs
# Windows et les utilisateurs Linux
username map = /etc/samba/smbusers
# le démon nmbd peut devenir le maître d'exploration du groupe de
# travail préféré en forçant des élections pour le maître
# d'exploration du groupe de travail
preferred master = yes
# le démon nmbd peut devenir le maître d'exploration local du
# sous-réseau en participant a l'élection du maître d'exploration
# local
local master = yes
# le démon nmbd ne devient pas le contrôleur de domaine du groupe de
# travail
domain master = No
# nmbd ne jouera pas le rôle de proxy DNS pour la résolution WINS
dns proxy = No
# root n'a pas le droit de se connecter
invalid users = root
# niveau de log par défaut
log level = 1
# définît le niveau des messages qui seront envoyés à syslog
syslog = 0
# taille max des logs samba
max log size = 1000
[partage]
# son chemin dans l'arborescence de la machine Linux
path = /home/partage
# ce n'est pas en lecture seule
read only = No
# le masque par défaut de création, tous les droits pour le
# propriétaire, et lecture/exécution pour le reste
create mask = 0755
Création des utilisateurs
Une fois /etc/samba/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