834 lines
27 KiB
TeX
834 lines
27 KiB
TeX
|
% Copyright (c) 2004-2010 Evolix <info@evolix.fr>
|
|||
|
% Permission is granted to copy, distribute and/or modify this document
|
|||
|
% under the terms of the GNU Free Documentation License, Version 1.2
|
|||
|
% or any later version published by the Free Software Foundation;
|
|||
|
% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
|
|||
|
% A copy of the license is included at http://www.gcolpart.com/howto/fdl.html
|
|||
|
|
|||
|
\chapter{Samba}
|
|||
|
|
|||
|
\section{Pr<EFBFBD>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<6F>ratibilit<69> 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<66>rentes machines. Invent<6E> <20> l'origine par IBM, il fut repris et largement modifi<66> par Microsoft. Il est renomm<6D> 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<69>s : liens, fichiers de grande taille, etc.\\
|
|||
|
|
|||
|
SMB/CIFS utilise depuis le d<>but des impl<70>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<69> 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<71>te est l<>gale, que les droits sont corrects puis ex<65>cute (ou non) la requ<71>te et renvoie une notification au client. Le client, gr<67>ce <20> la notification, connait l'<27>tat de sa demande. Parmi les nombreuses op<6F>rations disponibles (qui diff<66>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<73>de un nom NetBIOS. Les noms NetBIOS sont des noms "human readable" assign<67>s <20> chaque machine. D'une longueur maximale de 15 caract<63>res, ils peuvent contenir les caract<63>res suivants~:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
a-z, A-Z, 0-9 et ! @ # $ % ^ & ( ) - ' { } . ~ "
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
Ce sont les noms g<>n<EFBFBD>ralement visibles dans le "voisinage r<>seau" des syst<73>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<6D>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{<EFBFBD> partir des sources}
|
|||
|
|
|||
|
On peut utiliser la m<>thode classique de recompilation <20> partir des sources~:
|
|||
|
|
|||
|
\begin{verbatim}
|
|||
|
$ ./configure [options]
|
|||
|
$ make
|
|||
|
# make install
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
\subsection{Par paquets}
|
|||
|
|
|||
|
Sous Debian, les paquets principaux <20> 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<73>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<63>tement, cela offre aux machines Windows les fonctionnalit<69>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<6E>gr<67> <20> Samba. Sous Debian, on devra installer
|
|||
|
le paquet \texttt{swat} et activer le service gr<67>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 <20>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 <20> l'interface gr<67>ce <20> un navigateur web sur l'adresse \textit{http://serveur-samba:901} et en pr<70>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 <20>tre incompatible avec
|
|||
|
certaines configurations, sous peine de perdre une partie du fichier de
|
|||
|
configuration \texttt{smb.conf}.\\
|
|||
|
~\\
|
|||
|
On peut <20>galement utiliser le module Samba de Webmin\footnote{\url{http://www.webmin.com/}} (paquet \texttt{webmin-samba}) qui permet <20>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<6D>triser compl<70>tement la configuration et <20>ventuellement acc<63>der <20> des options non disponibles depuis une interface graphique, on <20>ditera \texttt{smb.conf} pour y sp<73>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<6E> authentification) en "security = share" (orient<6E> partage public). Une autre option disponible est "security = domain" qui s'utilise si le serveur Samba est client d'un autre contr<74>leur de domaine.\\
|
|||
|
|
|||
|
\textbf{Remarque~:} en mode USER, un mot de passe sera demand<6E> depuis Windows pour tous les partages (m<>me "guest ok"). On peut <20>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 <20> 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<EFBFBD>leur de domaine}
|
|||
|
|
|||
|
L'utilisation de Samba en tant que contr<74>leur de domaine permet de centraliser les authentifications pour les ouvertures de session Windows. Il peut <20>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<69>e pour acc<63>der <20> ces partages (donc pas de login ni mot de passe <20> retaper).\\
|
|||
|
|
|||
|
Note~: un message d'avertissement peut-<2D>tre affich<63> lors de la premi<6D>re connexion d'un utilisateur. Il signale simplement qu'aucun r<>pertoire utilisateur n'est pr<70>sent localement et qu'il va en cr<63>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<66>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 <20> la connexion d'un utilisateur avec l'option "logon script". Ce script peut m<>me <20>tre diff<66>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<61> par Kerberos depuis Windows 2000 (mais toujours pr<70>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<66>rentes fa<66>ons~: fichier smbpasswd, stockage TDB, serveur MySQL, annuaire LDAP, NIS+, etc. On sp<73>cifie ce choix gr<67>ce <20> 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<6E>es d'utilisateurs avec la commande "pedit" (uniquement accessible <20> root) ou "smbpasswd" (semblable <20> 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 <20>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<66>rent du compte UNIX pour Samba.\\
|
|||
|
|
|||
|
Avec smbpasswd, ils seront stock<63>s dans un fichier de mots de passe ressemblant <20> \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 <20> dire un fichier binaire qui stocke les donn<6E>es. Sous Debian ce fichier est passdb.tdb dans le r<>pertoire \texttt{/var/lib/samba/}\\
|
|||
|
~\\
|
|||
|
|
|||
|
On g<>rera les utilisateurs gr<67>ce <20> la commande \texttt{smbpasswd}.
|
|||
|
Ainsi, \texttt{smbpasswd -a user} ajoute l'utilisateur user <20> 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<67>ce <20> l'option \textit{null passwords = yes}).
|
|||
|
|
|||
|
\subsection{Gestion des machines}
|
|||
|
|
|||
|
Toute machine devant <20>tre int<6E>gr<67>e au domaine doit <20>tre ajout<75>e. La machine sera g<>r<EFBFBD>e comme un utilisateur sp<73>cial~: elle sera donc stock<63>e de la m<>me fa<66>on que les utilisateurs. Il suffit tout simplement de pr<70>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<73>cifique au syst<73>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<63>ma sp<73>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 <20>~:
|
|||
|
|
|||
|
\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<66>on suivante~:
|
|||
|
\begin{verbatim}
|
|||
|
# smbpasswd -w <pass-bind-LDAP>
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
|
|||
|
Il faut maintenant stocker les donn<6E>es Samba (utilisateurs, groupes, machines) sur le serveur OpenLDAP. Il est notamment important de conna<6E>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<63>er les branches LDAP qui vont accueillir les donn<6E>es Samba. On cr<63>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<6E>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<6E>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<6E>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<66>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<63>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<6E>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<70>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<EFBFBD>gration des clients Windows}
|
|||
|
|
|||
|
\subsection{Windows 98}
|
|||
|
|
|||
|
Mettre "Ouvrir la session sur un domaine Windows NT" dans la bo<62>te "Client pour les r<>seaux Microsoft".\\
|
|||
|
~\\
|
|||
|
|
|||
|
La modification d'une cl<63> de la base de registre peut parfois <20>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<63> 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<63> de la base de registre peut devoir <20>tre chang<6E>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 <20>gal <20> 0.\\
|
|||
|
|
|||
|
\subsection{Windows XP}
|
|||
|
|
|||
|
Notons tout d'abord que la version \textit{Home edition} ne permet pas de se joindre <20> un domaine. Ensuite, l'int<6E>gration se passe comme avec \textit{Windows 2000} <20> l'exception pr<70>s que la modification de la cl<63> de la base de registre soit souvent <20>tre modifi<66>e.\\
|
|||
|
~\\
|
|||
|
|
|||
|
Pour Windows XP SP1, une cl<63> de la base de registre doit parfois <20>tre modifi<66>e~:
|
|||
|
\begin{verbatim}
|
|||
|
REGEDIT4
|
|||
|
|
|||
|
[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Netlogon\Parameters]
|
|||
|
"requiresignorseal" = dword:00000000
|
|||
|
\end{verbatim}
|
|||
|
|
|||
|
D'autres cl<63>s doivent <20>ventuellement <20>tre modifi<66>es mais la n<>cessit<69> semble al<61>atoire selon les installations de Windows.\\
|
|||
|
|
|||
|
\textit{Lien~:}
|
|||
|
\url{http://www.gcolpart.com/howto/samba.php4}\\
|
|||
|
|
|||
|
\section{Options avanc<6E>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<EFBFBD> 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<66>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 <20> 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 <20>tre un serveur Samba qu'une machine Windows. Sous Linux, cela se fait en utilisant conjointement le module SMBFS du noyau (<28>ventuellement t<>l<EFBFBD>chargeable s<>paramment) et des outils suppl<70>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<65>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 <20> 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<70>c<EFBFBD>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 <20>galement un certain nombre d'outils associ<63>s <20> Samba~:\\
|
|||
|
|
|||
|
\begin{itemize}
|
|||
|
\item smbc (libsmbclient) : commande en mode texte
|
|||
|
\item smbget (libsmbclient) : outil Wget-like
|
|||
|
\item smb2www (smbclient) : client permetant l'acc<63>s depuis une
|
|||
|
application tierce
|
|||
|
\item smb-nat (outil) : outil de s<>curit<69> pour serveur SMB/CIFS
|
|||
|
\end{itemize}
|
|||
|
|
|||
|
%\url{http://people.via.ecp.fr/~alexis/formation-linux/samba.html}
|