page1

Synthèse Apache 2 (page 2)


Table of Contents

  • 4.2 Apache et les droits unix
  • 4.3 Restriction d'accès
  • 4.4 Serveurs virtuels
  • 4.5 Script CGI
  • 4.6 Délégation de gestion
  • 4.7 SSL et Apache
  • 4.2 Apache et les droits unix

    4.2.1 Rappel sur les droits UNIX

    • La notion de groupe et d'utilisateur

      Sur un système UNIX il est, grossièrement, deux types d'utilisateurs : l'utilisateur root et l'utilisateur classique.

      root est le super-utilisateur, il peut aller partout et tout faire. Il est automatiquement créé à l'installation d'un système UNIX1.

      Les autres usagers sont différenciés par leurs limitations. Ces limitations concernent les actions possibles sur les fichiers. Sous UNIX un répertoire, un exécutable, un lien, un périphérique sont tous des fichiers. Sous Unix TOUT EST FICHIER.

      Ainsi si un fichier X est lisible, inscriptible et éxecutable par l'usager Bob, et et seulement lisible par les membres du groupe Etudiants, alors Raymond, qui appartient au groupe Étudiant, peut seulement le lire, et Zola, qui appartient au groupe Ecrivain, ne peut rien en faire.

      Les droits associés aux fichiers (et donc répertoires, périphériques etc.) sont leur mode.

      Le mode d'un fichier est représenté selon deux syntaxes :

      • représentation octale :
        AttrSUser (u)Group (g)Other (o)
        Read (r) SETUID [s]4444
        Write (w) SETGID [s]2222
        Exec (x) Sticky bit [t]1111

        SETUID, SETGID et Sticky bit correspondent à la colonne des attributs spéciaux (AttrS). Nous les laisseront de côté.

        Exemple :

        Fichier X

        propriétaire (u) : lecture (r), écriture (w), exécution (x).

        groupe (g) : lecture (r), exécution (x).

        autres utilisateurs : exécution (x).

        Représentation octale : 0751

      • Représentation par une chaine de caractères :
        usergroupother
        rwxrwxrwx

        Soit pour l'exemple précédent :

        -rwxr-x--x

        La première place (-) donne le type du fichier (fichier : - ; dossier : d).

    • Les processus

      Les processus sous UNIX sont étroitement liés aux fichiers. Vous pouvez vous en rendre compte en parcourant les arborescences virtuelles /proc et /sys. Dans /proc, par exemple, chaque processus est lié à un dossier portant son numéro contenant des fichiers permettant d'obtenir un certain nombre d'informations, en direct !, sur le processus.

      L'identité d'un processus sur un système Unix est définie par son UID (User IDentity) et son GID (Group IDentity).

      L'UID et le GID dont définis par le père du processus. Si le père est l'usager Eusebe du groupe Fathers, alors l'UID des processus qu'il lance sera Eusebe et le GID Fathers.

    • Outils pour manipuler les droits

      Les trois outils de base sont chmod(1), chgrp(1) et chown(1).

      • chmod(1)

        Change le mode d'un fichier (ses droits).

        $ chmod 0640 fichier_
        
      • chgrp(1)

        Change le groupe auquel est lié un fichier.

        $ chgrp Etudiants fichier_
        
      • chown(1)

        Change le propriétaire du fichier.

        
        $ chown Bob fichier_
        

    4.2.2 Et Apache dans tout ça ?

    Les processus lancés par Apache sont nombreux. Le démon http est démarré par root, il lance un processus "père" (UID:root).

    Ce processus est chargé de lancer les processus "fils" qui dialogueront avec les clients.

    L'identité (UID + GID) des processus fils est définie par les directives User et Group

    L'identité d'Apache détermine ses possibilités d'accès au système de fichier. Le client passant par le serveur Apache pour accéder au contenu du système de fichier de la machine, cette identité détermine ce qui lui est accessible.

    User Directive
    Description:The userid under which the server will answer requests
    Syntax:User unix-userid
    Default:User #-1
    Context:server config
    Status:MPM
    Module:prefork, worker
    Compatibility:Only valid in global server config since Apache 2.0

    L'utilisateur est déterminé par son nom ou son numéro d'identifiant.

    Group Directive
    Description:Group under which the server will answer requests
    Syntax:Group unix-group
    Default:Group #-1
    Context:server config
    Status:MPM
    Module:beos, mpmtos2, prefork, worker
    Compatibility:Only valid in global server config since Apache 2.0

    Le groupe est déterminé par son nom ou son numéro d'identifiant.

    4.2.3 Gestion des pages personnelles.

    La directive UserDir autorise les utilisateurs de la machine sur laquelle tourne le démon http à publier leurs pages web sur leur espace personnel.

    Cette directive définit le répertoire dans lequel placer ses pages webs. L'URL permettant d'accéder à ce répertoire est de la forme :

    http://monsite.com/~nom-utilisateur/~répertoire/

    UserDir
    Description:Location of the user-specific directories
    Syntax:UserDir directory-filename [directory-filename] …
    Context:server config, virtual host
    Status:Base
    Module:mod_userdir

    Les mots-clés enabled et disabled permettent de gérer les permissions :

    UserDir disabled
    UserDir enabled andromaque bossuet
    
    

    Personne ne dispose de son espace de publication, sauf andromaque et bossuet.

    UserDir enabled
    UserDir disabled root
    

    Tout le monde peut publier, sauf root (une bonne mesure de sécurité !).

    Cette directive s'accompagne de la configuration du répertoire via l'usage d'un wildcard (*). En effet, il serait trop laborieux de configurer les répertoires de chaque utilisateur indépendemment.

    Soit UserDir public_html :

    <Directory /home/*/public_html>
       ...
    </Directory>
    
    • Quelques infos spécifiques à Debian :

      Pour activer la directive UserDir :

      $ a2enmod userdir_
      

      La configuration par défaut se trouve dans /etc/apache2/mods-available/userdir.conf

      <IfModule mod_userdir.c>
              UserDir public_html
              UserDir disabled root
      
              <Directory /home/*/public_html>
                      AllowOverride FileInfo AuthConfig Limit Indexes
                      Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                      <Limit GET POST OPTIONS>
      
                              Order allow,deny
                              Allow from all
                      </Limit>
                      <LimitExcept GET POST OPTIONS>
                              Order deny,allow
                              Deny from all
                      </LimitExcept>
              </Directory>
      </IfModule>
      

    4.3 Restriction d'accès

    Nous ne verrons ici que le contrôle par fichier de mots de passe (mod_auth ou mod_auth_basic pour Debian).

    Principe : une boîte de dialogue apparait aux usagers souhaitant naviguer sur les pages contenues dans les zones protégées du site. Les login et les mots de passe cryptés sont contenus dans un fichier du serveur. Les zones concernées par la restriction sont définies dans un conteneur Directory. Plusieurs répertoires peuvent appartenir à une seule zone.

    4.3.1 Les directives

    Pour mettre en place une restriction d'accès il faut passer par quatre directives (AuthType, AuthUserFile, AuthName et Require) et un programme (htpasswd).

    AuthType
    Description:Type d'identification
    Syntax:AuthType Basic¦Digest
    Context:directory, .htaccess
    Override:AuthConfig
    Status:Core
    Module:core

    Nous n'utiliserons que le type basic (mod_auth_basic). Il est également possible d'utiliser le mode digest (mod_auth_digest).

    Cette directive doit être accompagnée de AuthName, Require et AuthUserFile et/ou AuthGroupFile

    AuthUserFile
    Description:Nom du fichier contenant utilisateurs et mots de passe
    Syntax:AuthUserFile file-path
    Context:directory, .htaccess
    Override:AuthConfig
    Status:Base
    Module:mod_authn_file

    Chaque ligne du fichier est de la forme :

    utilisateur:mot_de_passe_encrypté
    

    Sécurité : le fichier doit être placé en dehors d'un espace accessible depuis le serveur web, et jamais dans le répertoire qu'il protège.

    AuthGroupFile
    Description:Nom du fichier contenant la liste des groupes pour l'authentification des utilisateurs
    Syntax:AuthGroupFile file-path
    Context:directory, .htaccess
    Override:AuthConfig
    Status:Base
    Module:mod_authz_groupfile

    Chaque ligne du fichier est de la forme :

    nom_du_groupe:utilisateur1 utilisateur2 ...
    

    Sécurité : le fichier doit être placé en dehors d'un espace accessible depuis le serveur web, et jamais dans le répertoire qu'il protège.

    AuthName
    Description:Nom du schéma d'autorisation pour un répertoire
    Syntax:AuthName auth-domain
    Context:directory, .htaccess
    Override:AuthConfig
    Status:Core
    Module:core

    Ce nom est donné au client afin qu'il sache quel nom et quel mot de passe entrer. Si le nom comporte des espaces, il faut le mettre entre guillemets :

    AuthName "Dossier top secret"
    

    Cette chaîne de caractères sera affichée dans la fenêtre demandeuse du mot de passe dans la plupart des navigateurs web.

    Require
    Description:Définit les utilisateurs authentifiés autorisés à accéder à une ressource
    Syntax:Require entity-name [entity-name] ...
    Context:directory, .htaccess
    Override:AuthConfig
    Status:Core
    Module:core

    Définit les utilisateurs et les groupes d'utilisateurs autorisés à accéder au répertoire.

    Require user utilisateur1 utilisateur2 ...
    
    Require group groupe1 groupe2 ...
    
    Require valid-user
    

    Cette dernière expression offre l'accès à tous les utilisateurs reconnus valides (login + mot de passe vérifiés par les directives précédentes).

    P.S. : il est possible d'utiliser Require en collaboration avec les directives Allow et Deny, dans ce cas il faut passer également par la directive Satisfy.

    4.3.2 La commande htpasswd(1)

    Soit la configuration suivante :

    <Directory /home/athanase/public_html/secret>
       Options none
       AuthName prive
       AuthType Basic
       AuthUserFile /etc/passwd.apache
       Require valid-user
       Order allow,deny
       Allow from all
    </Directory>
    

    La création du fichier /etc/passwd.apache se fait ainsi :

    $ htpasswd -c /etc/passwd.apache [nom utilisateur]_
    

    On ajoute un utilisateur ou change un mot de passe de la manière suivante :

    $ htpasswd -c /etc/passwd.apache [nom utilisateur]_
    

    La suppression d'un utilisateur se fait ainsi :

    $ htpasswd -D [nom utilisateur]_
    

    Première remarque : les utilisateurs définis avec htpasswd n'ont rien à avoir avec les utilisateurs du système.

    Seconde remarque : Sur les plateformes Windows et MPE, les mots de passe ne peuvent pas dépasser 255 caractères. Si c'est le cas, ils seront tronqués.

    4.4 Serveurs virtuels

    4.4.1 Basé sur IP ou sur port

    • Créer un ALIAS IP avec Linux
      • Alias ip sur l'interface locale :
        $ ifconfig lo:0 192.168.30.1_
        

        Vérifier avec ifconfig. Pour désactiver l'alias :

        $ ifconfig lo:0 down_
        
      • Activer au démarrage du système :

        Sur Debian entrez ifconfig lo:0 192.168.30.1 à la fin de /etc/rc.local

        Dans /etc/hosts ajouter :

        192.168.30.1 vserver1
        
    • Configurer Apache

      La directive conteneur permettant de créer un serveur virtuel est :

      <VirtualHost>
      Description:Contains directives that apply only to a specific hostname or IP address
      Syntax:<VirtualHost addr[:port] [addr[:port]] …> … </VirtualHost>
      Context:server config
      Status:Core
      Module:core

      Exemple de configuration d'un serveur virtuel sur le port 8000 :

      Listen 192.168.30.1:8000
      
      <VirtualHost 192.168.30.1:8000>
      ServerAdmin mesmento@linuxette
      DocumentRoot /home/mesmento/vserver1/www
      ServerName vserver1
      ErrorLog /home/mesmento/vserver1/logs/vserver1-errors_log
      CustomLog /home/mesmento/vserver1/logs/vserver1-access_log common
      </VirtualHost>
      
      <Directory /home/mesmento/vserver1/www>
      Options Indexes
      DirectoryIndex vindex.html
      Order allow,deny
      Allow from all
      </Directory>
      
      

      Dès lors l'accès se fait comme suit :

      http://192.168.30.1:8000

      ou :

      http://vserver1:8000

    4.4.2 Basé sur le nom

    La méthode par adresse IP ou par port a pour principal défaut d'exiger l'achat d'autant de nom de domaine que de serveurs virtuels déterminés par cette méthode.

    Une méthode plus économe consiste à utiliser le champ host de la requête http (depuis http/1.1) du client précisant le nom du serveur web.

    GET / HTTP/1.1
    Host: exemple.fr
    ...
    

    Cette méthode impose l'utilisation d'un nom de domaine. Il faut donc passer par un serveur DNS local (pour un site intranet) ou distant (pour un site internet).

    • Configuration
      NameVirtualHost
      Description:Indique une adresse IP spécifique pour l'analyse du champ host des requêtes http
      Syntax:NameVirtualHost addr[:port]
      Context:server config
      Status:Core
      Module:core

      La recherche des correspondances noms/hôtes se fait dans l'ordre de leur déclaration.

      Exemple :

      NameVirtualHost 192.168.1.41
      
      <VirtualHost 192.168.1.41>
          ServerName exemple.aa.fr
      
      </VirtualHost>
      
      <VirtualHost 192.168.1.41>
          DocumentRoot /home/webmaster/www2
          ServerName webmaster.www3.com
          ...
      </VirtualHost>
      

    4.5 Script CGI

    4.5.1 Centralisé dans un répertoire :

    ScriptAlias [chemin-url : /cgi-bin/] [répertoire : /var/www/cgi-bin/]
    

    Donner les droits Apache aux scripts :

    <Directory /var/www/cgi-bin>
        AllowOverride None
        Options ExecGGI
        Order allow,deny
        Allow from all
    </Directory>
    

    4.5.2 Par format de fichiers :

    AddHandler [nom-handler : cgi-script] [extensions : cgi] [extensions : CGI] ...
    

    4.5.3 Fichier log CGI :

    ScriptLog [nomFichier]
    

    Désactiver une fois le débogage réalisé !

    4.6 Délégation de gestion

    4.6.1 Nom des fichiers de délégations :

    AccessFileName [nomfichier : .htaccess]
    

    4.6.2 Directive AllowOverride

    Cette directive sert à donner la main aux fichiers .htaccess locaux. Fonctionne pour le Directory racine d'un serveur unique (virtuel ou pas).

    <Directory />
        ...
        AllowOverride None
        ...
    </Directory>
    
    • options disponibles :

      None : Aucune autorisation

      AuthConfig : droit d'user de la directive Auhtorization

      FileInfo : autorise directives d'accès aux documents

      Indexes : autorise directives d'indexation (AddIcon, DirectoryIndex etc.)

      Limit : autorise directives de contrôle d'accès des hôtes (allow, deny etc.)

      Options : autorise directives des fonctionnalités des répertoires All : toutes les autorisations

    • symboles + et -

      Par exemple, sans symboles + ni - :

      <Directory /web/docs>
            Options Indexes FollowSymLinks
      </Directory>
      
      <Directory /web/docs/spec>
           Options Includes
      </Directory>
      

      Seul Includes sera activé pour le répertoire /web/docs/spec.

      Cependant, si la seconde directive d'Options utilise les symboles + et - :

      <Directory /web/docs>
           Options Indexes FollowSymLinks
      </Directory>
      
      <Directory /web/docs/spec>
      
           Options +Includes –Indexes
      </Directory>
      

      alors les options FollowSymLinks et Includes sont validées pour le répertoire /web/docs/spec.

    4.7 SSL et Apache

    4.7.1 Activation de SSL

    1. vérifier sur https://127.0.0.1 si ssl est activé
    2. Si ça n'est pas le cas sur Debian :
      • activer le mode ssl :
        $ cd /etc/apache2/mods-enabled/_
        
        $ ln -s ../mods-available/ssl.* ._
        

        ou bien :

        $ a2enmod ssl_
        
      • Debian propose une configuration toute prête pour activer ssl par défaut pour les sites, elle se trouve dans /etc/apache2/sites-available/default-ssl et peut être activée :
        • avec la commande
          $ a2ensite default-ssl_
          
        • manuellement en faisant un lien :
          $ ln -s /etc/apache2/sites-available/default-ssl /etc/apache2/sites-enabled/_
          
        • Il est également possible d'activer soi-même ssl en ajoutant aux hôtes virtuels la directive SSLEngine on.

    4.7.2 Création des clefs et d'un certificat de test

    1. création des répertoire réceptionnant les clefs et les certificats
      $ mkdir /etc/apache2/ssl.crt /etc/apache2/ssl.key_
      
      • création de la paire de clefs :
        $ cd /etc/apache2/ssl.key_
              
        $ openssl genrsa -des3 1024 > localhost.key_
        
        
      • création du fichier de requêtes pour demande de certificat, puis du certificat :
        $ openssl req -new -key localhost.key -out ../ssl.crt/localhost.csr_
        
        $ cd /etc/apache2/ssl.crt_
        
        $ openssl req -x509 -key ../ssl.key/localhost.key -in
        localhost.csr -out localhost.crt_
        
      • annonce des clefs et du certificat dans /etc/apache2/sites-available/default-ssl
      • mot de passe automatique
        $ mkdir /etc/apache2/ssl.pass_
        
        $ vi /etc/apache2/ssl.pass/localhost.passwd_
        
        > #!/bin/sh
        > echo mot_de_passe
        
        $ chmod +x localhost.passwd_
        

    éditer /etc/apache2/mods-available/ssl.conf et modifier la ligne SSLPassPhraseDialog comme suit :

    > SSLPassPhraseDialog exec:/etc/apache2/ssl.pass/localhost.passwd
    

    Il n'y a plus qu'à redémarrer.


    Footnotes:

    1 Sauf configuration spéciale de sudo.

    1 FOOTNOTE DEFINITION NOT FOUND: 1

    Author: Jean-Baptiste Bourgoin <mesmento@linuxette.home>

    Date: 2009-06-24 12:42:24 CEST

    HTML generated by org-mode 6.27a in emacs 22

    Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]
     
    IMP :: RSS :: HTML :: TXT :: Clone :: Historique :: Propriétaire : NobboT ::