previous up next contents
Previous: 3 Routage Up: Nullix 107 Next: 5 Uniformisation des menus   Contents

Subsections

4 Serveur apache

4.1 Notes $ SuSE-10.2$

Cette section est destinée à être re-ventilée dans les autres sections

4.1.1 Configuration

  1. Les fichiers *.conf sont là où ils se trouvent. Les nouveaux fichiers sont à placer en : /etc/apache2/conf.d/
  2. Server-info /etc/apache2/extra/httpd-info.conf: localhost. Valider le chargement du module dans /etc/sysconfig/apache2.
  3. Fichier /etc/apache2/conf.d/htdig.conf :
    .Alias /htdig "/srv/www/htdig" 
    <Directory "/srv/www/htdig"> 
    AllowOverride None 
    Order allow,deny 
    Allow from all 
    </Directory>

4.1.2 Gestion des erreurs

  1. Gestion des fichiers error.log.bz2 : root recopie ces fichiers et les attribue à logger
  2. Déziper tout cela. Faire attention : cela peut être volumineux...
  3. grep "File does not exist" error.log-200711* | sed -e "s¶.*File does not exist: ¶¶g" | sort -u
  4. Les fichiers dans les répertoires personnels : créer un fichier .htaccess (au plus près des fichiers manquants), contenant
    ## both addresses MUST be full-qualified 
    Redirect 301 /~douillet/toto-old http://www.douillet.info/~douillet/toto-new 
    Bien entendu, tout cela est sous le contrôle de /etc/apache2/extra/httpd-userdir.conf.
  5. Pour les fichiers dans le répertoire serveur : le même mécanisme présuppose l'ouverture des droits adéquats (la racine est mieux protégée que les individus). Cela se trouve dans /etc/apache2/default-server.conf. Prise en compte par /etc/init.d/apache2 reload .

4.2 Mpm

.Apache (2007)

4.3 Principes de base

  1. Une arborescence html est destinée à être consultée. Et cette consultation ne peut avoir lieu sans une intrusion de l'extérieur vers la machine qui exécute cette arborescence. Il s'agit de garder le contrôle de cette intrusion... et de ne pas ouvrir plus de portes que nécessaire. La règle de base est d'interdire en général et de n'autoriser qu'en particulier.
  2. Les autorisations Unix sont évidemment prioritaires. Pour que la chose puisse fonctionner, il faut que chacun des répertoires emboîtés depuis la racine soit exécutable worldwide (même s'il n'est pas lisible et encore moins inscriptible) et que chaque fichier utilisé soit lisible worldwide (sans être ni inscriptible ni exécutable).
  3. Par dessus ces autorisations Unix, il y a les autorisations Apache. Le coeur du mécanisme est constitué par le fichier /etc/httpd/httpd.conf. Pour la $ SuSE-8.1,$ le répertoire attribué au serveur est /srv/www (au lieu de /usr/local/httpd/) et le répertoire exporté comme racine du site web est /srv/www/htdocs (au lieu de /usr/local/httpd/htdocs).
  4. Avec la $ SuSE-8.1,$ il faut fournir la page d'accueil racine. Dans tous les cas, cette page est cruciale pour le référencement du site.
  5. Un mécanisme de mascarade (cf le paragraphe correspondant) permet de monter différents répertoires à un endroit ou un autre du site. Bien comprendre qu'il y a des autorisations dépendant de l'adresse réelle (directory) et d'autres de l'adresse de montage (location).
  6. Bien entendu, il faut mettre le serveur à jour après modification des scripts de configuration. On en profite pour vérifier certaines attributions de droits et de propriété. Le batch qsa_syns_apache fait cela.
  7. Modifier le fichier $ SuSE-8.1$ /etc/sysconfig/apache pour :

    1. indiquer le type de serveur (slim/mid/thick/enterprise)
    2. indiquer DOC_SERVER="no" (utilisé aussi par la page racine)
  8. Modifier le fichier de configuration /etc/httpd/httpd.conf sur les points suivants :

    1. STARTSERVERS=50 MAXSPARESERVERS=20 MINSPARESERVERS=10 MAXCLIENTS=150.
    2. fichiers log : acces.log et error.log.
    3. Type de log : complet, avec appel dns. Pour cela, il faut :
      HostnameLookups On
      CustomLog /var/log/httpd/access.log combined
  9. Vérifier le chargement des modules php et perl.

4.4 Le mécanisme de lancement

  1. Le lancement ou non du serveur est contrôlé par le mécanisme des run-level.
  2. Le lancement effectif est contrôlé par le batch /etc/init.d/apache start, qui transforme un certain nombre de drapeaux de configuration en variables d'aiguillages qui contrôleront le fonctionnement de /etc/httpd/httpd.conf (tests IfDefined).
  3. Pour la $ SuSE-7.2$, les drapeaux de configuration sont stockés dans les fichiers /etc/rc.config et /etc/rc.config.d/apache.rc.config. Pour la $ SuSE-8.0$, ces fichiers sont dans /etc/sysconfig/. L'idée sous-jacente est que les drapeaux sont plutôt sous le contrôle du webmaster, et la config plutôt sous le contrôle de YaST.

  4. Les fichiers de configuration s'appellent les uns les autres. Dans l'ordre

    1. /etc/httpd/httpd.conf. A la fin, appelle suse_include.
    2. /etc/httpd/suse_include.conf. Ne contient qu'un appel aux fichiers mod_php4, suse_public_html, pldx_docs.
    3. /etc/httpd/mod_php4.conf : cf Subsection 4.9.
    4. /etc/httpd/suse_public_html.conf : cf §§ 5.
    5. /etc/httpd/pldx_docs.conf qui contrôle le montage des fichiers documentation dans l'arborescence du serveur (cf. §§ 6).
  5. Le montage des répertoires personnels, à l'adresse //site_name/ user_name/, est contrôlé par le fichier /etc/httpd/suse_public_html.conf (appelé depuis le fichier de configuration principal par un include). Par défaut, le répertoire monté est /home/user_name/public_html/.
  6. Fichiers de documentation

    /docs/
    /usr/share/doc/
    /gimp/
    /usr/share/gimp/1.2/help/C/
    /susehelp/
    /usr/share/susehelp/docserver/
    /var/lib/susehelp/pac
    /var/lib/susehelp/pac
    /usr/share/susehelp/img/
    /usr/share/susehelp/img/

4.5 Les processus d'autorisation

  1. AllowOverride

    None, All, or any combination of Options, FileInfo, AuthConfig, and Limit.

    They control which options the .htaccess files in directories can override.

  2. Options

    None, All, or any combination of Indexes, Includes, IncludesNoExec, FollowSymLinks,  
    SymLinksIfOwnerMatch ExecCGI or MultiViews
      Note that MultiViews must be named explicitly : Options All doesn't give it to you.

  3. Allow, Deny :

    1. Order allow, deny 
      Allow from all
    2. Order deny, allow 
      Deny from all  
      Allow from localhost xxx.xxx.xxx.xxx
    They control who can get stuff from this server.

4.6 Protection des racines

  1. Racine du système de fichiers LOCAL

    <Directory /> 
        AuthUserFile  /etc/httpd/passwd 
        AuthGroupFile /etc/httpd/group 
        Options -FollowSymLinks 
        AllowOverride None 
    </Directory>
  2. Racine EXPORTÉE par le serveur

    DocumentRoot "/usr/local/httpd/htdocs" 
     

    <Directory "/usr/local/httpd/htdocs"> 
        Options Indexes -FollowSymLinks +Includes MultiViews 
        AllowOverride None 
        Order allow,deny 
        Allow from all 
        <IfDefine DAV> DAV On </IfDefine> 
    </Directory>

    En particulier, il faut que le fichier de base du serveur s'appelle explicitement index.html, puisque les liens symboliques ne sont pas autorisés.

  3. Configuration locale à travers les fichiers .htaccess
AccessFileName .htaccess  

<Files ~ "^\.ht"> 
     Order allow,deny  $ \spadesuit$ Deny from all 
</Files>

 

4.7 Mascarades

4.7.1 Répertoire principal des serveurs personnels

UserDir public_html

<Directory /*/public_html>  
   AllowOverride FileInfo AuthConfig Limit 
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec 
   <Limit GET POST OPTIONS PROPFIND> 
     Order allow,deny 
     Allow from all 
   </Limit> 
   <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> 
     Order deny,allow 
     Deny from all 
   </Limit> 
</Directory>

4.7.2 Pictogrammes

Alias /icons/       /usr/local/httpd/icons/ 
<Directory "/usr/local/httpd/icons"> 
  Options Indexes MultiViews  $ \spadesuit$ AllowOverride None  $ \spadesuit$ Allow from all 
</Directory>

4.7.3 Documentation

Alias /hilfe/       /usr/doc/susehilf/ 
Alias /apache/      /usr/doc/packages/apache/manual/ 
Alias /doc/         /usr/doc/ 
Alias /sdb/         /usr/doc/sdb/ 
Alias /howto/       /usr/doc/howto/
En l'état actuel des choses, il faut constituer une page d'accueil pour le répertoire howto car le "bon" répertoire est situé en howto/en/html. On ne s'en tire pas avec un simple renommage, car des liens existent déjà dans le système d'aide.

Par ailleurs, renommer hilfe/index.html pour que l'on tombe sur la version "english" et non "deutsch".

4.8 Exécutables cgi

Alias   /cgi-bin-sdb/ /usr/local/httpd/cgi-bin/ 
ScriptAlias /cgi-bin/ /usr/local/httpd/cgi-bin/ 
<Directory "/usr/local/httpd/cgi-bin"> 
  Options None  $ \spadesuit$ AllowOverride None  $ \spadesuit$ Allow from all  
</Directory> 
  
<Directory /usr/lib/sdb/cgi-bin> 
  Options +ExecCGI -Includes 
  AllowOverride None 
  SetHandler cgi-script 
</Directory> 

<Location /cgi-bin> 
  AddHandler  perl-script .pl 
  PerlHandler Apache::Registry 
  PerlSendHeader On 
  Options +ExecCGI 
</Location> 
  
AddType text/html .shtml 
AddHandler server-parsed .shtml 
AddHandler cgi-script .cgi 


4.9 Exécutables php

  1. /etc/httpd/mod_php4.conf contient

    AddType application/x-httpd-php4 .php 
    AddType application/x-httpd-php4 .php4 
    AddType application/x-httpd-php3-source .phps 

  2. La doc php se trouve en http://localhost/docs/packages/phpdoc/manual/
  3. Sécurité : le répertoire /srv/www/htdocs/phpMyAdmin doit être sécurité.

4.10 Personnalisation des messages d'erreur (Apache style)

  1. plain text

    ErrorDocument 500 "The server made a boo boo. 
    #  n.b.  the (") marks it as text, it does not get output 

  2. local redirects

    ErrorDocument 404 /missing.html 
    #  to redirect to local URL /missing.html 
    ErrorDocument 405 /cgi-bin/missing_handler.pl 
    #  redirecting to a script or a ssi-doc 

  3. external redirects

    ErrorDocument 402  
      http://some.other_server.com/subscription_info.html 
    #  N.B.: Many of the environment variables associated with  
    the original request will *not* be available to such a script. 


4.11 Webalizer

  1. Ce programme exploite les fichiers /var/log/httpd/access.log... qui doivent donc exister et être maintenus à une taille raisonnable (cf Section 1.4).
  2. Il est particulièrement intéressant d'avoir trace des Referrers, c'est à dire des liens qui ont amené à entrer dans le site. Il est donc nécessaire de configurer /etc/httpd/httpd.conf pour en garder trace :
    CustomLog /var/log/httpd/access.log combined
  3. Drapeaux à positionner dans le fichier webalizer.conf

    Incremental
    yes
    DNSChildren
    30 (permet d'accélérer le traitement)
    AllReferrers
    yes (page spéciale avec tous les Referrers du mois)
    GroupReferrer
    www.google google
    IgnoreURL
    /cgi-bin/Count.cgi
  4. Le batch de lancement doit sélectionner les fichiers à prendre en compte :
    newer=$site/index.html 
    for qui in `find $logdir/access.log* -newer $newer` ; do ...
  5. Prétraiter les fichiers logs de façon à attribuer à Google les urls 216.239.xx.xx
    s¶http://216.239\.[0-9]*\.[0-9]*/search¶http://www.google.xx.xx/search¶g
  6. Un post-traitement du fichier de statistiques permet de le mettre au look général du site (couleurs, boutons, etc).

4.12 Counter-cgi

  1. Une installation par copie des répertoires ne convient pas.
  2. Se connecter au site http://www.muquit.com/muquit/software/Count/Count.html et télécharger wwwcount2.5.tar.gz. Il n'est pas nécessaire d'imprimer la documentation depuis le site, car elle est incluse dans le fichier archive. Nous choisissons de placer cette archive dans /opt/cgi_scr/. Décompacter par gunzip * puis tar -extract -file=wwwcount2.5.tar.
  3. Se placer dans le répertoire /opt/cgi_scr/wwwcount2.5 qui vient d'être créé. Suivre la doc, c'est à dire lancer successivement make config.h, make all, make cfg, et enfin make install. La configuration consiste en particulier à choisir les répertoires.
  4. Le premier batch : make config.h donne à choisir certaines options. Nous retenons :

    CgiBinDir=/srv/www/cgi-bin

    BaseDir= /srv/www/Counter

    ConfDir= /srv/www/Counter/conf

    ConfFile=count.cfg

    DataDir=/srv/www/Counter/data

    DigitDir=/srv/www/Counter/digits

    LogDir=/var/log/counter

    LogFile=Count2_5.log

  5. Puis make all. Cela crée diverses choses, attribuées à user 500/ group 500.
  6. Puis make cfg. Cela crée un fichier count.cfg. Automatic files création =y, strict mode =n. Laisser l'affichage des messages d'erreur dans la phase de tests, puis la supprimer (pour ne pas publier les répertoires effectifs).
  7. Laisser l'affichage des messages d'erreur dans la phase de tests, puis la supprimer (pour ne pas publier les répertoires effectifs).
  8. La page de tests issue de testcount-sh peut être reprise pour en faire une page active. La nouvelle version figure dans les pages de test du site.
  9. Configuration : le répertoire ~Counter/data doit appartenir à l'utilisateur wwwrun. Les images à incruster doivent être dans les répertoires ~Counter/digits/xx. Et bien entendu : recopier les valeurs des compteurs qui sont dans DataDir
  10. Utilisation effective : décrire le compteur comme un bouton de la barre de titre.

4.13 Moteur de recherche htdig ($ SuSE-7.2$)

  1. Tout le barnum htdig se retrouve en /opt/www/htdig. Ce n'est pas génial, car cela mélange des fichiers de configuration, des exécutables destinés aux créateurs des pages web, des bases de données et des exécutables au vol (cgi-bin).
  2. Créer des liens sur les exécutables depuis /opt/www/htdig/bin vers /usr/bin (de façon à les rendre accessibles sans surcharger le path).
  3. Les fichiers de configuration servent à la fois à la création et à l'exploitation. Ils doivent se trouver dans le répertoire /opt/www/htdig/conf/htdig.conf (fixé une fois pour toutes à la compilation de /cgi-bin/htsearch). Mais il est raisonnable que les utilisateurs puissent les modifier. Compromis : placer ces fichiers dans ~/qublic_bin/htdig/conf/ et les lier vers /opt/www/htdig/conf/
  4. Créer des fichiers de configuration. En particulier déclarer un "nom de base". Exclure les fichiers *.css et *.mws
  5. htdig -isv -c /opt/www/htdig/conf/nullix.conf

4.14 htdig ($ SuSE-8.1$)

  1. La documentation est toujours à l'adresse /usr/share/doc/packages/htdig. Tout le reste à changé de place (ancienne localisation : /opt/www/htdig).

    bindir
    /usr/bin : exécutables destinés aux créateurs des pages web. En particulier htdig, htmerge. Anciennement /opt/www/htdig/bin .
    confdir
    Ce répertoire des fichiers de configuration est fixé à la compilation du fichier /cgi-bin/htsearch. Mais il est raisonnable que les utilisateurs puissent les modifier. Compromis : placer ces fichiers dans /qublic_bin/htdig/conf/ et les lier vers $confdir. Actuellement /srv/www/htdig/conf/.
    commondir
    Contient les fichiers utiles pour la fabrication au vol des pages de recherche. En particulier header, footer, long, short.
    /htdig/
    Contient les images utilisées pour les pages de recherche. Ce répertoire doit être déclaré par un alias dans httpd.conf. En principe /srv/www/htdig/images/.
    dbdir
    bases de données. Les placer dans un répertoire où l'utilisateur peut écrire !
  2. Exemple de commande : htdig -isv -c $1 ; htmerge -sv -c $1
  3. La syntaxe est devenue plus stricte. L'affectation d'une variable se fait par "nom de variable", pas d'espace, deux points, espace, "valeur de la variable".
  4. Le nombre d'items par page est "matchesperpage" et pas "matches_per_page".
  5. ??? décrire le mécanisme d'utilisation (questionnaire)


4.15 Exploitation de httpd/error.log

4.15.1 Classer les erreurs par sortes

La toute première chose est de ventiler les différents messages par sortes. Le batch httpdian (user digger) fait cela. Au passage standardisation des adresses ip (trois chiffres par blocs) et réduction des redondances.

err_autres
Résidu de traitement des erreurs.
err_cgi-bin
Liste datée des problèmes de script. En gros : manquants ou placés dans un répertoire non exécutable. Il n'y a pas mention de la page appelante.
err_conf_deny
Liste datée des refus d'accès causés par la configuration du serveur.
Concerne par exemple les fichiers /usr/share/doc/
err_counter
Liste triée des fichiers manquants (non autorisés) pour le compteur
/usr/local/httpd/Counter/digits/A/{button_count.gif, button_count2.gif}
err_DB2
Messages non datés, issus de la compilation htdig.
missing files like .../htdig/common/{synonyms.db, word2root.db}.
err_file_deny
Liste datée des refus d'accès causés par la configuration unix des fichiers (en particulier fichiers qui ne sont pas world-readable).
err_link
Utilisation de liens dans un répertoire non autorisé. Remplacer cela par des pages de redirection tant que l'on reste dans la partie exportée de l'arborescence.
<meta http-equiv="refresh" content="1;url=http:xxx">
err_missing
Liste datée des pages manquantes. En principe, les mauvais liens sont repérés lors de l'indexation, et donc les pages manquantes sont liées à une exploration volontaire du site par des personnes extérieures...
err_ssl
"Child could not open SSLMutex lockfile /var/run/ssl_mutex.989 (System error follows) : No such file or directory (errno: 2)... 200Mo de logs en quelques heures.
err_variant
no acceptable variant: (= c'est quoi ??? )
/usr/local/httpd/htdocs/index.html
/opt/www/htdocs
err_virus
voir paragraphe "attaque contre système32".
list_cgi-bin
Liste triée des scripts manquants
/usr/local/httpd/cgi-bin/{Count.cgi, cgi_test.cgi, perl_test.pl, visitor.exe}
list_file_deny
Liste triée des pages dont l'accès est unix-interdit.
list_missing
Liste triée des pages manquantes, extraite de err_missing.
msg_notice
Messages datés signalement le lancement ou l'arrêt de httpd.

4.15.2 Erreurs de programmation

  1. Le lien automatisé de ~/2001/Cours2001/cours01 vers l'arrière ne devrait pas exister. De même le lien avance du cours 28.
  2. Au passage : le grand blanc au début des fichiers cours, et autres (les macros a_tex ???)
  3. Vérifier quels devoirs ont un devxx/devxx.dvi.gz ou un *.ps.gz et modifier le menu devoir en conséquence.
  4. Au passage : il faudrait un avertissement dans tous les fichiers codés avec T2H concernant la façon de configurer le navigateur.

4.15.3 Fichiers manquants

  1. Les fichiers webweb/gif manquaient. Un certain nombre de pictogrammes sont maintenant disponibles dans ~/gifs/. Créé le batch bin/Gif qui permet de créer une page avec ces pictogrammes. Placer cette page dans ~/webweb et aussi dans ~/gifs/ pour garder le contrôle du répertoire.

4.15.4 Liens et fichiers en trop

  1. Il restait à la racine une vieille page count.html
  2. Serveur de fichiers d'aide : contrôlé par la valeur de "DOC_SERVER=" dans /etc/rc.config. Si le drapeau vaut "yes", la valeur de DOC_ALLOW est prise en compte (localhost est une bonne valeur). On obtient les équivalences :

    \begin{tabular}{\vert l\vert l\vert}
\hline
répertoire d'origine&
mascarade\tab...
...
/usr/local/httpd/htdocs/manual/ &
/manual/\tabularnewline
\hline
\end{tabular}

  3. Serveur de ressources web. Il faut être attentif à ce que l'on publie. Examiner l'utilité d'un accès différentiel, avec contrôle explicite (password) ou un contrôle implicite (adresse du requérant par exemple).

4.15.5 Attaque contre winnt/system32/cmd.exe

Constaté la présence de paquets d'environ une dizaine de requêtes venant de 140 sites, constituant 40 commandes en tout (taux de coïncidence extraordinaire).

Le principe est la recherche d'une adresse commençant par
MSADC/ PBServer/ Rpc/ _mem_bin/ _vti_bin/ _vti_cnf/ adsamples/ c/ d/ iisadmpwd/ msadc/  
samples/ scripts/  
et se continuant par un nombre variable de ..\ pour se terminer par winnt/system32/cmd.exe.

Un certain nombre de \ sont masqués en %2f. L'objectif semble être un trou de sécurité dans un serveur, permettant d'accéder au système d'exploitation. Une exploration concernant les sites émetteurs est en cours. Il semble s'agir de sites ayant beaucoup de scripts java... et qui peuvent donc être eux-mêmes infectés.


previous up next contents
Previous: 3 Routage Up: Nullix 107 Next: 5 Uniformisation des menus   Contents


douillet@ensait.fr
2007-12-07