22
0
Fork 0
wiki/HowtoSamba.md

333 lines
10 KiB
Markdown
Raw Permalink Normal View History

2024-02-26 18:08:19 +01:00
---
title: Howto Samba
...
2016-12-29 11:25:39 +01:00
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
# Howto Samba
2017-11-03 09:25:34 +01:00
(Description)
- Listen port 139 et requete sur port 445 over TCP
2016-12-29 11:25:39 +01:00
## 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/>
1. Configurer une réplication LDAP master -> slave (note: s'assurer que les attributs de mot de passe sont bien synchroniser)
2. Configurer *smb.conf* sur le BDC ainsi :
~~~
passdb backend = ldapsam:ldap://127.0.0.1
domain master = no
domain logons = yes
~~~
3. Sur le BDC, bien penser à également positionner le mot de passe LDAP : smbpasswd -W
4. 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).
5. 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 conexion
Les test vont se faire avec la commande smbclient :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
2017-01-14 00:06:38 +01:00
# apt install smbclient
2016-12-29 11:25:39 +01:00
~~~
Lister les partages :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
smbclient -L localhost -U username
~~~
Se connecter a un partage :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
smbclient //localhost/partage -U username
~~~
2019-08-23 15:10:37 +02:00
## 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
~~~
2016-12-29 11:25:39 +01:00
## 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 <user>
Forcer le changement de mot de passe : _smbldap-usermod -B 1 <user>_
### 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é :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
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 :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
# aptitude install libpam-smbpass
~~~
* Ajout du module dans le fichier _/etc/pam.d/common-password_ :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
password required pam_smbpass.so nullok use_authtok try_first_pass
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
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) :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
#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_ :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
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 :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
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$).
2020-04-06 13:23:36 +02:00
2016-12-29 11:25:39 +01:00
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 :
2020-04-06 13:23:36 +02:00
2016-12-29 11:25:39 +01:00
- 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 :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
Client-Registry: [HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "DisablePasswordChange"=dword:00000001
~~~
2018-08-30 17:48:58 +02:00
### 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
~~~
2018-10-30 16:05:22 +01:00
### NT_STATUS_IO_TIMEOUT
2018-10-30 16:04:51 +01:00
~~~
$ 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
~~~
2016-12-29 11:25:39 +01:00
2020-04-06 13:23:36 +02:00
### Lenteur à travers OpenVPN
2020-04-06 13:24:48 +02:00
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.
2020-04-06 13:23:36 +02:00
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
~~~
2020-04-06 13:24:48 +02:00
Il faut ensuite redémarrer le service samba pour prendre en compte cette modification réseau.
2020-04-06 13:23:36 +02:00
La [documentation de samba](https://www.samba.org/samba/docs/old/Samba3-HOWTO/speed.html) elle-même indique que cette option peut poser des problèmes de performances.
2016-12-29 11:25:39 +01:00
# Installation et Configuration de Samba sans LDAP
## Installation
~~~
2017-01-14 00:06:38 +01:00
# aptitude install samba
2016-12-29 11:25:39 +01:00
~~~
Sur Debian 6 Squeeze il est nécessaire d'installer aussi les paquets suivants:
~~~
2017-01-14 00:06:38 +01:00
# aptitude install samba-common samba-tools
2016-12-29 11:25:39 +01:00
~~~
## 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é, lutilisateur crée doit déjà exister en tant que utilisateur UNIX.