Home | Linux | Réseaux | Developpement | Divers | FAQ | Forum | Guestbook | Musique |

 

Samba

1 - Introduction

Samba est un serveur SMB. Vous utilisez SMB tous les jours peut être sans vous en appercevoir, à partir du moment où vous travaillez en réseau OS/2, Windows for workgroup, Windows 95/98/NT ou même le MSCLIENT sous DOS.
Lorsque vous partagez un dossier, une imprimante, administration distante voir même l'envoi de Pop-Up d'un Windows à l'autre ; mais qui peut bien se cacher sous toutes ces taches ? Bienvenue dans le monde facinant de SMB. Sous Windows tout est transparent pour l'utilisateur, aucune configuration requise mise à part le réseau devant comporter un client pour réseau Microsoft, une carte et un protocole TCP/IP voir aussi NetBEUI - la transparence n'est valable que dans une relation Windows/Windows. Lorsque le client est sous Windows et que le serveur sous Linux il y a quelques petits paramètres à configurer.
Nous allons donc créer un serveur de fichiers et d'impression sous Linux.

2 - Préparation

Tout d'abord vous devez avoir configuré correctement le réseau sur toutes les machines. Attention il est préférable d'utiliser des adresses IP non routées - voir la RFC 1597 :

10.0.0.0      --   10.255.255.255 
172.16.0.0    --   172.31.255.255 
192.168.0.0   --   192.168.255.255

Lorsque les stations clientes sont configurées passez sous Linux pour paramétrer Samba.

3 - Configuration de base

Editez le fichier /etc/smb.conf, en voici un exemple commenté:

#Fichier de configuration de Samba

#==================== Global Settings ====================
[global]

# définie le groupe de travail qui sera utilisé par Samba
  workgroup = home
  
# nom du serveur Samba
  netbiosname = cassoulet

# définie le mode de sécurité
# share ==> les utilisateurs se connectent 
            sans fournir de mot de passe valide
  security = share

# utilise des mots de passe cryptés 
# (valable uniquement pour Windows 98, 2000 et ME)
  encrypt password = yes  
  
# charge les imprimantes configurées
  printcap name = /etc/printcap
  load printers = yes

#==================== Share Definitions ====================

[public]
   comment = Public Stuff
   path = /tmp
   guest ok = yes
   writable = yes

[printers]
   comment = All Printers
   path = /var/spool/samba
   guest ok = yes
   writable = yes
   printable = yes

4 - Configuration avec accès privé

Le nom d'utilisateur et le mot de passe employés pour toutes les connexions auront été rentrés préalablement au démarage de la session des clients. Tout utilisateur souhaitant se connecter à la machine Cassoulet devra posseder un compte Samba et non un compte Unix. Pour créer un compte Samba on utilise un utilitaire fourni à cet effet, smbpasswd.

$ smbpasswd -a buggsbunny [Entrée]

Si l'utilisateur ne souhaite pas avoir de mot de passe à saisir on peut supprimer le mot de passe comme ceci :

smbpasswd -a buggsbunny [Entrée]
smbpasswd -n buggsbunny [Entrée]

Editez le fichier /etc/smb.conf, en voici un exemple commenté:

#Fichier de configuration de Samba

#==================== Global Settings ====================
[global]

# définie le groupe de travail qui sera utilisé par Samba
  workgroup = home
  
# nom du serveur Samba
  netbiosname = cassoulet

# définie le mode de sécurité
# user ==> les utilisateurs se connectent 
           en fournissant un mot de passe valide
  security = user

# utilise des mots de passe cryptés 
# (valable uniquement pour Windows 98, 2000 et ME)
  encrypt password = yes  
  
# charge les imprimantes configurées
  printcap name = /etc/printcap
  load printers = yes

#==================== Share Definitions ====================

[public]
   comment = Public Stuff
   path = /tmp
   # si il y a plusieurs utilisateurs 
   # on les sépare par des espaces, tout simplement
   valid users = buggsbunny
   writable = yes

[printers]
   comment = All Printers
   path = /var/spool/samba
   writable = yes
   printable = yes

5 - Configuration avec un controleur de domaine

Vous devez procedez de la même façon que pour la configuration avec accès privé pour créer des utilisateurs.
Editez le fichier /etc/smb.conf, en voici un exemple commenté:

#Fichier de configuration de Samba
#==================== Global Settings ====================
[global]
workgroup = home
netbiosname = cassoulet
security = USER
password level = 4
domain logons = yes
logon script = logon.bat
os level = 64
domain master = yes
local master = yes
prefered master = yes
browsable = yes
writable = yes
locking = no
case sensitive = no
default case = lower
preserve case = yes
short preserve case = no
encrypt passwords = Yes

#==================== Share Definitions ====================

[netlogon]
comment = NETLOGON service
path = /export/smb/netlogon
locking = no
public = no
writable = no

[homes]
   comment = Home Directories
   path = %H
   create mode = 0600
   directory mode = 0700
   browseable = no
   valid users = %S

[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no
   writable = no
   printable = yes
   public = Yes

[public]
   comment = Public Stuff
   path = /tmp
   valid users = buggsbunny
   writable = Yes

Vous devez créer un fichier logon.bat au format DOS (utilisez votre éditeur de texte favoris sous Windows pour le faire).
Voici un exemple de fichier logon.bat :

echo  =================================
echo | Linux Mandrake 7.1 Hellium used | 
echo | Welcome to Home domain          |
echo | Mapping network drives ...      |
echo  =================================
echo.
net use f: \\cassoulet\homes
net use g: \\cassoulet\public

Configurez le client réseau Microsoft comme ceci :

6 - Test

Après avoir configuré Samba lancez cette ligne de commande afin de vérifier le bon fontionement du serveur.

[root@cassoulet /root]# testparm

Si vous n'avez eu aucun message d'erreur relancez Samba

[root@cassoulet /root]# samba restart

7 - Passez à l'action

Ca y est ca marche et revenez sous Windows. Si vous avez de l'administration à faire utilisez telnet pour modifier vos fichiers à distance.



Pour acceder aux ressources partagées vous devez vous logez avec un user définit sous Linux. Double cliquez sur le voisinage réseau et vous devez voir votre poste Linux comme ceci :



Puis en re-double cliquant vous devez voir les répertoires et imprimantes partagée comme ceci :

8 - Swat (Samba Web Administration Tool)

Ce programme fait partie de la suite Samba. Swat permet à un administrateur de parametrer plus facilement le fichier de config de Samba par le biais d'un browser. Il facilite la tâche pour les néophytes et les allergiques des fichiers de config (petite pensée à un PTZ...). Nous ne verons pas l'installation de Swat car ce n'est pas le but de cette page et de plus il est installé par défaut dans la plus part des distributions actuelles.

9 - Configuration de Swat

Nous aurons besoins d'éditer 2 fichiers /etc/services et /etc/inetd.conf. Editez le fichier /etc/services et ajoutez la ligne suivante à la fin du fichier :

swat 901/tcp

Ceci signifie que l'on va se servir du port 901 pour attaquer Swat - les deux valeurs doivent être séparée par des tabulations. Ajouter la ligne suivante dans le fichier /etc/inetd.conf :

swat stream tcp nowait.400 rootpath swat

Après ces modifications vous devez tuer le processus inetd avec $ kill -1 pid.

10 - Utilisation de Swat

Pour accéder à Swat, lancez un navigateur et entrez l'url suivante : http://localhost:901/
Vous devriez avoir les écrans suivants :



11 - Contrôleur de domaine pour Windows 2000 pro

11.1 - Introduction

Suite aux questions qui m'ont été posées je me suis penché sur la configuration d'un contrôleur de domaine pour station utilisant Windows 2000 Pro. Je précise que la config est beaucoup plus tordue que pour un environement Win9x ou Nt4. Trouve une nouveauté qui est très importante, à savoir un compte destiné à l'enregistrement d'un hôte sur le domaine - exactement comme le compte administrateur de domaine sous NT.
La version de Samba utilisé est la 2.2.3a sur une Debian 2.2r0.

11.2 - Fichier smb.conf

Voici un fichier smb.conf qui devrait faire l'affaire :

*/ smb.conf - PDC to win2k station*/
[global]
  ; standard informations
  workgroup = home
  netbiosname = tux
  security = USER
  password level = 4
  os level = 64
  encrypt passwords = Yes
  browsable = yes
  writable = yes
  locking = no
  case sensitive = no
  default case = lower
  preserve case = yes
  short preserve case = no
 
  ; domain controler informations
  domain master = yes
  local master = yes
  prefered master = yes
  domain logons = yes
  logon script = logon.bat
  
# ============= Share definitions ============= 
[netlogon]
  comment = NETLOGON service
  path = /home/netlogon
  locking = no
  public = no
  writable = no

[dev]
  comment = Developpement Directory
  path = /samba/dev
  locking = yes
  public = no
  valid users = maxmaster

[homes]
   comment = Home Directories
   path = %H
   create mode = 0600
   directory mode = 0700
   browseable = no
   valid users = %S  

[profiles]
  path = /home/export/profile
  browseable = no
  writeable = yes
  create mask = 0700
  directory mask = 0700

11.3 - Création des comptes utilisateurs Unix

Comme décrit plus haut pour le contrôleur de domaine classique je vais reprendre la marche à suivre pour ne pas troubler ceux qui sont habitués au partage classique.
Nous allons créer deux comptes utilisateurs Unix :

$ useradd -g users jmbigard
$ useradd -g users grouchi

11.4 - Création des répertoires de logons et de profiles

Par défaut le répertoire /home/netlogon n'existe pas, nous allons le créer.

$ mkdir -p /home/netlogon

On poursuit avec le répertoire pour les profiles.

$ mkdir -p /home/export/profile

11.4 - Création des comptes utilisateurs Samba

Nous créons maintenant les comptes qui seront utilisés par Samba, essayer de reprendre les mots de passes des comptes Unix.

$ smbpasswd -a jmbigard
$ smbpasswd -a grouchi

11.6 - Création des comptes de machines

Les comptes de machines vont servir à intégrer un poste au domaine. Nous allons créer pour cela un groupe destiné à les recevoir (le groupe postes).

$ groupadd postes
$ useradd -g postes -s /dev/false -d /dev/null station1$
$ useradd -g postes -s /dev/false -d /dev/null station2$
$ smbpasswd -m -a station1$
$ smbpasswd -m -a station2$

11.7 - Création du compte administrateur de domaine

Comme vous le savez le compte administrateur de domaine est utilisé pour "connecter" une machine à un domaine lorsqu'elle se trouve dans un groupe de travail ou lorsque qu'un poste doit changer de domaine. Le compte qui va faire office d'administrateur de domaine est le compte root.

$ smbpasswd -a root

Pensez à utiliser un autre mot de passe pour le compte root pour des raisons de sécurité. Puis on relance Samba.

$ /etc/init.d/samba restart

On peut vérifier l'état du serveur en utilisant une commande propre à samba ou par intérogation des process.

$ /etc/init.d/samba status
$ ps -eaf | grep smbd

11.8 - Connection au domaine

Il ne nous reste plus qu'à inclure les station au domaine. Clique droit sur le Poste de travail, propriété, identification réseau, propriété, et indiquer les domaines que l'on vient de créer en utilisant le compte root que l'on a créé en tant que Samba.

 

12 - Une imprimante pdf

Bloc à ajouter dans les partages du fichier smb.conf :

	[pdf-printer]
path = /tmp
guest ok = No
valid users = snake
printing = bsd
lpq command = /bin/true
printable = Yes
comment = PDF Generator (only valid users)
print command = /samba/netconfig/samba/printpdf.sh "%s" "%H" "//%L/%u" "%m" "%I" "%J" &

Le script qui génère le pdf :

	#!/bin/bash
# samba-print-pdf


PS2PDF=ps2pdf13 
OPTIONS="-dAutoFilterColorImages=false -sColorImageFilter=FlateEncode"
#Values taken from arguments:
INPUT=$1
PREFIX="$2"
WINBASE=$(echo "$3"|sed -e 's,/,\\\\,g')
#NAME=`echo "$6"|sed -e 's/[&/:{}\\\[<>$#@*^!?=|]/-/g;s/\]/-/g'`
NAME=`echo "$6"|tr '[:punct:]' '[-*]'`

# Source config file if it exists:
CONFFILE=/etc/samba/print-pdf.conf
[ -e $CONFFILE ] && . $CONFFILE

#Values not taken as arguments, could be set via env. vars (?) or config file
KEEP_PS=${KEEP_PS=0}
PERMS=${PERMS=640}
BASEFILE=${BASEFILE=pdf-service}
TEMP="${TEMP=$2}"
UMASK=${UMASK=006}

#Make sure that destination directory exists
mkdir -p "$PREFIX"

INFILE=$(basename $INPUT)

umask $UMASK

[ -n "$NAME" ] && TEMP="$PREFIX"

#make a temp file to use for the output of the PDF
OUTPUT=`mktemp -q $TEMP/$BASEFILE-XXXXXX`
if [ $? -ne 0 ]; then
	echo "$0: Can't create temp file $TEMP/$OUTPUT, exiting..."
	exit 1
fi
if [ -n "$NAME" ]; then
	FINALOUTPUT="$PREFIX/$NAME"
else
	FINALOUTPUT="$OUTPUT"
fi
if [ -n "$7" ]; then
	OPTIONS="$OPTIONS -dPDFSETTINGS=/${7#pdf-}"
else
	OPTIONS="$OPTIONS -dPDFSETTINGS=/default"
fi

WIN_OUTPUT="$WINBASE\\"`basename "$FINALOUTPUT"`
#mv "$INPUT" "$INPUT.ps";INPUT="$INPUT.ps"

# create the pdf
$PS2PDF $OPTIONS "$INPUT" "$OUTPUT.pdf" >/dev/null 2>&1
mv -f "${OUTPUT}.pdf" "${FINALOUTPUT}".pdf

# Generate a message to send to the user, and deal with the original file:
MESSAGE=$(echo "Your PDF file has been created as $WIN_OUTPUT.pdf\n")


# Cleanup
if [ $KEEP_PS != 0 ];then
	mv -f $INPUT "${FINALOUTPUT}".ps
	MESSAGE=$(echo "$MESSAGE and your postscript file as $WIN_OUTPUT.ps")
	# Fix permissions on the generated files
	chmod $PERMS "${FINALOUTPUT}".ps "${FINALOUTPUT}".pdf
else
	rm -f $INPUT
	# Fix permissions on the generated files
	chmod $PERMS "${FINALOUTPUT}".pdf
fi
                                            
#Remove empty file from mktemp:
rm -f  $OUTPUT

# Send notification to user
echo -e $MESSAGE|smbclient -M $4 -I $5 -U "PDF Generator" >/dev/null 2>&1
	
	
Site hébergé officiellement chez Linux France - © 1999 2005