35. Samba

35.1. Samba, les premiers pas

35.1.1. Installation de Samba


cvanvinc@pinson ~ $ sudo apt-get install samba samba-doc samba-common smbfs smbclient

35.1.2. Modification du fichier de configuration


cvanvinc@pinson ~ $ cat /etc/samba/smb.conf
[global]

workgroup = WORKGROUP
netbios name = debian

os level = 40

domain logons = no
domain master = no
local master = no

Une fois le fichier de configuration créé (ou modifié), utilisez la commande testparm :


cvanvinc@pinson ~ $ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
	netbios name = DEBIAN
	os level = 40
	local master = No
	domain master = No

35.1.3. Redémarrage de Samba


cvanvinc@pinson /media/usb/JournalDeBord $ sudo /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

35.1.4. Les commandes clientes de Samba

Voici les principales commandes que Samba propose :

  • findsmb : permet de lister toutes les machines du réseau répondant aux requêtes SMB name.

  • nmblookup : résoud un nom Netbios vers son adresse IP.

  • smbstatus : affiche les connexions actuelles.

  • rpcclient : client RPC. Envoie une commande RPC à une machine à distance.

  • smbclient : à l'instar de ftp, permet de se connecter à un partage de fichier Windows.

  • smbmount : monte un répertoire partagé par Windows ou Samba sur la machine.

  • net : commande "à tout faire". Englobe de nombreuse fonctionnalité.

35.1.5. Étude approfondie du fichier de configuration

Créez un partage de fichiers et d’imprimantes sur votre machine GNU/Linux et effectuez les manipulations du paragraphe.

En reprenant le fichier de configuration décrit plus haut dans le document, on obtient :


[global]

# Nom du workgroup ou du domaine
workgroup = workgroup
# Nom netbios de la machine
netbios name = debian

# Niveau assez bas (cf. élections)
os level = 40

# Nous ne sommes pas contrôleur du domaine
domain logons = no
# Ni collecteur de liste de machines pour le domaine
domain master = no
# Ni collecteur de liste de machines pour le réseau
local master = no

Pour satisfaire les besoins des questions suivantes (excepté pour les questions 3 et 5), je vais utiliser le réseau de mon Université et exécuter les différentes commandes avec mon propre compte Samba (et non pas sur un serveur Samba local).

  1. Lister les partages d'une machine

    Affichons tout d'abord les machines succeptibles de répondre aux requêtes SMB :

    
cvanvinc@pinson ~ $ findsmb
    
                                    *=DMB
                                    +=LMB
    IP ADDR         NETBIOS NAME     WORKGROUP/OS/VERSION 
    ---------------------------------------------------------------------
    192.168.22.59   CRIPCLS2       [WORKGROUP] [Windows Server 2008 R2 Standard 7600] [Windows Server 2008 R2 Standard 6.1]
    192.168.22.63   ANNAPURNA     *[ZANSKAR] [Unix] [Samba 3.5.6]
    192.168.22.164  RAVEL          [ZANSKAR] [Windows 5.1] [Windows 2000 LAN Manager]
    192.168.22.213  DEBIAN         [WORKGROUP] [Unix] [Samba 3.5.6]
    
    
cvanvinc@pinson ~ $ smbclient -U cvanvinc -L ANNAPURNA
    Enter cvanvinc's password: 
    Domain=[ZANSKAR] OS=[Unix] Server=[Samba 3.5.6]
    
    	Sharename       Type      Comment
    	---------       ----      -------
    	IPC$            IPC       IPC Service (annapurna server)
    	m1i2l           Disk      echange m1i2l
    	l3physique      Disk      echange l3physique
    	m2isidis        Disk      echange isidis
    	m2ins3i         Disk      echange ins3i
    	resultats       Disk      resultat examen
    	donnees         Disk      repertoire donnees
    	print$          Disk      Printer Drivers
    	netlogon        Disk      Network Logon Service
    	Imp_Navier      Printer   HP 3005 dn
    	Imp_Kerisel     Printer   HP 3005 dn
    	Imp_Freyssinet  Printer   HP LaserJet 4000
    	Imp_Caquot      Printer   HP 3015n
    	IMP_218         Printer   Imprimante HP 1300
    	Imp_122         Printer   Laba langues A119
    	IMP_121         Printer   HP LaserJet P4014
    	IMP_119         Printer   HP LaserJet 4050 Series
    	IMP_117         Printer   HP LaserJet 4100 Series
    	Imp_116         Printer   HP LaserJet 4000 Series
    	IMP_114         Printer   HP LaserJet 4050 Series
    	IMP_113         Printer   HP LaserJet 4250
    	IMP_111         Printer   HP LaserJet 4250
    	Imp_110         Printer   IMP_110
    	Imp_108         Printer   HP LaserJet 4050 Series
    	HP_LaserJet_1300n Printer   HP LaserJet 1300n
    	cvanvinc        Disk      Home Directories
    Domain=[ZANSKAR] OS=[Unix] Server=[Samba 3.5.6]
    
    	Server               Comment
    	---------            -------
    	AIL                  
    	ANNAPURNA            annapurna server
    	ASPERGE              
    	AUSTRALIE            
    	BENITIERS            
    	BIGORNEAUX           
    	BROCOLIS             
    	BULOTS               
    	BUSE                 
    	CAMPANULE            
    	CAPUCINE             
    	CAROTTE              
    	CHINE                
    	CHOUX                
    	COQUES               
    	CORAILS              
    	CORNEILLE            
    	COURGETTE            
    	CREVETTES            
    	CROATIE              
    	DUMAS                
    	DVORAK               mozart
    	EDELWEISS            
    	EPINARD              
    	FINLANDE             
    	GLAIEUL              
    	GORGONES             
    	HARICOT              
    	HERON                
    	HIRONDELLE           
    	HOMARDS              
    	IRIS                 
    	ISLANDE              
    	KAZAKHSTAN           
    	LAITUE               
    	LETTONIE             
    	LIN                  
    	LYS                  
    	MADAGASCAR           
    	MERLE                
    	MESANGE              
    	MOLIERE              
    	MONTAIGNE            
    	MOUETTE              
    	NARCISSE             
    	OEILLET              
    	OIGNON               
    	PALOURDES            
    	PETONCLES            
    	PIE                  
    	PIEUVRES             
    	POIREAUX             
    	POIVRON              
    	POLOGNE              
    	POTENTILLE           
    	POULPES              
    	PRAIRES              
    	PRIMEVERE            
    	RABELAIS             
    	RACINE               
    	RONSARD              
    	SEICHES              
    	SLOVENIE             
    	TCHECOSLOVAQUIE      
    	TOMATE               
    	TOPINAMBOUR          
    	VERNE                
    	VIOLETTE             
    	YOUGOSLAVIE          
    	ZOLA                 
    
    	Workgroup            Master
    	---------            -------
    	WORKGROUP            CRB
    	ZANSKAR              ANNAPURNA
    
  2. Se connecter sur un partage de fichiers avec smbclient

    A partir de la liste des partages accessibles sur la machine, connectons-nous sur le dossier "donnees".

    
cvanvinc@pinson ~ $ smbclient -U cvanvinc //ANNAPURNA/donnees
    Enter cvanvinc's password: 
    Domain=[ZANSKAR] OS=[Unix] Server=[Samba 3.5.6]
    smb: \> cd formation\
    smb: \formation\> ls
      .                                   D        0  Fri Feb 24 09:33:38 2012
      ..                                  D        0  Wed Aug 31 12:05:36 2011
      m1_geosciences                      D        0  Wed Nov 17 10:15:43 2010
      l2info                              D        0  Tue Jan  3 13:48:38 2012
      L1info_BD                           D        0  Wed Nov 17 10:12:55 2010
      m1ei                                D        0  Mon Jan  3 11:15:14 2011
      m1_ete                              D        0  Wed Nov 17 10:15:04 2010
      c2i                                 D        0  Mon Jan  9 12:12:22 2012
      Deust1                              D        0  Tue Sep 20 10:36:50 2011
      m1igc                               D        0  Fri Feb  3 13:18:05 2012
      l3e4i                               D        0  Thu Jan 13 13:34:09 2011
      L1CMA                               D        0  Fri Dec 16 11:23:03 2011
      l3staps                             D        0  Tue May  3 16:21:26 2011
      deust_ael2                          D        0  Fri Nov 19 08:21:55 2010
      M1_histoire                        DR        0  Fri Mar 18 14:51:02 2011
      m1_stats                            D        0  Wed Nov 17 10:16:07 2010
      m1histoire                          D        0  Fri Feb 24 13:48:01 2012
      UO_Latex                            D        0  Fri Feb 17 12:18:40 2012
      SDAA                                D        0  Mon Nov 28 15:11:04 2011
      L1Mspi                              D        0  Thu Jan 26 09:03:52 2012
      m1ins3i                             D        0  Mon Mar 12 10:08:14 2012
      l2maths                             D        0  Thu Dec 15 11:04:00 2011
      l2physique-chimie                   D        0  Tue Feb 14 08:57:15 2012
      l2GSI                               D        0  Wed Nov 17 10:15:43 2010
      m2isidis                            D        0  Mon Mar  5 16:40:12 2012
      m2igc                               D        0  Mon Mar 12 15:29:07 2012
      UO_Compta                           D        0  Thu Jan 26 15:05:31 2012
      Examen_L1_BD                        D        0  Wed Nov 17 10:12:55 2010
      l3info                              D        0  Thu Apr 14 09:52:25 2011
      m2i2l                               D        0  Tue Mar  8 15:00:31 2011
      IESP2A                              D        0  Mon Dec  5 14:43:24 2011
      l3physique                          D        0  Wed Nov 17 10:15:54 2010
      m2eip                               D        0  Fri Jan 21 09:26:17 2011
      Orcad                               D        0  Fri Feb 24 09:34:00 2012
      m2environnement                     D        0  Wed Feb 15 08:34:17 2012
      m2ins3i                             D        0  Fri Feb 24 13:28:34 2012
      M1Info                              D        0  Mon Nov 21 13:40:12 2011
      l1staps                             D        0  Tue Jan 31 08:19:00 2012
      m1environnement                     D        0  Fri Feb 24 11:55:46 2012
    
    		58739 blocks of size 4194304. 50775 blocks available
    smb: \formation\> q
    
  3. Monter un partage

    
# smbmount //ANNAPURNA/Work /mnt/samba -o username=cvanvinc
    
  4. Lister les imprimantes d'une machine

    
cvanvinc@pinson ~ $ net rpc printer LIST -U cvanvinc -S ANNAPURNA
    Enter cvanvinc's password:
    listing printers
    printer 1: \\annapurna\Imp_Navier, shared as: Imp_Navier
    printer 2: \\annapurna\Imp_Kerisel, shared as: Imp_Kerisel
    printer 3: \\annapurna\Imp_Freyssinet, shared as: Imp_Freyssinet
    printer 4: \\annapurna\Imp_Caquot, shared as: Imp_Caquot
    printer 5: \\annapurna\IMP_218, shared as: IMP_218
    printer 6: \\annapurna\Imp_122, shared as: Imp_122
    printer 7: \\annapurna\IMP_121, shared as: IMP_121
    printer 8: \\annapurna\IMP_119, shared as: IMP_119
    printer 9: \\annapurna\IMP_117, shared as: IMP_117
    printer 10: \\annapurna\Imp_116, shared as: Imp_116
    printer 11: \\annapurna\IMP_114, shared as: IMP_114
    printer 12: \\annapurna\IMP_113, shared as: IMP_113
    printer 13: \\annapurna\IMP_111, shared as: IMP_111
    printer 14: \\annapurna\Imp_110, shared as: Imp_110
    printer 15: \\annapurna\Imp_108, shared as: Imp_108
    printer 16: \\annapurna\HP_LaserJet_1300n, shared as: HP_LaserJet_1300n
    
  5. Imprimer un fichier avec smbspool

    Prototype : smbspool <job> <user> <title> <copies> <options> <filename>

    
$ smbspool smb://martymac:motdepasse@Windows/Imprimante 1 martymac impression_test 1 "" /etc/crontab
    
  6. Résoudre un nom netbios avec nmblookup

    
cvanvinc@pinson ~ $ nmblookup ANNAPURNA
    querying ANNAPURNA on 192.168.22.255
    192.168.22.63 ANNAPURNA<00>
    

35.2. Samba en tant que serveur autonome

35.2.1. Configuration avancée de Samba

Configuration un peu plus étoffée :


[global]
    # Nom du workgroup ou du domaine
    workgroup = workgroup
    # Nom netbios de la machine
    netbios name = debian

    # Niveau assez bas (cf. élections)
    os level = 40

    # Nous ne sommes pas contrôleur du domaine
    domain logons = no
    # Ni collecteur de liste de machines pour le domaine
    domain master = no
    # Ni collecteur de liste de machines pour le réseau
    local master = no

    # Base de données des comptes
    passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb

    # Authentification via la base de compte locale
    security = user
    # Sécurité
    encrypt passwords = yes

    # Gestion des logs
    log file = /var/log/samba/%m.log
    log level = 2

    # Serveur de temps activé
    time server = yes

    # Interdire l'accès à certain fichiers
    veto files = /lost+found/.recycle/

  1. passdb backend : permet de spécifier où sont stockés les comptes utilisateurs. Ici, tdb est un fichier de type base de données mais il est possible d'utiliser d'autres backends tels que ldap et mysql.

  2. security : permet de sélectionner qui va effectuer l'authentification. La valeur "user" signifie que Samba va se référer au passdb backend spécifié. Il est possible de mettre "domain" pour rediriger les authentification vers un contrôleur de domaine ou "server" pour un autre serveur en paticulier.

  3. encrypt passwords : permet d'activer le chiffrement des mots de passe. Il est conseillé de l'activer à chaque fois (sauf s'il est question de clients sous un Windows inférieur à Windows 95 R2).

  4. log file et log level : permettent respectivement de spécifier le fichier de log utilisé et de préciser le niveau de log souhaité. Noté au passage l'utilisation de la variable %m qui sera interprété par Samba comme le nom Netbios de la machine cliente. Le niveau 2 est correct pour un serveur en production.

  5. time server : active un serveur de temps sur le serveur Samba. Les clients pourront alors se synchroniser avec une commande du type "net time".

  6. veto files : empêche l'accès à certains fichiers ou répertoires du serveur. Ici, il est interdit d'accéder aux fichiers et répertoires lost+found et .recycle (ils doivent être séparés par des / dans la déclaration).

35.2.2. Création d'un partage accessible à tous

La configuration actuelle ne permet pas le partage de données. Ajoutons pour cela quelques lignes pour permettre à tous d'accèder à l'espace de partage /tmp.


    # Dans quel cas mapper une connexion vers un compte anonyme ?
    map to guest = Bad User
    # Un partage tmp accessible à tous

[tmp]
    path = /tmp
    guest ok = yes
    writeable = yes
    browseable = yes

Ce qui nous donne dans son intégralité (/etc/samba/smb.conf) :


[global]
    # Nom du workgroup ou du domaine
    workgroup = workgroup
    # Nom netbios de la machine
    netbios name = debian

    # Niveau assez bas (cf. élections)
    os level = 40

    # Nous ne sommes pas contrôleur du domaine
    domain logons = no
    # Ni collecteur de liste de machines pour le domaine
    domain master = no
    # Ni collecteur de liste de machines pour le réseau
    local master = no

    # Base de données des comptes
    passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb

    # Authentification via la base de compte locale
    security = user
    # Sécurité
    encrypt passwords = yes

    # Gestion des logs
    log file = /var/log/samba/%m.log
    log level = 2

    # Serveur de temps activé
    time server = yes

    # Interdire l'accès à certain fichiers
    veto files = /lost+found/.recycle/

    # Dans quel cas mapper une connexion vers un compte anonyme ?
    map to guest = Bad User
    # Un partage tmp accessible à tous

[tmp]
    path = /tmp
    guest ok = yes
    writeable = yes
    browseable = yes

Vérification du fichier de configuration avec testparm :


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
Processing section "[tmp]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[global]
	netbios name = DEBIAN
	map to guest = Bad User
	passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb
	log level = 2
	log file = /var/log/samba/%m.log
	time server = Yes
	os level = 40
	local master = No
	domain master = No
	veto files = /lost+found/.recycle/

[tmp]
	path = /tmp
	read only = No
	guest ok = Yes

Redémarrage du serveur Samba :


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ sudo /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.

Maintenant, vérifions que cela fonctionne parfaitement :


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ findsmb

                                *=DMB
                                +=LMB
IP ADDR         NETBIOS NAME     WORKGROUP/OS/VERSION 
---------------------------------------------------------------------
192.168.1.1     LIVEBOX        [MSHOME] [Unix] [Samba 2.2.12]
192.168.1.12    DEBIAN         [WORKGROUP] [Unix] [Samba 3.5.6]

Ah ba tiens ! J'avais jamais remarqué que ma Livebox permettait directement le partage de données.


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ smbclient -N -L DEBIAN
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]

	Sharename       Type      Comment
	---------       ----      -------
	tmp             Disk      
	IPC$            IPC       IPC Service (Samba 3.5.6)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]

	Server               Comment
	---------            -------
	DEBIAN               Samba 3.5.6

	Workgroup            Master
	---------            -------
	WORKGROUP            


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ smbclient -N //DEBIAN/tmp
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
smb: \> put 
arp1.png               index_multi_page/      JournalDeBord.junk/    Makefile               map2.svg               perl2.png              style.css              
.goutputstream-6A2V9V  JournalDeBord/         JournalDeBord.xml      map1.svg               perl1.png              pt1.png                
smb: \> put style.css styleDansTmp.css
putting file style.css as \styleDansTmp.css (351,9 kb/s) (average 351,9 kb/s)
smb: \> ls
  .                                   D        0  Fri Mar 16 13:32:50 2012
  ..                                  D        0  Tue Jan 24 21:17:34 2012
  keyring-A7RaFb                      D        0  Fri Mar 16 10:39:35 2012
  styleDansTmp.css                    A     3603  Fri Mar 16 13:32:50 2012
  .ICE-unix                          DH        0  Fri Mar 16 10:39:34 2012
  virtual-vanvincq.KWSaIz             D        0  Fri Mar 16 10:39:46 2012
  plugtmp                             D        0  Fri Mar 16 13:25:21 2012
  orbit-Debian-gdm                    D        0  Fri Mar 16 10:39:33 2012
  .X0-lock                           HR       11  Fri Mar 16 10:38:06 2012
  seahorse-R83SRy                     D        0  Fri Mar 16 10:39:34 2012
  orbit-root                          D        0  Fri Mar 16 13:12:35 2012
  orbit-vanvincq                      D        0  Fri Mar 16 13:09:05 2012
  gedit.vanvincq.2162175761           A        0  Fri Mar 16 13:09:05 2012
  .X11-unix                          DH        0  Fri Mar 16 10:38:06 2012
  ssh-bByfbs2185                      D        0  Fri Mar 16 10:39:33 2012

		57715 blocks of size 4194304. 52559 blocks available
smb: \> q

Bien, tout fonctionne comme il se doit. Passons maintenant à la suite, c'est-à-dire la création d'un partage avec authentification.

35.2.3. Création d’un partage avec authentification

Commençons par modifier le fichier de configuration pour ajouter un partage données qui pointe vers /data/samba/donnees.

Voici la nouvelle version du fichier de configuration (/etc/samba/smb.conf) :


[global]
	# Nom du workgroup ou du domaine
	workgroup = workgroup
	# Nom netbios de la machine
	netbios name = debian

	# Niveau assez bas (cf. élections)
	os level = 40

	# Nous ne sommes pas contrôleur du domaine
	domain logons = no
	# Ni collecteur de liste de machines pour le domaine
	domain master = no
	# Ni collecteur de liste de machines pour le réseau
	local master = no

	# Base de données des comptes
	passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb

	# Authentification via la base de compte locale
	security = user
	# Sécurité
	encrypt passwords = yes

	# Gestion des logs
	log file = /var/log/samba/%m.log
	log level = 2

	# Serveur de temps activé
	time server = yes

	# Interdire l'accès à certain fichiers
	veto files = /lost+found/.recycle/

	# Dans quel cas mapper une connexion vers un compte anonyme ?
	map to guest = Bad User
	# Un partage tmp accessible à tous

[tmp]
	path = /tmp
	guest ok = yes
	writeable = yes
	browseable = yes

[donnees]
	path = /data/samba/donnees
	comment = Partage Données
	writeable = yes
	browsable = yes
	guest ok = no
	# Partage accessible uniquement au groupe sambausers
	valid users = @sambausers

L'accès à données est interdit aux comptes invités. Seuls les membres du groupe sambausers pourront se connecter.

35.2.3.1. Gestion des comptes

35.2.3.1.1. Création de comptes

La première étape est de créer le groupe sambausers. Nous utiliserons le GID 513.


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo groupadd -g 513 sambausers

vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ grep sambausers /etc/group
sambausers:x:513:

Création de deux utilisateurs : martymac et fred.


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo useradd -g sambausers martymac
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo useradd fred

vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ grep -E "martymac|fred" /etc/passwd
martymac:x:1011:513::/home/martymac:/bin/sh
fred:x:1012:1012::/home/fred:/bin/sh

Comme on peut le constater, seul martymac appartient au groupe sambausers.

Maintenant, ajoutons ces deux nouveaux utilisateurs au fichier local smbpasswd (/var/lib/samba/mypassdb.tdb).


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo smbpasswd -a martymac
New SMB password:
Retype new SMB password:
Added user martymac.
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo smbpasswd -a fred
New SMB password:
Retype new SMB password:
Added user fred.

vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo pdbedit -Lv
---------------
Unix username:        martymac
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-247944885-3016294819-2961749457-1000
Primary Group SID:    S-1-5-21-247944885-3016294819-2961749457-513
Full Name:            
Home Directory:       \\debian\martymac
HomeDir Drive:        
Logon Script:         
Profile Path:         \\debian\martymac\profile
Domain:               DEBIAN
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          9223372036854775807 seconds since the Epoch
Kickoff time:         9223372036854775807 seconds since the Epoch
Password last set:    sam., 17 mars 2012 10:50:11 CET
Password can change:  sam., 17 mars 2012 10:50:11 CET
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
---------------
Unix username:        fred
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-247944885-3016294819-2961749457-1001
Primary Group SID:    S-1-5-21-247944885-3016294819-2961749457-513
Full Name:            
Home Directory:       \\debian\fred
HomeDir Drive:        
Logon Script:         
Profile Path:         \\debian\fred\profile
Domain:               DEBIAN
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          9223372036854775807 seconds since the Epoch
Kickoff time:         9223372036854775807 seconds since the Epoch
Password last set:    sam., 17 mars 2012 10:50:20 CET
Password can change:  sam., 17 mars 2012 10:50:20 CET
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Création du dossier de partage :


vanvincq@CP2L ~ $ sudo mkdir -p /data/samba/donnees

Il est maintenant possible de se connecter sur l'espace de partage pour tous les membres du groupe sambausers, autrement dit seul martymac peut y accéder. Vérifions cela :


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ smbclient -U martymac //debian/donnees
Enter martymac's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
smb: \> ls
  .                                   D        0  Sat Mar 17 14:06:49 2012
  ..                                  D        0  Sat Mar 17 14:06:49 2012

		57715 blocks of size 4194304. 52480 blocks available
smb: \> mkdir test
NT_STATUS_ACCESS_DENIED making remote directory \test
smb: \> q

Pourquoi un ACCESS_DENIED ? Car j'ai oublié de changer les droits sur le dossier nouvellement créé. Réglons ça sur le champ !


vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ sudo chgrp -R sambausers /data/
vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ sudo chmod -R 774 /data/

vanvincq@CP2L /media/Emulation/Master-2-ISIDIS/CPLL/JournalDeBord $ sudo ls -Rl /data/
/data/:
total 4
drwxrwxr-- 3 root sambausers 4096 17 mars  14:06 samba

/data/samba:
total 4
drwxrwxr-- 2 root sambausers 4096 17 mars  14:27 donnees

/data/samba/donnees:
total 0

Voilà, le problème est réglé. Nous pouvons maintenant réessayer à nouveau.


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ smbclient -U martymac //debian/donnees
Enter martymac's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
smb: \> ls
  .                                   D        0  Sat Mar 17 14:27:04 2012
  ..                                  D        0  Sat Mar 17 14:06:49 2012

		57715 blocks of size 4194304. 52480 blocks available
smb: \> mkdir test
smb: \> cd test\
smb: \test\> pwd
Current directory is \\debian\donnees\test\
smb: \test\> q

Malheureusement pour Fred, l'accès à ce partage lui est interdit.


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ smbclient -U fred //debian/donnees
Enter fred's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.5.6]
tree connect failed: NT_STATUS_ACCESS_DENIED

vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ tail /var/log/samba/debian.log
[2012/03/17 14:39:10.005417,  1] smbd/service.c:1070(make_connection_snum)
  debian (::ffff:192.168.1.10) connect to service donnees initially as user martymac (uid=1011, gid=513) (pid 3560)
[2012/03/17 14:39:11.673941,  1] smbd/service.c:1251(close_cnum)
  debian (::ffff:192.168.1.10) closed connection to service donnees
[2012/03/17 14:39:19.027796,  2] auth/auth.c:304(check_ntlm_password)
  check_ntlm_password:  authentication for user [fred] -> [fred] -> [fred] succeeded
[2012/03/17 14:39:19.029136,  2] smbd/service.c:598(create_connection_server_info)
  user 'fred' (from session setup) not permitted to access this share (donnees)
[2012/03/17 14:39:19.029162,  1] smbd/service.c:678(make_connection_snum)
  create_connection_server_info failed: NT_STATUS_ACCESS_DENIED
35.2.3.1.2. Suppression de comptes

L'utilisateur Fred ne nous servira plus par la suite, nous pouvons le supprimer en deux étapes. Le supprimer de la base de données Samba et ensuite le supprimer du système.


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo smbpasswd -x fred
[sudo] password for vanvincq: 
Deleted user fred.

vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo userdel fred
35.2.3.1.3. Lister les comptes créés

Les utilisateurs connus de Samba peuvent être listés en utilisant la commande pdbedit. Voici un exemple d'utilisation classique :


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo pdbedit -L
martymac:1011:

35.2.4. La gestion des droits

35.2.4.1. Deux types de droit

Dans Samba, il y a deux types de droit :

  • les droits liés au partage : "qui peut se connecter sur quoi ?",

  • les droits liés au système de fichier : "qui peut faire quoi une fois connecté ?".

35.2.4.2. Options de configuration et gestion des droits

Samba fournit de nombreuses options pour gérer les droits au niveau du partage comme au niveau du système de fichier.

35.2.4.2.1. Droits virtuels au niveau de la connexion

  • read only : lecture seule sur un partage (inverse de writeable)

    e.g : read only = yes

  • valid users : déclare les utilisateurs et groupes autorisés à se connecter (inverse de invalid users)

    e.g : valid users = martymac, fred, @sambausers, @autregroupe

  • force user, force group : force la connexion en tant que l’utilisateur ou groupe spécifié

    e.g : force user = martymac

  • read list, write list : déclare les utilisateurs ou groupes autorisés à lire ou écrire

    e.g : read list = fred ex : write list = @sambausers

  • guest ok : autorise la connexion avec un compte invité

    e.g : guest ok = yes

  • guest only : interdit la connexion avec un compte autre qu'invité

    e.g : guest only = yes

  • guest account : spécifie le compte Unix à utiliser lors d'une connexion en invité (par défaut nobody)

    e.g : guest account = martymac

  • map to guest : spécifie quand considérer qu’un utilisateur est invité

    e.g : map to guest = bad user

35.2.4.2.2. Droits au niveau du système de fichiers

  • create mode : droits placés sur un fichier lors de sa création

    e.g : create mode = 770

  • directory mode : droits placés sur un répertoire lors de sa création

    e.g : directory mode = 2770

  • security mode : pour un fichier, bits sur lesquels peut agir l’utilisateur

    e.g : security mode = 700

  • directory security mode : pour un répertoire, bits sur lesquels peut agir l'utilisateur

    e.g : directory security mode = 0700

35.2.5. L'impression et le partage d'imprimantes

Nous allons maintenant activer le partage d'imprimantes via CUPS. CUPS est un service d’impression "nouvelle génération" destiné à remplacer les anciens systèmes tels LPD.

Une fois cups installé (il est souvent installé par défaut), il est possible d'utiliser l'interface dédié pour le paramétrage (127.0.0.1:631). Il faut déclarer les imprimantes en mode RAW. Ce mode est important car Samba et CUPS ne vont servir que de relais d'impression. Le driver utilisé sera du côté de la machine cliente, si bien que les informations transmises seront déjà correctement formatées pour l’imprimante.

Une fois l'imprimante ajoutée sous CUPS, il faut revenir à Samba car il n'en a pas encore connaissance. Il faut pour cela compléter la section globale du fichier de configuration.

Ce qui nous donne (/etc/samba/smb.conf) :


[global]
	# Nom du workgroup ou du domaine
	workgroup = workgroup
	# Nom netbios de la machine
	netbios name = debian

	# Niveau assez bas (cf. élections)
	os level = 40

	# Nous ne sommes pas contrôleur du domaine
	domain logons = no
	# Ni collecteur de liste de machines pour le domaine
	domain master = no
	# Ni collecteur de liste de machines pour le réseau
	local master = no

	# Base de données des comptes
	passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb

	# Authentification via la base de compte locale
	security = user
	# Sécurité
	encrypt passwords = yes

	# Gestion des logs
	log file = /var/log/samba/%m.log
	log level = 2

	# Serveur de temps activé
	time server = yes

	# Interdire l'accès à certain fichiers
	veto files = /lost+found/.recycle/

	# Dans quel cas mapper une connexion vers un compte anonyme ?
	map to guest = Bad User
	# Un partage tmp accessible à tous

	# Impression
	printing = cups
	printcap name = cups
	load printers = yes

[tmp]
	path = /tmp
	guest ok = yes
	writeable = yes
	browseable = yes

[donnees]
	path = /data/samba/donnees
	comment = Partage Données
	writeable = yes
	browsable = yes
	guest ok = no
	# Partage accessible uniquement au groupe sambausers
	valid users = @sambausers

# Partage d'imprimantes (configurées en "raw" sous CUPS)
[printers]
	comment = Partage d'imprimantes
	path = /data/spool
	printable = yes
	browseable = yes
	guest ok = no
	valid users = @sambausers

La section est complétée en spécifiant le système d'impression utilisé ("printing" et "printcap name") ainsi qu'en demandant explicitement à Samba de charger toutes les imprimantes connues ("load printers").

De cette manière, Samba va créer dynamiquement, lors de son démarrage, un partage pour chaque imprimante CUPS déclarée. Le partage [printers] permet de configurer de manière globale ces imprimantes : "path" permet de préciser le répertoire de spool (le répertoire où sont stockés temporairement les fichiers en cours d'impression) et "printable" précise que ce partage est un partage d’impression.

Il ne faut pas oublier de créer le répertoire spool :


vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo mkdir -p /data/spool
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo chmod 775 /data/spool
vanvincq@CP2L ~/Bureau/CPLL/JournalDeBord $ sudo chgrp sambausers /data/spool

35.2.6. Partage d'imprimantes génériques avec CUPS-PDF

N'ayant pu véritablement tester le partage d'imprimante (imprimante personnelle capricieuse), je décide de retenter l'expérience avec cups-pdf.

Je me trouve, à l'heure où j'écris ces lignes, dans mon Université alors autant adapter un peu mon fichier /etc/samba/smb.conf.


cvanvinc@pinson ~ $ id
uid=2498(cvanvinc) gid=6052(m2isidis) groupes=6052(m2isidis)

Bien, je me trouve dans le groupe m2isidis. Installons maintenant cups-pdf :


cvanvinc@pinson ~ $ sudo apt-get install cups-pdf
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
[...]

Une fois installée, il n'y a pas besoin de paramétrer grand chose, si ce n'est l'endroit où doit être enregistré le fichier PDF généré après une impression.


cvanvinc@pinson /media/usb/CPLL/JournalDeBord $ grep ^Out /etc/cups/cups-pdf.conf
Out ${HOME}/PDF

Bien, maintenant passons au fichier de configuration. Je reprends le même que précédemment mais en tronquant le groupe sambausers par m2isidis. De plus, je me rajoute en tant que nouvel utilisateur Samba.


cvanvinc@pinson /var/lib/samba $ sudo pdbedit -a cvanvinc
new password:
retype new password:
Unix username:        cvanvinc
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-2092882556-1920855315-2644241522-1000
Primary Group SID:    S-1-5-21-2092882556-1920855315-2644241522-513
Full Name:            vanvincq clement
Home Directory:       \\debian\cvanvinc
HomeDir Drive:        
Logon Script:         
Profile Path:         \\debian\cvanvinc\profile
Domain:               DEBIAN
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    mar., 27 mars 2012 16:26:30 CEST
Password can change:  mar., 27 mars 2012 16:26:30 CEST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

cvanvinc@pinson /var/lib/samba $ sudo pdbedit -L
cvanvinc:2498:vanvincq clement

[global]
	# Nom du workgroup ou du domaine
	workgroup = workgroup
	# Nom netbios de la machine
	netbios name = debian

	# Niveau assez bas (cf. élections)
	os level = 40

	# Nous ne sommes pas contrôleur du domaine
	domain logons = no
	# Ni collecteur de liste de machines pour le domaine
	domain master = no
	# Ni collecteur de liste de machines pour le réseau
	local master = no

	# Base de données des comptes
	passdb backend = tdbsam:/var/lib/samba/mypassdb.tdb

	# Authentification via la base de compte locale
	security = user
	# Sécurité
	encrypt passwords = yes

	# Gestion des logs
	log file = /var/log/samba/%m.log
	log level = 2

	# Serveur de temps activé
	time server = yes

	# Interdire l'accès à certain fichiers
	veto files = /lost+found/.recycle/

	# Dans quel cas mapper une connexion vers un compte anonyme ?
	map to guest = Bad User
	# Un partage tmp accessible à tous

	# Impression
	printing = cups
	printcap name = cups
	load printers = yes

[tmp]
	path = /tmp
	guest ok = yes
	writeable = yes
	browseable = yes

[donnees]
	path = /data/samba/donnees
	comment = Partage Données
	writeable = yes
	browsable = yes
	guest ok = no
	# Partage accessible uniquement au groupe sambausers
	valid users = @sambausers

# Partage d'imprimantes (configurées en "raw" sous CUPS)
[printers]
	comment = Partage d'imprimantes
	path = /data/spool
	printable = yes
	browseable = yes
	guest ok = no
	valid users = @m2isidis

Un restart plus tard, voyons un peu la situation :


cvanvinc@pinson ~ $ findsmb 

                                *=DMB
                                +=LMB
IP ADDR         NETBIOS NAME     WORKGROUP/OS/VERSION 
---------------------------------------------------------------------
192.168.22.63   ANNAPURNA     *[ZANSKAR] [Unix] [Samba 3.5.6]
192.168.22.213  DEBIAN         [WORKGROUP] [Unix] [Samba 3.5.6]

cvanvinc@pinson ~ $ net rpc printer LIST -U cvanvinc -S DEBIAN
Enter cvanvinc's password:
listing printers
printer 1: \\debian\PDF, shared as: PDF
printer 2: \\debian\IMP_108, shared as: IMP_108

Bien, l'imprimante de cups-pdf est partagée. L'autre imprimante, à savoir IMP_108, est celle située dans ma salle actuelle, la 108.

Je change mon mot de passe actuel pour les besoins du test :


cvanvinc@pinson ~ $ smbpasswd -U cvanvinc
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user cvanvinc

Premier essai :


cvanvinc@pinson ~ $ sudo smbspool smb://cvanvinc:azerty@WORKGROUP/debian/PDF 1 cvanvinc "impression_test" 1 "" /etc/samba/smb.conf
added interface eth0 ip=fe80::21c:c0ff:fefb:de32%eth0 bcast=fe80::ffff:ffff:ffff:ffff%eth0 netmask=ffff:ffff:ffff:ffff::
added interface eth0 ip=192.168.22.213 bcast=192.168.22.255 netmask=255.255.255.0
ERROR: Tree connect failed (NT_STATUS_BAD_NETWORK_NAME)
DEBUG: get_exit_code(cli=0xb8bff7b0, nt_status=c00000cc)
ERROR: Session setup failed: NT_STATUS_LOGON_FAILURE
DEBUG: get_exit_code(cli=0xb8bff7b0, nt_status=c000006d)
ATTR: auth-info-required=username,password
ERROR: Tree connect failed (NT_STATUS_ACCESS_DENIED)
DEBUG: get_exit_code(cli=0xb8bffbb8, nt_status=c0000022)
ATTR: auth-info-required=username,password
ERROR: Tree connect failed (NT_STATUS_ACCESS_DENIED)
DEBUG: get_exit_code(cli=0xb8bffbb8, nt_status=c0000022)
ATTR: auth-info-required=username,password

Cela ne fonctionne pas. Mais c'est normal puisqu'il n'y a pas /data/spool. Modifions cela et réessayons :


cvanvinc@pinson ~ $ sudo smbspool smb://cvanvinc:azerty@WORKGROUP/debian/PDF 1 cvanvinc "impression_test" 1 "" /etc/samba/smb.conf
added interface eth0 ip=fe80::21c:c0ff:fefb:de32%eth0 bcast=fe80::ffff:ffff:ffff:ffff%eth0 netmask=ffff:ffff:ffff:ffff::
added interface eth0 ip=192.168.22.213 bcast=192.168.22.255 netmask=255.255.255.0
Got a positive name query response from 192.168.22.213 ( 192.168.22.213 )
DEBUG: Connected with username/password...

cvanvinc@pinson ~ $ ls ${HOME}/PDF
smbprn_00000001_Remote_Downlevel_Document_impression_test.pdf

Bien, tout fonctionne parfaitement. Maintenant effectuons un dernier test au cas où. Modifions le fichier /etc/samba/smb.conf en remplaçant @m2isidis par @bidon (sans oublier de redémarrer le serveur).


cvanvinc@pinson ~ $ sudo smbspool smb://cvanvinc:azerty@WORKGROUP/debian/PDF 1 cvanvinc "impression_test" 1 "" /etc/samba/smb.conf
added interface eth0 ip=fe80::21c:c0ff:fefb:de32%eth0 bcast=fe80::ffff:ffff:ffff:ffff%eth0 netmask=ffff:ffff:ffff:ffff::
added interface eth0 ip=192.168.22.213 bcast=192.168.22.255 netmask=255.255.255.0
ERROR: Tree connect failed (NT_STATUS_ACCESS_DENIED)
DEBUG: get_exit_code(cli=0xb85117b8, nt_status=c0000022)
ATTR: auth-info-required=username,password
ERROR: Session setup failed: NT_STATUS_LOGON_FAILURE
DEBUG: get_exit_code(cli=0xb85117b8, nt_status=c000006d)
ATTR: auth-info-required=username,password
ERROR: Tree connect failed (NT_STATUS_ACCESS_DENIED)
DEBUG: get_exit_code(cli=0xb8511bc0, nt_status=c0000022)
ATTR: auth-info-required=username,password
ERROR: Tree connect failed (NT_STATUS_ACCESS_DENIED)
DEBUG: get_exit_code(cli=0xb8511bc0, nt_status=c0000022)
ATTR: auth-info-required=username,password