%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Copyright (c) 2004-2005 eVoLiX. Tous droits reserves.% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Samba} \section{Présentation} SAMBA est un logiciel libre qui met en oeuvre des services de type partage de fichiers ou d'imprimante pour des clients SMB/CIFS. Il permet une interopératibilité entre les serveurs Linux/Unix et les clients Microsoft Windows.\\ ~\\ \textbf{SMB (\textit{Server Message Block})} est un protocole réseau pour le partage fichiers, imprimantes, ports séries entre différentes machines. Inventé à l'origine par IBM, il fut repris et largement modifié par Microsoft. Il est renommé en CIFS en 1998. \textbf{CIFS (\textit{Common Internet File System})} est le successeur du protocole réseau SMB apportant son lot de nouvelles fonctionnalités : liens, fichiers de grande taille, etc.\\ SMB/CIFS utilise depuis le début des implémentations de NetBIOS (NetBEUI, NBT). NBT (NetBIOS over TCP/IP), décrit dans les RFC 1001\footnote{http://www.ietf.org/rfc/rfc1001.txt} et 1002\footnote{http://www.ietf.org/rfc/rfc1002.txt}, est désormais utilisé sur les machines Windows 2000, XP et 2003 Server.\\ SMB/CIFS utilise l'architecture client/serveur. Ainsi le client envoie par exemple, un message d'ouverture de fichier au serveur. Le serveur vérifie que la requête est légale, que les droits sont corrects puis exécute (ou non) la requête et renvoie une notification au client. Le client, grâce à la notification, connait l'état de sa demande. Parmi les nombreuses opérations disponibles (qui diffèrent selon les versions) : File access, File and record locking, Safe file caching, File change notification, Protocol negotiation, Extended file attribute handling, Batched requests, Unicode support, etc. %NetBIOS (Network Basic Input Output System) et ses adaptations %Name Service %Session Service %Datagram Service %NBNS (NetBIOS Name Server) -> serveur WINS %NBDD (Netbios Datagram Distribution) -> "never worked" !? \section{Noms NetBIOS} Chaque serveur SMB/CIFS possède un nom NetBIOS. Les noms NetBIOS sont des noms "human readable" assignés à chaque machine. D'une longueur maximale de 15 caractères, ils peuvent contenir les caractères suivants~: \begin{verbatim} a-z, A-Z, 0-9 et ! @ # $ % ^ & ( ) - ' { } . ~ " \end{verbatim} Ce sont les noms généralement visibles dans le "voisinage réseau" des systèmes Windows; un service de résolution des noms NetBIOS, comparable au service DNS, permet l'utilisation directe de ces noms.\\ Chaque client s'annonce/recherche en "broadcast" sur son sous-réseau et/ou communique avec un serveur de noms NetBIOS (NBNS) alias serveur WINS. Ainsi on peut distinguer plusieurs modes de fonctionnement~:\\ \begin{itemize} \item Broadcast seulement (B-Node) \item NBNS seulement (P-Node) \item premièrement Broadcast et NBNS seulement si aucune réponse en Broadcast (M-Node) \item NBNS puis Broadcast uniquement si le serveur ne répond pas (H-Node) \end{itemize} ~\\ Lien~: \url{http://www.codefx.com/CIFS\_Explained.htm} %http://lists.nocat.net/pipermail/nocat/2004-June/005019.html %http://www.windowsnetworking.com/kbase/WindowsTips/WindowsNT/RegistryTips/Network/TCPNetBIOSBroadcastPerformanceRegistrySettings.html \section{Installation} \subsection{À partir des sources} On peut utiliser la méthode classique de recompilation à partir des sources~: \begin{verbatim} $ ./configure [options] $ make # make install \end{verbatim} \subsection{Par paquets} Sous Debian, les paquets principaux à installer sont~:\\ ~\\ \textbf{samba-common} : fichiers principaux pour Samba\\ \textbf{samba} : serveur SMB/CIFS\\ ~\\ \emph{Quelques dépendances~:} \begin{center} \begin{tabular}{|c|c|} \hline libc6 :& librairies "GNU C"\\ \hline libacl1 :& librairie pour les ACL (Access control list)\\ \hline libattr1 :& librairie pour les attributs spécifiques\\ \hline libcupsys2-gnutls10 :& librairies CUPS (Common UNIX Printing System)\\ \hline libkrb53 :& librairies Kerberos\\ \hline libldap2 :& librairies OpenLDAP\\ \hline \end{tabular} \end{center} ~\\ \section{Configuration} On peut donc installer le logiciel Samba sur des machines Linux/Unix. Cela permet de faire passer notre machine pour un serveur SMB/CIFS sur un réseau Microsoft. Concrètement, cela offre aux machines Windows les fonctionnalités suivantes~:\\ \begin{itemize} \item serveur de fichiers \item partage d'imprimantes \item serveur d'authentification \item serveur WINS \end{itemize} ~\\ Pour configurer Samba depuis une interface web, on peut utiliser \texttt{swat} qui est intégré à Samba. Sous Debian, on devra installer le paquet \texttt{swat} et activer le service grâce au superserveur \texttt{inetd}. Pour cela, il faut décommenter une ligne dans le fichier \texttt{/etc/inet.conf} ~: \begin{verbatim} # update-inetd --enable swat \end{verbatim} On aura donc la ligne suivante dans le fichier \texttt{/etc/inet.conf}~: \begin{verbatim} swat stream tcp nowait.400 root /usr/sbin/tcpd /usr/sbin/swat \end{verbatim} On peu également utiliser \texttt{xinetd} et on aura dans le fichier \texttt{xinet.conf}~: \begin{verbatim} service swat { port = 901 socket_type = stream wait = no only_from = localhost user = root server = /usr/sbin/swat log_on_failure += USERID disable = no } \end{verbatim} Et l'on pourra se connecter à l'interface grâce à un navigateur web sur l'adresse \textit{http://serveur-samba:901} et en précisant son mot de passe \textit{root}. Notons que l'on peut restreindre les postes qui peuvent se connecter (notamment par \texttt{iptables}) ou encore sécuriser la connexion en utilisant \texttt{stunnel}.\\ ~\\ On notera que l'utilisation de swat peut être incompatible avec certaines configurations, sous peine de perdre une partie du fichier de configuration \texttt{smb.conf}.\\ ~\\ On peut également utiliser le module Samba de Webmin\footnote{\url{http://www.webmin.com/}} (paquet \texttt{webmin-samba}) qui permet également une configuration par interface graphique.\\ ~\\ Ces interfaces de configuration ne font que modifier automatiquement le fichier de configuration principal qui est \texttt{smb.conf}. Afin de maîtriser complètement la configuration et éventuellement accéder à des options non disponibles depuis une interface graphique, on éditera \texttt{smb.conf} pour y spécifier les options qui nous conviennent. \subsection{Serveur de fichiers} Pour une utilisation en serveur de fichiers avec authentification, on utilisera la configuration suivante~: \begin{verbatim} [global] workgroup: NOM_DOMAINE netbios name: NOM_MACHINE server string: Mon ptit serveur samba security = user guest account = nobody [public] comment = Partage public path = /samba/tmp public = yes browseable = yes writable = yes \end{verbatim} Pour ne pas avoir d'authentification, il suffira de changer l'option "security = user" (orienté authentification) en "security = share" (orienté partage public). Une autre option disponible est "security = domain" qui s'utilise si le serveur Samba est client d'un autre contrôleur de domaine.\\ \textbf{Remarque~:} en mode USER, un mot de passe sera demandé depuis Windows pour tous les partages (même "guest ok"). On peut éviter cela en utilisant l'option "map to guest". Notez que cette option n'est pas nécessaire pour les clients "smblient" qui n'auront pas besoin de mot de passe en mode USER pour les partages publics~!\\ Il reste ensuite à gérer les droits en se servant des droits UNIX et des options relatives aux droits pour les partages (public, writeable, read only, create mode, write list, etc.) Bien noter que les droits UNIX sont prioritaires sur les droits Samba. \subsection{Contrôleur de domaine} L'utilisation de Samba en tant que contrôleur de domaine permet de centraliser les authentifications pour les ouvertures de session Windows. Il peut également permettre de stocker les profils utilisateurs.\\ Pour gérer uniquement les authentifications pour les sessions, on utilisera la configuration suivante~:\\ \begin{verbatim} [global] workgroup = SAMBATEST2 netbios name = MACHINE2 server string = bla security = user guest account = nobody domain logons = yes preferred master = yes logon path = logon home = \end{verbatim} Attention, il faut ajouter chaque machine que l'on veut joindre au domaine (voir plus bas).\\ ~\\ On gérera donc les utilisateurs directement sur le serveur Samba (voir plus bas). On pourra bien sûr utiliser en plus des partages de fichiers, sachant que l'authentification de session sera utilisée pour accéder à ces partages (donc pas de login ni mot de passe à retaper).\\ Note~: un message d'avertissement peut-être affiché lors de la première connexion d'un utilisateur. Il signale simplement qu'aucun répertoire utilisateur n'est présent localement et qu'il va en créer un.\\ Pour gérer le stockage des profils utilisateurs, on ajoutera des partages pour stocker ces répertoires. Attention, la gestion des profils pour Windows 9x/Me diffère de NT/200x/XP. On utilisera la configuration suivante~:\\ \begin{verbatim} [global] workgroup = SAMBATEST2 netbios name = MACHINE2 server string = bla security = user guest account = nobody domain logons = yes preferred master = yes logon path = \\%L\ntprofiles logon home = \\%L\9xprofiles logon script = %U.bat [netlogon] comment = Repertoires scripts path = /samba/netlogon browseable = No [9xprofiles] comment = Profils Windows 9x path = /samba/9xprofiles/%U browseable = No read only = No [ntprofiles] comment = Profils Windows NT path = /samba/ntprofiles/%U browseable = No read only = No \end{verbatim} On pourra lancer un script à la connexion d'un utilisateur avec l'option "logon script". Ce script peut même être différent selon les utilisateurs (par exemple en le nommant "\%U.bat") \section{Gestion des utilisateurs} %NTLM : http://davenport.sourceforge.net/ntlm.html %=> en gros, client envoie son mot de passe au serveur pour s'authentifier %NTLM remplacé par Kerberos depuis Windows 2000 (mais toujours présent) %http://www.microsoft.com/windows2000/techinfo/howitworks/security/kerberos.asp %http://www.windowsitlibrary.com/Content/617/06/1.html La gestion des utilisateurs au niveau de Samba peut se faire de différentes façons~: fichier smbpasswd, stockage TDB, serveur MySQL, annuaire LDAP, NIS+, etc. On spécifie ce choix grâce à l'option "passdb backend" qui permet ainsi respectivement smbpasswd, tdbsam, mysql, ldapsam, nisplussam. Par défaut, c'est smbpasswd.\\ ~\\ On pourra administrer la base de données d'utilisateurs avec la commande "pedit" (uniquement accessible à root) ou "smbpasswd" (semblable à la fameuse commande "passwd")~.\\ Exemples~: \begin{verbatim} # smbpasswd -a user # pdbedit -L -v user \end{verbatim} \subsection{Utilisation avec smbpasswd ou tdbsam} Les utilisateurs SAMBA doivent être des utilisateurs UNIX si l'on choisit l'option smbpasswd (par défaut) ou tdbsam. Ils pourront ainsi avoir un mot de passe différent du compte UNIX pour Samba.\\ Avec smbpasswd, ils seront stockés dans un fichier de mots de passe ressemblant à \textit{/etc/passwd}.\\ ~\\ Exemple de fichier \texttt{smbpasswd}~: \begin{verbatim} nobody:65534:NO PASSWORDXXXXXXXXXXXXXXXXXXXXX: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX:[NU ]:LCT-00000000: Administrator2:0:01FC5A6BE7BC6929AAD3B435B51404EE: 0CB6948805F797BF2A82807973B89537:[U ]:LCT-42B1A64E: \end{verbatim} Avec tdbsam, il s'agira d'un fichier TDB (Trivial DataBase), c'est à dire un fichier binaire qui stocke les données. Sous Debian ce fichier est passdb.tdb dans le répertoire \texttt{/var/lib/samba/}\\ ~\\ On gérera les utilisateurs grâce à la commande \texttt{smbpasswd}. Ainsi, \texttt{smbpasswd -a user} ajoute l'utilisateur user à la base d'utilisateurs Samba. La commande \texttt{smbpasswd -d user} désactive l'utilisateur user; \textbf{-e} réactive ou encore \textbf{-n} met un mot de passe nul (si c'est possible grâce à l'option \textit{null passwords = yes}). \subsection{Gestion des machines} Toute machine devant être intégrée au domaine doit être ajoutée. La machine sera gérée comme un utilisateur spécial~: elle sera donc stockée de la même façon que les utilisateurs. Il suffit tout simplement de préciser qu'il s'agit d'une machine.\\ Si l'on gère les utilisateurs avec smbpasswd ou tdbsam, on pourra ajouter un groupe UNIX spécifique au système.\\ Exemple d'ajout d'un machine pour une authentification smbpasswd ou tdbsam~: \begin{verbatim} # addgroup pcwin # adduser --ingroup pcwin --shell /dev/false --no-create-home \ --force-badname nom_client$ # smbpasswd -m -a nom_client$ \end{verbatim} \subsection{Utilisation avec OpenLDAP} ~\\ Sur le serveur OpenLDAP, il faut ajouter un schéma spécifique. Ainsi dans le fichier \texttt{slapd.conf}~: \begin{verbatim} include /etc/ldap/schema/samba.schema index cn pres,sub,eq index sn pres,sub,eq ## required to support pdb_getsampwnam index uid pres,sub,eq ## required to support pdb_getsambapwrid() index displayName pres,sub,eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub \end{verbatim} On n'oublie pas de lancer \texttt{slapindex} et de relancer OpenLDAP. \begin{verbatim} # slapindex -f slapd.conf && /etc/init.d/slapd restart \end{verbatim} Notons que sous Debian, le schema \texttt{samba.schema} se trouve dans le paquet \textit{samba-doc} Sur le serveur Samba, il faut avoir un fichier \texttt{smb.conf} ressemblant à~: \begin{verbatim} passdb backend = ldapsam:ldap://127.0.0.1 ldap admin dn = "cn=Manager,dc=evolix,dc=net" ldap suffix = dc=evolix,dc=net ldap filter = (uid=%u) ldap delete dn = no ldap user suffix = ou=People ldap group suffix = ou=Groups ldap machine suffix = ou=Computers ldap passwd sync = yes obey pam restrictions = no \end{verbatim} Si l'on utilise un utilisateur LDAP pour se connecter au serveur OpenLDAP, on stocke son mot de passe de la façon suivante~: \begin{verbatim} # smbpasswd -w \end{verbatim} Il faut maintenant stocker les données Samba (utilisateurs, groupes, machines) sur le serveur OpenLDAP. Il est notamment important de connaître le "Domain SID" du serveur Samba. On l'obtient en faisant~: \begin{verbatim} # net rpc info \end{verbatim} ~\\ (ou \texttt{net getlocalsid}) ~\\ Dans un premier temps, on va créer les branches LDAP qui vont accueillir les données Samba. On crée donc un fichier \texttt{create.ldif}~: \begin{verbatim} dn: ou=People,dc=evolix,dc=net objectclass: top objectclass: organizationalUnit ou: People dn: ou=Groups,dc=evolix,dc=net objectclass: top objectclass: organizationalUnit ou: Groups dn: ou=Computers,dc=evolix,dc=net objectclass: top objectclass: organizationalUnit ou: Computers \end{verbatim} Voici les données pour avoir un groupe UNIX et Samba dans l'annuaire LDAP :\\ \texttt{groups.ldif}~: \begin{verbatim} dn: cn=Domain Admins, ou=Groups, dc=evolix, dc=net sambaSID: S-1-5-21-982778770-3942000634-2231700997-512 gidNumber: 512 displayName: Domain Admins sambaGroupType: 2 memberUid: Administrator memberUid: Administrator2 description: Netbios Domain Administrators objectClass: posixGroup objectClass: sambaGroupMapping cn: Domain Admins \end{verbatim} Ensuite, voici les données pour avoir un utilisateur UNIX et Samba dans l'annuaire LDAP :\\ \texttt{user.ldif}~: \begin{verbatim} dn: uid=user, ou=People, dc=evolix, dc=net sambaLMPassword: 01FC5A6BE7BC6929AAD3B435B51404EE sambaPrimaryGroupSID: S-1-5-21-982778770-3942000634-2231700997-513 displayName: System User sambaLogonScript: user.cmd objectClass: inetOrgPerson objectClass: posixAccount objectClass: sambaSamAccount objectClass: shadowAccount objectClass: top userPassword:: e1NTSEF9ZzJENnA1MWdGdHN3M3JwcWpXeDFLTEM2OS9veU5UY3U= sambaLogonTime: 0 sambaHomeDrive: H: uid: user uidNumber: 1001 cn: user sambaLogoffTime: 2147483647 sambaPwdLastSet: 1118938985 sambaAcctFlags: [U] loginShell: /bin/bash sambaProfilePath: \\%L\profiles\user gidNumber: 1000 sambaPwdMustChange: 1127492585 sambaNTPassword: 0CB6948805F797BF2A82807973B89537 sambaPwdCanChange: 0 gecos: System User sambaSID: S-1-5-21-982778770-3942000634-2231700997-7002 description: System User homeDirectory: /home/user sambaKickoffTime: 2147483647 sn: user sambaHomePath: \\%L\homes\user \end{verbatim} Enfin voici les données pour avoir une machine UNIX et Samba dans l'annuaire LDAP.\\ \texttt{pc.ldif}~: \begin{verbatim} dn: uid=my-pc$, ou=Computers, dc=evolix, dc=net sambaPrimaryGroupSID: S-1-5-21-982778770-3942000634-2231700997-2201 displayName: MY-PC$ objectClass: top objectClass: inetOrgPerson objectClass: posixAccount objectClass: sambaSamAccount uid: my-pc$ uidNumber: 1000 cn: my-pc$ sambaPwdLastSet: 1120480412 loginShell: /bin/false sambaAcctFlags: [W ] gidNumber: 600 sambaPwdMustChange: 2147483647 sambaPwdCanChange: 1120480412 sambaNTPassword: 1429C7104734306334FA33DD43642F60 gecos: Computer sambaSID: S-1-5-21-982778770-3942000634-2231700997-3000 description: Computer homeDirectory: /dev/null sn: my-pc$ \end{verbatim} Pour gérer cela de façon plus conviviale, on peut utiliser \texttt{smbldap-tools}, un ensemble de scripts qui permet d'initialiser et administrer les utilisateurs, groupes et machines. Les fichiers de configuration sont \texttt{smbldap.conf} et \texttt{smbldap\_bind.conf}.\\ \texttt{smbldap.conf}~: \begin{verbatim} SID="MON-SID" suffix="dc=evolix,dc=net" usersdn="ou=People,${suffix}" computersdn="ou=Computers,${suffix}" groupsdn="ou=Groups,${suffix}" [...] \end{verbatim} \texttt{smbldap\_bind.conf}~: \begin{verbatim} masterDN="cn=Manager,dc=evolix,dc=net" masterPw="XXX" \end{verbatim} On peut ensuite faire fontionner le script d'initialisation~: \begin{verbatim} # smbldap-populate \end{verbatim} Ce script crée un certain nombre d'utilisateurs (Administrator, nobody), de groupes (Administrators, Backup Operaters, Domain Admins, Domain Guests, Domain Users, Print Operators, Replicators) et de branches (Computers, Groups, Idmap, People, sambaDomainName).\\ ~\\ Pour ajouter un utilisateur et vérifier ses données~:\\ ~\\ \begin{verbatim} # smbldap-useradd -a user # smbldap-usershow user \end{verbatim} Un certain nombre d'options sont facultatives et permettent d'ajouter des précisions par rapport aux directives du fichier \texttt{smb.conf}~: \textit{userSmbHome} pour \texttt{logon home}, \textit{userProfile} pour \texttt{logon path}, \textit{userScript} pour \texttt{logon script} et \textit{userHomeDrive} pour \texttt{logon drive}.\\ ~\\ Ajout d'une machine~: \begin{verbatim} # smbldap-useradd -w my-pc2$ \end{verbatim} Ajout d'un groupe~: \begin{verbatim} # smbldap-groupadd -a group \end{verbatim} \section{Intégration des clients Windows} \subsection{Windows 98} Mettre "Ouvrir la session sur un domaine Windows NT" dans la boîte "Client pour les réseaux Microsoft".\\ ~\\ La modification d'une clé de la base de registre peut parfois être nécessaire~: \begin{verbatim} REGEDIT4 [HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP] "EnablePlainTextPassword" = dword:00000001 \end{verbatim} \subsection{Windows NT 4} Il faut parfois modifier la clé de la base de registre suivante~: \begin{verbatim} REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters] "EnablePlainTextPassword" = dword:00000001 \end{verbatim} \subsection{Windows 2000} Selon les cas, une clé de la base de registre peut devoir être changée~: \begin{verbatim} REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet001\Services\LanmanWorkstation\Parameters] "EnablePlainTextPassword" = dword:00000001 \end{verbatim} Modifier le domaine puis mettre login/passwd d'un utilisateur avec l'UID UNIX égal à 0.\\ \subsection{Windows XP} Notons tout d'abord que la version \textit{Home edition} ne permet pas de se joindre à un domaine. Ensuite, l'intégration se passe comme avec \textit{Windows 2000} à l'exception près que la modification de la clé de la base de registre soit souvent être modifiée.\\ ~\\ Pour Windows XP SP1, une clé de la base de registre doit parfois être modifiée~: \begin{verbatim} REGEDIT4 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Netlogon\Parameters] "requiresignorseal" = dword:00000000 \end{verbatim} D'autres clés doivent éventuellement être modifiées mais la nécessité semble aléatoire selon les installations de Windows.\\ \textit{Lien~:} \url{http://www.gcolpart.com/howto/samba.php4}\\ \section{Options avancées de Samba} \subsection{section [global]} \begin{verbatim} # nom du domaine workgroup = SAMBATEST # nom NetBIOS netbios name = MASTER # aliases NetBIOS netbios aliases = BOSS # NT Description server string = %h server (Samba %v) # serveur WINS wins support = yes time server = yes ;wins server = w.x.y.z dns proxy = no name resolve order = wins host lmhosts bcast ;disable netbios = yes # logs log file = /var/log/samba/log.%m max log size = 1000 log level = 2 ; syslog only = no syslog = 0 panic action = /usr/share/samba/panic-action %d # authentification security = user passdb backend = tdbsam null passwords = no obey pam restrictions = no encrypt passwords = true guest account = nobody invalid users = root # PDC # local master server (sinon elections) local master = yes # niveau pour les "master elections" os level = 33 # domain master server (ne pas utiliser si déjà NT DC) domain master = yes # serveur auth pour clients Win95 domain logons = yes # force an election on startup preferred master = yes # serveur WINS wins support = Yes # NT time server time server = Yes logon path = \\%L\ntprofiles logon home = \\%L\9xprofiles logon script = %U.cmd # réseau socket address = 192.168.2.34 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 ;hosts allow = 192.168.0. EXCEPT 192.168.0.35 ;hosts deny = ALL # partage preserve case = yes short preserve case = yes case sensitive = no ;acl compatibility = Auto ;nt acl support = yes veto files = /*Security*/*.tmp/*root*/ \end{verbatim} \subsection{section [partage]} Options disponibles pour un partage~: \begin{verbatim} [partage] path = /bla/bla browseable = no guest ok = no read only = yes writeable = no read list = @smbgroup write list = root valid users = @sambausers @smbgroup root ;invalid users = only user = no admin users = ;force user = nobody ;force group = ;create mode = 774 ;directory mode = 2774 create mask = directory mask = security mask = force create mode = force directory mode = force directory security mode = force security mode = hide unreadable = yes hide unwriteable files = yes ;nt acl support = ;inherit permissions = yes ;inherit owner = yes ;inherit acls = yes case sensitive default case short preserve case fake oplocks dos filetimes dos filetime resolution veto files hide dot files hide files \end{verbatim} Voici différents partages~:\\ ~\\ \textbf{partage public} \begin{verbatim} [public] path = /samba/public browseable = yes writeable = yes create mode = 777 directory mode = 777 \end{verbatim} \textbf{partage pour un groupe} \begin{verbatim} [groupe] path = /samba/groupe browseable = yes writeable = yes create mode = 770 directory mode = 770 \end{verbatim} \textbf{partage uniquement accessible à un utilisateur en lecture} \begin{verbatim} [backup] path = /home browseable = no writable = no admin users = backup valid users = backup \end{verbatim} \section{Clients SMB/CIFS pour Unix/Linux} %\url{http://jcifs.samba.org/} Une machine Unix/Linux peut aussi se comporter en tant que client SMB/CIFS. Le serveur pourrait aussi bien être un serveur Samba qu'une machine Windows. Sous Linux, cela se fait en utilisant conjointement le module SMBFS du noyau (éventuellement téléchargeable séparamment) et des outils supplémentaires (il en existe plusieurs) que nous allons passer en revue ci-dessous~: ~\\ \textbf{Paquet samba (ou samba-common)} \begin{verbatim} /usr/bin/smbclient : client SMB/CIFS FTP-like /usr/bin/smbtar : backup de partages SMB/CIFS /usr/bin/rpcclient : outil pour exécuter des fonctions MS-RPC /usr/bin/smbspool : client d'imprimante SMB /usr/bin/smbtree : navigateur SMB/CIGS en mode texte /usr/bin/smbcacls : manipulation des ACLs /usr/bin/smbcquotas : manipulation des quotas /usr/bin/net : outil d'aministration de serveurs SMB/CIFS distants \end{verbatim} \textbf{Utilisation}~: ~\\ Lister les partages disponibles~: \begin{verbatim} # smbclient -L MY-PC -U Administrateur \end{verbatim} Connexion à un partage~: \begin{verbatim} # smbclient //MY-PC/blabla -U Administrateur \end{verbatim} On peut utiliser des commandes FTP comme ls, cd, lcd, get, put, etc.\\ ~\\ Si il s'agit d'une imprimante, on peut imprimer un fichier Postscript en utilisant la commande : \begin{verbatim} > print fichier.ps \end{verbatim} Changement de mot de passe~: \begin{verbatim} # smbpasswd -r MY-PC -U Administrateur \end{verbatim} Sauvegarde et restauration de partage Windows~: \begin{verbatim} # smbtar -v -s MY-PC -x "blabla" -u Administrateur -p pass # smbtar -v -r -s MY-PC -x "blabla" -u Administrateur -p pass \end{verbatim} Lister utilisateurs, groupes, heure distante, reboot, etc~: \begin{verbatim} # /usr/bin/net -I 192.168.4.109 -U Administrateur user # /usr/bin/net -I 192.168.4.109 -U Administrateur group # /usr/bin/net -I 192.168.4.109 -U Administrateur time # /usr/bin/net -I 192.168.4.109 -U Administrateur rpc SHUTDOWN \end{verbatim} \textbf{Paquet smbfs} \begin{itemize} \item /sbin/mount.cifs : monter les partages CIFS \item /usr/bin/smbmount : monter les partages SMB \item /usr/bin/smbumount : démontage partages SMB \item /usr/bin/smbmnt : outil d'aide pour les montages SMB \end{itemize} ~\\ \textbf{Utilisation}~: \begin{verbatim} # mount -t smbfs //MY-PC/blabla /mnt/partage -o username=Administrateur # umount /mnt/partage # smbmount //MY-PC/blabla /mnt/partage # smbumount /mnt/partage \end{verbatim} D'autres outils, notamment des outils graphiques utilisant les commandes précédentes, permettent de faire un certain nombre de manipulations avec un serveur SMB/CIFS.\\ \begin{itemize} \item xsmbrowser (smbclient) : client graphique \item linneighborhood (smbclient ou smbfs) : client graphique \item komba2 (smbclient ou smbfs) : client KDE graphique \item smb4k (smbclient ou smbfs) : client KDE graphique \item tksmb (smbclient ou smbfs) : client graphique en Tk \item jags (smbclient ou smbfs) : client graphique en GTK \end{itemize} ~\\ Il existe également un certain nombre d'outils associés à Samba~:\\ \begin{itemize} \item smbc (libsmbclient) : commande en mode texte \item smbget (libsmbclient) : outil Wget-like \item smb2www (smbclient) : client permetant l'accès depuis une application tierce \item smb-nat (outil) : outil de sécurité pour serveur SMB/CIFS \end{itemize} %\url{http://people.via.ecp.fr/~alexis/formation-linux/samba.html}