Howto Samba
- Howto Samba
- Installation
- Configuration
- Installer un BDC (Backup Domain Controler)
- Intégration des postes
- Tester la connexion
- Vérifier le status du serveur
- FAQ
- NT_STATUS_ACCESS_DENIED lors de la jonction à un domaine
- Expiration d’un compte
- Mise en place d’une « corbeille » sur un partage réseau
- Synchronisation des mots de passe Unix vers Samba
- Import des comptes d’un fichier smbpasswd vers la db interne à Samba (passdb.tdb)
- Forcer un changement de mot de passe utilisateur
- Erreur Rejecting auth request from client CLIENT machine account CLIENT$
- Tuer un client
- NT_STATUS_IO_TIMEOUT
- Lenteur à travers OpenVPN
- Installation et Configuration de Samba sans LDAP
Cette page a été importée automatiquement de notre ancien wiki mais n’a pas encore été révisée.
Howto Samba
(Description) - Listen port 139 et requete sur port 445 over TCP
Installation
# aptitude install samba
TODO…
Configuration
Attention : la configuration est rechargée automatiquement toutes les 60s …ce qui est pratique mais peut avoir des effets indésirables !
/etc/samba/smb.conf
Installer un BDC (Backup Domain Controler)
http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/samba-bdc.html
http://contribs.martymac.org/samba2.2-Ldap/html/7/
Configurer une réplication LDAP master -> slave (note: s’assurer que les attributs de mot de passe sont bien synchroniser)
Configurer smb.conf sur le BDC ainsi :
passdb backend = ldapsam:ldap://127.0.0.1
domain master = no
domain logons = yes
Sur le BDC, bien penser à également positionner le mot de passe LDAP : smbpasswd -W
Joindre le BDC au domaine via :
# net rpc join -S PDC -Uadmin
Enter admin's password:
Joined domain DOMAIN.
Attention, il peut être nécessaire de répéter l’opération 2 fois (bien s’assurer que la machine bdc$ a été créée entre temps).
- Forcer le SID du BDC :
# net rpc getsid -S PDC
Storing SID S-1-5-21-123-456-789 for Domain DOMAIN in secrets.tdb
# net setlocalsid S-1-5-21-123-456-789
# /etc/init.d/samba stop && /etc/init.d/samba start
Intégration des postes
Note importante : pour joindre un poste à un domaine Microsoft, il faut impérativement qu’il ait une version Pro (pas de version Familiale !) : Windows XP Pro ou Windows Seven Pro.
Windows XP Pro
http://www.gcolpart.com/howto/samba.php4#clients
Windows Seven Pro
Procédure dispo ici : https://wiki.samba.org/index.php/Windows7
Windows 10
ça marche, en changeant les mêmes clés de registre que sous Windows 7, cf https://wiki.samba.org/index.php/Windows7
Tester la connexion
Les test vont se faire avec la commande smbclient :
# apt install smbclient
Lister les partages :
smbclient -L localhost -U username
Se connecter a un partage :
smbclient //localhost/partage -U username
Vérifier le status du serveur
Pour voir les connexions et les fichiers ouverts par les
utilisateurs, la commande smbstatus
permet de retourner
cela.
# smbstatus
FAQ
NT_STATUS_ACCESS_DENIED lors de la jonction à un domaine
Si vous avez quelque chose ressemblant à ceci :
[2012/01/24 17:24:17.352908, 4] smbd/reply.c:786(reply_tcon_and_X) Client requested device type [?????] for share [IPC$]
[2012/01/24 17:24:17.352943, 3] lib/access.c:389(check_access) check_access: no hostnames in host allow/deny list.
[2012/01/24 17:24:17.353015, 2] lib/access.c:406(check_access) Allowed connection from (192.168.0.111)
[2012/01/24 17:24:17.353510, 4] passdb/pdb_ldap.c:1601(ldapsam_getsampwnam) ldapsam_getsampwnam: Unable to locate user [root] count=0
[2012/01/24 17:24:17.353856, 2] smbd/service.c:598(create_connection_server_info) user 'myadmin' (from session setup) not permitted to access this share (ipc$)
create_connection_server_info failed: NT_STATUS_ACCESS_DENIED
[2012/01/24 17:24:17.353891, 3] smbd/error.c:80(error_packet_set)
error packet at smbd/reply.c(795) cmd=117 (SMBtconX) NT_STATUS_ACCESS_DENIED
Alors il est très probable que cela soit du à :
invalid users = root
Expiration d’un compte
Expiration d’un compte (avec smbldap-tools) : smbldap-usermod -e YYYY-MM-DD
Forcer le changement de mot de passe : smbldap-usermod -B 1
Mise en place d’une « corbeille » sur un partage réseau
Il est possible de faire en sorte que les fichiers supprimés par les utilisateurs sur un partage soient déplacés dans un répertoire spécifique, de sorte qu’ils puissent les récupérer en cas d’erreur. Cela se fait avec le module recycle de Samba.
Exemple de configartion (à rajouter dans chacun des partages si besoin) :
vfs object = recycle
recycle:repository = .trash/%U
recycle:keeptree = Yes
recycle:touch = Yes
recycle:versions = Yes
recycle:maxsixe = 0
#recycle:exclude = *.tmp
#recycle:exclude_dir = /tmp
Les fichiers supprimés seront déplacés dans le répertoire .trash relatif au partage, et rangés dans un répertoire au nom de l’utilisateur qui l’a supprimé. Si le fichier existe déjà, une copie est fait en Copy #x of filename (grâce à l’option recycle:versions).
Pour plus d’informations sur les options possible : http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/VFS.html#id2651247
Les fichiers conservés ne sont pas limités dans le temps. Pour cela on pourra mettre un cron qui nettoiera le répertoire concerné :
32 4 * * * find /home/samba/foo/.trash/ -type f -atime +7 -delete
Bien s’assurer dans ce cas que l’option recycle:touch est active pour que la date d’accès soit mise à jour lors du déplacement du fichier.
Synchronisation des mots de passe Unix vers Samba
Le but ici est de faire en sorte que lors d’un changement de mot de
passe avec la commande passwd
, le changement soit aussi
appliqué sur le mot de passe Samba.
- Installation du module PAM nécessaire :
# aptitude install libpam-smbpass
- Ajout du module dans le fichier /etc/pam.d/common-password :
password required pam_smbpass.so nullok use_authtok try_first_pass
Il faut aussi modifier dans le même fichier la ligne concernant le module pam_ldap (ou pam_unix si LDAP n’est pas utilisé) pour passer required à requisite (force à se terminer à la première erreur, pour éviter que les 2 mots de passe ne soient désynchronisés) :
#password required pam_ldap.so use_first_pass
password requisite pam_ldap.so use_first_pass
- Ajout du module dans le fichier /etc/pam.d/common-auth :
auth optional pam_smbpass.so migrate
Note : pour que l’utilisateur puisse changer son mot de passe, il faut que les 2 mots de passe soient déjà synchronisés.
Import des comptes d’un fichier smbpasswd vers la db interne à Samba (passdb.tdb)
# pdbedit -i smbpasswd
Forcer un changement de mot de passe utilisateur
Pour qu’un utilisateur soit invité à changer son mot de passe à la prochaine connexion, il faut forcer l’attribut sambaPwdMustChange à 0. À partir de Samba 3.2, cela ne suffit plus, et il faut également définir sambaPwdLastSet à 0.
L’utilisateur serra averti par un message Windows comme quoi son mot de passe expire aujourd’hui, mais il aura toujours la possibilité de refuser de le changer et de reporter le changement indéfiniment. Pour éviter cela, il faut retirer le flag X du champs sambaAcctFlags, pour réellement faire expirer le mot de passe.
Au final, ça donne :
sambaPwdLastSet: 0
sambaPwdMustChange: 0
sambaAcctFlags: [U ]
Erreur Rejecting auth request from client CLIENT machine account CLIENT$
Windows gère des “credentials machine” c’est-à-dire une sorte de mot de passe associé à la machine. Tous les 30 jours (au moins), il le renouvelle et doit donc transmettre son nouveau mot de passe à Samba (il est inscrit dans LDAP dans l’attribut “sambaNTPassword” de l’entrée machine CLIENT$).
Si il y a un souci de synchronisation (erreur réseau au démarrage, erreur temporaire, etc.) il peut être nécessaire de réinitialiser ces infos. Deux possibilités :
- supprimer les attributs sambaNTPassword et sambaPwdLastSet associées à MACHINE$ et redémarrer la machine
- sortir la machine du domaine, effacer l’entrée LDAP associée à la machine, et rentrer à nouveau la machine dans le domaine
Note : si besoin (mais c’est moins sécurisé…), il est possible de désactiver ce renouvellement de mot de passe machine via une clé de registre :
Client-Registry: [HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "DisablePasswordChange"=dword:00000001
Tuer un client
Pour une raison ou une autre on peut vouloir tuer les connexions d’un client. On peut le faire avec smbcontrol.
# smbcontrol kill-client-ip 192.0.2.1
NT_STATUS_IO_TIMEOUT
$ smbclient //localhost/partage -U username
smb: \> put filename
cli_push returned NT_STATUS_IO_TIMEOUT
putting file filename as \filename (1044.8 kb/s) (average 1044.8 kb/s)
Cette erreur arrive généralement lors d’un transfert avec un bas débit. Smbclient utilise un buffer, qui envoie un timeout s’il n’est pas rempli au bout de 20 secondes. On peut réduire la taille de ce buffer ponctuellement :
smb: \> iosize
iosize <n> or iosize 0x<n>. Minimum is 0 (default), max is 16776960 (0xFFFF00)
smb: \> iosize 16384
Lenteur à travers OpenVPN
Il arrive que samba soit plus lent, ou même que des fichiers volumineux ne réussissent pas à être transmis sur un partage samba à travers OpenVPN. Pour résoudre le problème, il faut enlever un paramètre par défaut de la configuration /etc/samba/smb.conf :
#socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
socket options = TCP_NODELAY
Il faut ensuite redémarrer le service samba pour prendre en compte cette modification réseau.
La documentation de samba elle-même indique que cette option peut poser des problèmes de performances.
Installation et Configuration de Samba sans LDAP
Installation
# aptitude install samba
Sur Debian 6 Squeeze il est nécessaire d’installer aussi les paquets suivants:
# aptitude install samba-common samba-tools
Configuration
La configuration du serveur se fait dans le fichier /etc/samba/smb.conf:
[global]
workgroup = Nom_du_groupe
netbios name = Nom_du_serveur
security = user
interfaces = eth0
syslog = 0
log file = /var/log/samba/log.%m
log level = 1
max log size = 1000
[NOM_DU_PARTAGE]
path = /home/chemin_du_dossier
valid users = nom_du_user_samba
create mask = 0777
force create mode = 0777
directory mask = 0777
force directory mode = 0777
browseable = yes
comment = Commentaire_sur_le_partage
writable = yes
write list = liste_des_users_autorisé
Ajout d’un utilisateur Samba
L’ajout d’un utilisateur Samba se fait avec la commande suivante:
smbpasswd -a nom_de_l'utilisateur
Un mot de passe pour cet utilisateur est demandé, l’utilisateur crée doit déjà exister en tant que utilisateur UNIX.