Petite installation d’un serveur samba avec authentification unix

J’ai eu le besoin de configurer un serveur samba pour des utilisateurs linux et windows, mais je n’arrive pas à trouver de solution d’administration satisfaisante. Le serveur de partage est hébergé sur un serveur debian.
Tout d’abord, rappelons que samba est une implémentation unix du partage de fichier au format NTFS de windows. Il permet de mettre à disposition des fichiers sur un réseau pour tous les utilisateurs d’un lan, avec une gestion des droits assez fine. J’ai personnellement une nette préférence pour NFS, mais bien entendu, NFS n’est pas disponible pour les utlisateurs windows.

Pour l’installer, pas de soucis:

apt-get install samba samba-common

Le fichier de configuration est /etc/samba/smb.conf . Le fichier d’installation de base de debian est une mine d’information.

Les aspects de sécurité sont importants dans l’installation d’un montage Samba.

-Les users autorisés à se connecter sont des utilisateurs unix du serveurs
-Leurs mots de passe (unix et samba) sont synchronisés dans le sens unix vers samba. Toutefois l’implémentation que j’ai de cette synchronisation a un défaut majeur qui la rend selon presque inutilisable. Nous verrons cela plus bas.

-On restreint les interfaces en écoute et on met des iptables pour restreindre l’accés à certains ports (ceux de nmbd et smbd, les démons utilisés).

Je vous donne ici les seuls paramètres que j’ai changés par rapport au smb.conf d’origine:

# interfaces sur laquelle tourne le serveur samba
interfaces = 192.168.3.0/24
# bind seulement sur les interfaces ci-dessus
bind interfaces only = yes
# tout utilisateur samba doit être un utilisateur unix
security = user
# le home de root ne peut pas être un partage et root ne peut pas se connecter
invalid users = root
# le nombre max de partages utilisateurs
usershare max shares = 10

Ce qui nous donne:

[global]
workgroup = WORKGROUP
server string = %h server
;   wins server = w.x.y.z
dns proxy = no
;   name resolve order = lmhosts host wins bcast
interfaces = 192.168.3.0/24
bind interfaces only = yes
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
security = user
invalid users = root
encrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .
pam password change = no
usershare max shares = 10
[homes]
comment = Home Directories
browseable = no
read only = no
create mask = 0700
directory mask = 0700
valid users = %S
donne pour le fichier dans son ensemble:

Afin de pouvoir synchroniser les mots de passe, j’ai besoin de libpam-smbpass :

apt-get install libpam-smbpass

Afin de pouvoir utiliser ce module PAM pour synchroniser les users, j’ai besoin de modifier les fichiers suivants:
/etc/pam.d/common-password

password   required   pam_unix.so nullok obscure md5
password   required   pam_smbpass.so nullok use_authtok try_first_pass

/etc/pam.d/common-auth

auth    required        pam_unix.so nullok_secure
auth    optional        pam_smbpass.so migrate

Ce dernier, par l’option migrate, permet de modifier (et créer) les utilisateurs samba quand on modifie le mot de passe par passwd. La restriction que j’exprimais est que le mot de passe n’est effectivement changé en base smb que quand l’utilisateur se sera loggé sur son compte par mot de passe. Ceci est particulièrement contraignant dans l’administration du système au quotidien et je suis à la recherche d’autres solutions.

Par conséquent pour activer un compte blah:

$useradd -m blah
$passwd blah

Attention pour être en base smb, le user doit maintenant se logger lui-même.

Comment utiliser le système?
Sur un poste linux:

sudo mkdir /mnt/blah
sudo mount -t smbfs //192.168.3.253/blah /mnt/blah -o user=blah,password=xxxxxx,uid=1000

où user blah est le user distant, password est le mot de passe et uid est l’uid de l’utilsateur local qui utilisera /mnt/blah. Sinon, il n’aura pas les droits en écriture.

Sur un poste windows: je ne sais pas bien, mais cela se fait en quelques clics, non?

Afin de sécuriser l’accès aux services, en ne l’autorisant que depuis le réseau local, j’applique les iptables suivantes:

iptables -A INPUT -p udp -m udp  --dport 137 -j DROP
iptables -A INPUT -p udp -m udp  --dport 138 -j DROP
iptables -A INPUT -p udp -m udp  -s 192.168.3.0/24 --dport 137 -j ACCEPT
iptables -A INPUT -p udp -m udp  -s 192.168.3.0/24 --dport 138 -j ACCEPT

En conclusion, je ne peux pas me satisfaire de cette solution, mais c’est la seule que j’ai pour le moment. Si quelqu’un a d’autres idées, je suis preneur!

Pas d'articles similaires.

Posted in admin. Bookmark the permalink. RSS feed for this post. Leave a trackback.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam

Swedish Greys - a WordPress theme from Nordic Themepark.