Samba
Une configuration minimale
[global] workgroup = ANGRES passdb backend = tdbsam [homes] comment = Répertoire personnel de %u read only = no [monpartage] comment = Description longue de mon partage read only = no path = /srv/samba/monpartage
Noter qu'un partage partage est read only
par défaut, d'où la nécessité de désactiver cette option.
Le passbd backend
implicite est smbpasswd
qui ne permet pas de stocker tous les champs utilisateurs (durée de validité, etc.), on utilise donc tdbsam
d'office pour ne pas avoir de surprises par la suite.
Créer un dossier partagé
cd /srv/samba/groups mkdir nom_du_partage chmod o= nom_du_partage chmod g=rwxs nom_du_partage chgrp nom_du_partage nom_du_partage
Puis modifier le fichier de configuration de Samba
/etc/samba/smb.conf
:
[nom_du_partage] comment = Répertoire pour ... force group = +nom_du_partage path = /srv/samba/groups/nom_du_partage valid users = @nom_du_partage read only = no create mask = 0660 directory mask = 0770
On teste la configuration avec:
testparm
On relance le serveur de fichiers:
/etc/init.d/samba restart
Noter l'astuce pour forcer le bon groupe dans les répertoires partagés: ne change le groupe que pour les utilisateurs qui en sont déjà membres:
[qualite] ... force group = +qualite ... [prod] ... force group = +prod
Conserver la compatibilité avec MS Woe9X et WoeMe
La nouvelle version dans Debian Lenny (3.2.5) désactive implicitement les vieux clients, ce qui a également pour conséquence d'EFFACER tous les mots de passe dans l'ancien format. Il faut donc - AVANT de mettre à jour - rajouter ceci dans la configuration:
lanman auth = yes client plaintext auth = yes client lanman auth = yes
Pour plus d'information, cf. /usr/share/doc/samba/NEWS.Debian.gz
:
samba (3.0.27a-2) unstable; urgency=low * Weak authentication methods are disabled by default Beginning with this version, plaintext authentication is disabled for clients and lanman authentication is disabled for both clients and servers. Lanman authentication is not needed for Windows NT/2000/XP/Vista, Mac OS X or Samba, but if you still have Windows 95/98/ME clients (or servers) you may need to set lanman auth (or client lanman auth) to yes in your smb.conf. The "lanman auth = no" setting will also cause lanman password hashes to be deleted from smbpasswd and prevent new ones from being written, so that these can't be subjected to brute-force password attacks. This means that re-enabling lanman auth after it has been disabled is more difficult; it is therefore advisable that you re-enable the option as soon as possible if you think you will need to support Win9x clients. Client support for plaintext passwords is not needed for recent Windows servers, and in fact this behavior change makes the Samba client behave in a manner consistent with all Windows clients later than Windows 98. However, if you need to connect to a Samba server that does not have encrypted password support enabled, or to another server that does not support NTLM authentication, you will need to set "client plaintext auth = yes" and "client lanman auth = yes" in smb.conf. -- Steve Langasek <vorlon@debian.org> Sat, 24 Nov 2007 00:23:37 -0800
Configuration LDAP
OpenLDAP
apt-get install slapd dpkg-reconfigure slapd apt-get install samba-doc zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba3.schema
Modifier /etc/ldap/slapd.conf
et ajouter:
include /etc/ldap/schema/samba3.schema
invoke-rc.d slapd restart
Voir aussi: OpenLDAP
Système UNIX
cat <<EOF | debconf-set-selections libnss-ldap shared/ldapns/ldap-server string ldap://127.0.0.1/ libnss-ldap shared/ldapns/base-dn string dc=chezmoi,dc=fr libnss-ldap libnss-ldap/rootbinddn string cn=admin,dc=chezmoi,dc=fr libnss-ldap libnss-ldap/rootbindpw password admin EOF apt-get install libnss-ldap cat <<EOF >> /etc/libnss-ldap.conf nss_base_passwd ou=people,dc=chezmoi,dc=fr nss_base_shadow ou=people,dc=chezmoi,dc=fr nss_base_group ou=groups,dc=chezmoi,dc=fr EOF sed -i -e 's/^\(passwd:.*$\)/\1 ldap/' \ -e 's/^\(group:.*$\)/\1 ldap/' \ -e 's/^\(shadow:.*$\)/\1 ldap/' \ /etc/nsswitch.conf
SMB-LDAP-Tools:
apt-get install smbldap-tools zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz \ > /etc/smbldap-tools/smbldap.conf chmod 644 /etc/smbldap-tools/smbldap.conf
- comment SID="..."
- sambaDomain="CHEZMOI"
- suffix="dc=chezmoi,dc=fr"
- groupsdn="ou=groups,${suffix}"
- computersdn="ou=people,${suffix}" # same than users, otherwise WXP won't join the domain %(
- usersdn="ou=people,${suffix}"
- idmapdn="ou=people,${suffix}"
- sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
- hash_encrypt="CRYPT"
- defaultMaxPasswordAge="-1" # (http://www.planetmy.com/blog/ldap-samba-pdc/)
- sambaSID mantadory: `net getlocalsid` . "$uidNumber" > uid=admin/sambaSID
cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf \ /etc/smbldap-tools/smbldap_bind.conf chmod 600 /etc/smbldap-tools/smbldap_bind.conf
- masterDN="cn=admin,dc=chezmoi,dc=fr"
- masterPw="secret"
smbldap-populate
cat <<EOF | ldapmodify -c -x -D 'cn=admin,dc=chezmoi,dc=fr' -W dn: sambaDomainName=CHEZMOI,dc=chezmoi,dc=fr changetype: modify replace: uidNumber uidNumber: 3000 - replace: sambaNextRid sambaNextRid: 3000 EOF # Not necessary: #gidNumber: 3000
- Set uidNumber=3000 - only machines will use this script, and this will avoid conflicts with webmin.
- Not sure about the 'sambaNextRid', it seems it's defined when the computer joins the domain (not in 'smbldap-useradd -w')
Samba
workgroup = CHEZMOI # I use LDAP passdb backend = ldapsam #passdb backend = ldapsam:ldap://ldap-server.chezmoi.fr ldap suffix = dc=chezmoi,dc=fr ldap admin dn = cn=admin,dc=chezmoi,dc=fr ldap user suffix = ou=people ldap group suffix = ou=groups #ldap machine suffix = ou=computers ldap machine suffix = ou=people ldap idmap suffix = ou=people ldap passwd sync = yes # Pour les dossiers personnels root preexec = /usr/local/bin/smb_mkhomedir.sh %U
mkdir -m 755 /srv/samba/ mkdir -m 755 /srv/samba/netlogon
Définir le mot de passe LDAP:
smbpasswd -W
Créer automatiquement les dossiers personnels:
cat <<'EOF' > /usr/local/bin/smb_mkhomedir.sh #!/bin/bash echo `date -R` $0 $* >> /var/log/smb_mkhomedir.log user="$1" homedir=`getent passwd $user | cut -d: -f 6` # Validate homedir starts with "/home/" if ! echo $homedir | grep ^/home/ >/dev/null; then exit 1 fi # Don't do anything if the path already exists if [ -e homedir ]; then exit 0 fi mkdir -p -m 755 $homedir chown $user: $homedir EOF chmod 755 /usr/local/bin/smb_mkhomedir.sh
Changer le nom de domaine:
- modifier avec gq (ou autre interface d'édition)
- mettre à jour dans /etc/smbldap-tools/
- mettre à jour dans /etc/samba/smb.conf
Configuration Webmin
(testé sous Webmin 1.400)
# Debian-specific Webmin patch ln -s libnss-ldap.secret ldap.secret
- LDAP Users and Groups
- Enabled Samba account by default? => Yes
- Show fields for given name and surname? [otherwise "Failed to add user to LDAP database : object class 'inetOrgPerson' requires attribute 'sn'"] => Yes
- Object class to add for given name? [otherwise "objectclass: value #4 invalid per syntax" because webmin will add an empty class] => inetOrgPerson
- Domain SID for Samba3 [necessary?] => S-1-5-21-XXXXXXXXXX-XXXXXXXXX-XXXXXXXXXX
- LDAP object class for Samba groups [necessary?] => sambaGroupMapping (Samba 3 new schema)
- Users and Groups
- Default primary group for new users => "Domain Users"
- Default shell for new users => /bin/false
- LDAP Client
- Root LDAP client password file => /etc/libnss-ldap.secret
Configuration PDC
PDC = Primary Domain Controller = CPD = Contrôleur Principal de Domaine = terminologie microsoft pour dire serveur d'identification
Suivre la configuration LDAP, puis:
# I'm a PDC domain logons = yes # I'm a master browser domain master = yes local master = yes ## <configuration plus agressive> # Au cas où: preferred master = yes os level = 65 # Si pas de Win98, supprimer le port 139 (les déconnexions de WXP sont logguées) #smb ports = 445 # Ne pas activer s'il y a un autre wins sur le réseau: wins support = yes dns proxy = no socket options = TCP_NODELAY ## </configuration plus agressive> # Jonction de machines au domaine: add machine script = /usr/sbin/smbldap-useradd -w "%u" # Homedir logon drive = Z: logon script = %U.bat ## Disable roaming profiles: #logon path = #logon home = # UnDisable roaming profiles: # (default: logon path = \\%N\%U\profile) logon path = \\%h\%U\profile [netlogon] path = /srv/samba/netlogon read only = yes browsable = no comment = Scripts de connexion et Stratégies Systèmes force directory mode = 755 force create mode = 644 # Debian tips: share modes = no guest ok = yes
Dépannage PDC
À tester: désactiver RequireSignOrSeal:
- http://lists.samba.org/archive/samba-technical/2001-July/015345.html
- http://technet2.microsoft.com/windowsserver/en/library/5a01c765-8f1e-4254-8cdc-da4eac56c0581033.mspx?mfr=true
- http://www.mail-archive.com/samba@lists.samba.org/msg40587.html
3 valeurs:
; http://lists.samba.org/archive/samba/2005-July/108896.html ; force Windows XP Professional clients to accept Samba as a PDC [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters] "requiresignorseal"=dword:00000000 "signsecurechannel"=dword:00000000 ; Do not check for user ownership of Roaming Profile Folders [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System] "CompatibleRUPSecurity"=dword:00000001
Configuration de client / jonction domaine NT4
Configuration minimale, dresse une association locale RID->uid dans /var/lib/samba/winbindd_idmap.tdb
:
[global] security = domain workgroup = CHEZMOI idmap uid = 10000-20000 idmap gid = 10000-20000 # Désactiver si plus de 10000 utilisateurs dans le domaine winbind enum users = yes winbind enum groups = yes # Compléter les informations du PDC template homedir = /home/%U template shell = /bin/bash # Ne pas préfixer DOMAINE\ dans les noms d'utilisateurs et de groupes winbind use default domain = yes # Pour les dossiers personnels root preexec = /usr/local/bin/smb_mkhomedir.sh %U
Au niveau système:
- /etc/nsswitch.conf:
sed -i -e 's/^\(passwd:.*$\)/\1 winbind/' \ -e 's/^\(group:.*$\)/\1 winbind/' \ -e 's/^\(shadow:.*$\)/\1 winbind/' \ /etc/nsswitch.conf
- RELANCER LE DÉMON NSCD (name service caching daemon) si vous l'utilisez, sans quoi les changement ne seront pas pris en compte:
/etc/init.d/nscd restart
- Voire le désactiver (ce que recommande [1]):
apt-get delete --purge nscd
- Se connecter au domaine:
net rpc join -Uroot # ou net rpc join -Uroot -Sadresse_ip
Variante, fait une association avec un algorithme déterministe, permettent de partage facilement ces associations entre plusieurs machines:
idmap backend = rid:CHEZMOI-70000-10000
Configuration winbind PAM: seulement nécessaire si besoin d'un login local (ssh, shell, etc.).
Le module est nécessaire (contrairement à une installation LDAP) parce que le PDC ne propose pas de champ de type shadow, mais à la place effectue l'authentification via un défi cryptographique (challenge).
Pour une connexion à un AD (pas reproductible avec Samba, attendre Samba 4 ou patienter sur du PDC type NT4 comme ci-dessus):
security = ads
- configuration kerberos
net ads join
à la place denet rpc join
Voir aussi:
- http://us1.samba.org/samba/docs/man/Samba-Guide/unixclients.html#wdcsdm
- http://www.coagul.org/article.php3?id_article=178
- https://help.ubuntu.com/community/ActiveDirectoryWinbindHowto
Samba + ClamAV
Pour automatiquement vérifier les transferts de fichiers avec un antivirus.
apt-get source samba pushd samba-3.2.5/ sudo apt-get build-dep samba debian/rules configure-stamp pushd source/ make proto popd popd wget http://fastbull.dl.sourceforge.net/sourceforge/openantivirus/samba-vscan-0.3.6b.tar.bz2 tar xjf samba-vscan-0.3.6b.tar.bz2 push samba-vscan-0.3.6b/ sudo apt-get install libmagic-dev ./configure --with-samba-source=/usr/src/samba-3.2.5/source/ make clamav # ERROR - missing system/capability.h sudo make install cp clamav/vscan-clamav.conf /etc/samba/ popd # IN PROGRESS
- http://www.andesi.org/reseau:systeme-antivirus-sur-un-serveur-samba
- http://ubuntuforums.org/showthread.php?p=1101476
Filtrer les avertissements cups
Si vous ne partagez pas d'imprimante, et que vous souhaitez éviter les messages concernant l'impression (ex: Unable to connect to CUPS server localhost:631 - Connection refused) dans les logs, utilisez:
printing = bsd printcap name = /dev/null
Voir aussi
Samba et ms woe
- Passer à Samba 3 ou désactiver l'authentification NTLMv2; attention au paramètre security.
- Désactiver les transactions signées?
- Windows 7 / seven: faire une modification dans la base de registre et utiliser samba > 3.3.7
Liens
- Gestion des utilisateurs, groupes, permissions: concepts d'utilisateurs et de groupes sous Unix et Windows, et correspondances.
- Debian Samba 3 / LDAP / PHP LDAP Admin HOWTO
- Nouveautés Samba: 3.0 3.2 3.4