### 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$)
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é :
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.
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):
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.
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 :
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)