cvanvinc@pinson ~ $ sudo apt-get install samba samba-doc samba-common smbfs smbclient
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
cvanvinc@pinson /media/usb/JournalDeBord $ sudo /etc/init.d/samba restart
Stopping Samba daemons: nmbd smbd.
Starting Samba daemons: nmbd smbd.
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é.
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).
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
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
Monter un partage
# smbmount //ANNAPURNA/Work /mnt/samba -o username=cvanvinc
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
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
Résoudre un nom netbios avec nmblookup
cvanvinc@pinson ~ $ nmblookup ANNAPURNA
querying ANNAPURNA on 192.168.22.255
192.168.22.63 ANNAPURNA<00>
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/
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.
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.
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).
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.
time server : active un serveur de temps sur le serveur Samba. Les clients pourront alors se synchroniser avec une commande du type "net time".
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).
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.
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.
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
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
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:
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é ?".
Samba fournit de nombreuses options pour gérer les droits au niveau du partage comme au niveau du système de fichier.
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
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
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
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