# [apache] j'ai cassé ma page d'acceuil ... (résolu)

## loopx

Bonjour, 

Après quelques récents souci de compilation et de sécurité hardened avec PHP, j'ai enfin réussi à rendre mes site à nouveau opérationnel ... Sauf que voilà, un truc étrange s'est produit ... 

Typiquement, dans apache, il y a une page de garde (pour /) ... qui fonctionnait très bien et depuis ces compilations, elle ne fonctionne plus (accès direct aux répertoire ... et uniquement répertoire, aucun fichier (c'est louche déjà de pas avoir d'index mais c'est peut être normal)). J'ai donc décidé de faire une redirection du contexte principal vers le contexte de mon mediawiki (ce qui est plus propre) or, maintenant, j'ai un accès refusé  :Very Happy: 

Forbidden

You don't have permission to access / on this server.

Apache Server at serveur Port 80

J'ai modifié le fichier "00_default_vhost.conf" pour qu'il ressemble à ceci (et j'ai commenté l'ancien) :

```

#<VirtualHost *:80>

#       ServerName localhost

#       Include /etc/apache2/vhosts.d/default_vhost.include

#       <IfModule mpm_peruser_module>

#               ServerEnvironment apache apache

#       </IfModule>

#</VirtualHost>

<VirtualHost *:80>

        ServerName test

        DocumentRoot /var/www/localhost/htdocs

        <Directory /var/www/localhost/htdocs/mediawiki>

                AllowOverride All

                #Options All -Indexes

                Order allow,deny

                Allow from all

        </Directory>

</VirtualHost>

</IfDefine>

```

et depuis lors, j'ai l'accès refusé ci dessus.. Pourquoi ? Je ne comprend pas ..

Ce que je comprend encore moins, c'est que j'ai cette erreur avec la soit disant page par défaut :

[Mon Dec 15 04:03:57 2008] [error] [client 10.2.1.6] File does not exist: /var/www/localhost/icons/blank.gif, referer: http://serveur/

[Mon Dec 15 04:03:57 2008] [error] [client 10.2.1.6] File does not exist: /var/www/localhost/icons/folder.gif, referer: http://serveur/

Et en effet, les fichier n'existe pas ... Donc, ou se trouve t'il ? Comment ont-il disparu ?  Ou est la page web qui utilsie ces images ?

Je comprend rien, tout ce que j'ai fais c'est utiliser un profile hardened non périmé et recompiler avec gcc4 et pas gcc3 ..

EDIT: en fait, j'ai pas de redirection de la page d'acceuil vers mon wiki, et aucun site ne fonctionne sauf le wiki ... (à cause de l'include, mais si je rajoute l'include commenté plus haut, j'ai accès au répertoire à la racine et pas à la page d'acceuil d'apache :s) ..

EDIT2: 

```

serveur vhosts.d # emerge -pv apache php

These are the packages that would be merged, in order:

Calculating dependencies... done!

[ebuild   R   ] www-servers/apache-2.2.9-r1  USE="ldap ssl threads -debug -doc (-selinux) -sni -static -suexec" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_dbd authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif speling status unique_id userdir usertrack vhost_alias -asis -authn_alias -cern_meta -charset_lite -dumpio -log_forensic -proxy_ftp -substitute -version" APACHE2_MPMS="-event -itk -peruser -prefork -worker" 0 kB

[ebuild   R   ] dev-lang/php-5.2.6-r7  USE="apache2 berkdb cgi cjk cli crypt ctype ftp gd gdbm ldap mhash mysql nls pcre pic readline session snmp sockets ssl threads truetype unicode xml zlib -adabas -bcmath -birdstep -bzip2 -calendar -cdb -concurrentmodphp -curl -curlwrappers -db2 -dbase -dbmaker -debug -discard-path -doc -empress -empress-bcs -esoob -exif -fastbuild -fdftk -filter -firebird -flatfile -force-cgi-redirect -frontbase -gd-external -gmp -hash -iconv -imap -inifile -interbase -iodbc -ipv6 (-java-external) -json -kerberos -kolab -ldap-sasl -libedit -mcve -msql -mssql -mysqli -ncurses -oci8 (-oci8-instant-client) -odbc -pcntl -pdo -posix -postgres -qdbm -recode -reflection -sapdb -sharedext -sharedmem -simplexml -soap -solid -spell -spl -sqlite -suhosin -sybase -sybase-ct -sysvipc -tidy -tokenizer -wddx -xmlreader -xmlrpc -xmlwriter -xpm -xsl -yaz -zip -zip-external" 0 kB

Total: 2 packages (2 reinstalls), Size of downloads: 0 kB

```

----------

## scherz0

Pas impossible que le serveur par défaut ne soit pas celui que tu penses.  Que dit httpd -S ?

----------

## loopx

Neni hein  :Smile:   c'est le bon serveur, c'est du apache bien pur ... qui a perdu sa page d'acceuil ...   Mais j'ai pas touché au config pour que ca saute, c'est ca que je comprend pas. Faut-il un use spécial pour avoir la page d'acceuil dans apache?

HTTPS est pas utilisé  :Wink: 

----------

## scherz0

 *loopx wrote:*   

> Neni hein   c'est le bon serveur, c'est du apache bien pur ... qui a perdu sa page d'acceuil ...   Mais j'ai pas touché au config pour que ca saute, c'est ca que je comprend pas. Faut-il un use spécial pour avoir la page d'acceuil dans apache?
> 
> HTTPS est pas utilisé 

 

Par serveur je voulais dire vhost.  l'option -S de httpd permet de comprendre comment apache interprète les fichiers de conf en terme de vhost, notamment lequel sera le vhost par défaut pour chaque combinaison ip/port.

Même si la config n'a pas été modifiée, le changement de comportement pourrait venir simplement d'un module disparu ou apparu.

À ce sujet, dans le contexte d'un serveur public, je déconseillerais fortement l'utilisation de IfDefine et IfModule.  Jamais compris à quoi ça pourrait bien être utile concrètement, et ça me semble potentiellement dangeureux.  Mieux vaut un serveur qui ne démarre pas parce qu'il manque un module, plutôt qu'un serveur qui démarre mais ne fonctionne pas comme prévu.

En fait, toujours pour un serveur à usage public, je conseillerais d'écrire soi-même la config complète du serveur, et de ne pas utiliser des fichiers de conf génériques.  Mais c'est un autre sujet...

----------

## loopx

Ok pour la config complète, je me dis que si mon apache va plus, c'est qu'il est l'heure de le configurer proprement  :Smile: 

Pour la config de la sécurity, ou cela doit-il se faire ? Dans httpd.conf ou via vhost.d ?

Dans vhost.d, j'ai 3 fichier par défaut (1 pour ssl, 1 pour vhost et 1 .include qui est inclu dans les deux précédants). Pourrais-je les supprimer et ajouter uniquement mes fichiers de config ? Et, aurais-tu un exemple ? (ca m'aiderais  :Smile: ) ou un bon howto  :Wink: 

Sinon, voilà un truc en plus : 

```

apache2: Could not reliably determine the server's fully qualified domain name, using 10.2.1.62 for ServerName

VirtualHost configuration:

Syntax OK

```

Ce serveur écoute sur 3 interfaces minimum ... Je possède des sites Web sous "htdocs" et je n'ai pas vraiment besoin d'utiliser les vhost pour le moment, mais de ce que je comprend, les vhosts peuvent servir à la secu (sans vraiment utiliser les vhost avec le nom de l'url donc). Est-ce correct ?

Donc voilà, j'ai le répertoire htdocs, et des répertoires sous htdocs. Je voudrais maintenant que la racine de serveur (htdocs) (qui ne renvoie plus de page d'acceuil) ne se mette pas à afficher la liste des répertoires présents! Donc, si on tombe sur la racine, ce serait chouete de le renvoyer directement vers un site caché sous htdocs (mediawiki en locurence). De plus, j'aimerais savoir comment fournir accès à certain site selon l'ip ou l'interface par laquel on se connecte (donc, si connection par ip public ... qui passe par une interface bien précise, refuser l'accès à un site). 

Je ne pense pas que cette config soit très complexe, elle est plutot très basique meme  :Wink: . 

Une idée ?

EDIT: j'ai un début de sécu .. Mettre ServerTokens à Prod dans "/etc/apache2/httpd.conf". ESt-ce juste ? J'ai appris qu'en faisant un telnet sur le port 80, on pouvait connaitre la version mineur de apache, très dangereux. Je suis arrivé à faire cette requette via la commande pour HTTP : "HEAD / HTTP/1.0". Ce que je ne comprend pas, c'est que cela à fonctionné 1 fois (j'ai bien vu la version et tout et tout) ... mais maintenant que je le refais, ca ne fonctionne plus. C'est incompréhensible ... Je pense que c'est parce que tout mes sites sont actuellement en accès refusé  :Very Happy:   (ca parrait logique, j'ai du refaire un reload entre deux telnet). Est-ce correct l'option ServerTokens ?

EDIT2: comment s'y prend t'on pour la secu via vhost ? Un fichier par site ? + 1 fichier pour la racine ? J'aimerais bien réactiver l'accès uniquement à mon mediawiki, histoire que j'ajoute des infos que j'ai apprise depuis hier ... et la secu apache que je vais aussi ajouter ...

EDIT3: j'ai ceci comme processus lancé : 

```

root     16702  0.5  3.8  32404 14480 ?        Ss   17:27   0:01 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D NAGIOS -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start

apache   18124  0.0  1.2  31900  4756 ?        S    17:30   0:00 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D NAGIOS -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start

apache   18129  0.0  1.8 245636  6884 ?        Sl   17:30   0:00 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D NAGIOS -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start

apache   18157  0.0  1.7 245500  6492 ?        Sl   17:30   0:00 /usr/sbin/apache2 -D DEFAULT_VHOST -D INFO -D LANGUAGE -D SSL -D SSL_DEFAULT_VHOST -D PHP5 -D NAGIOS -d /usr/lib/apache2 -f /etc/apache2/httpd.conf -k start

```

Est-ce que ca à l'air correct ? Est-ce normal que le premier soit lancé par root ?

----------

## scherz0

 *loopx wrote:*   

> 
> 
> Pour la config de la sécurity, ou cela doit-il se faire ? Dans httpd.conf ou via vhost.d ?
> 
> 

 

Qu'est-ce que la config de la sécurity ?

 *Quote:*   

> 
> 
> Dans vhost.d, j'ai 3 fichier par défaut (1 pour ssl, 1 pour vhost et 1 .include qui est inclu dans les deux précédants). Pourrais-je les supprimer et ajouter uniquement mes fichiers de config ? Et, aurais-tu un exemple ? (ca m'aiderais ) ou un bon howto 
> 
> 

 

En résumé la config de mes serveurs apache est généralement organisée comme ça :

```

  Config de base : user, group, limites (MaxClients, ThreadsPerChild, etc), KeepAlive, ErrorLog

  Config de base ssl quand c'est le cas (SSLRandomSeed, SSLSessionCache, etc)

  <Directory />

     Order deny,allow

     Deny from all

   </Directory>

  Listen ....

  NameVirtualHost quand c'est le cas

  puis un Include pour chaque vhost

```

Difficile de donner un exemple concret, concis et pertinent.  C'est très variable en fonction de ce qu'on veut obtenir du serveur...

La doc disponible à http://httpd.apache.org/docs/2.2/ est excellente   :Wink: 

 *Quote:*   

> 
> 
> Sinon, voilà un truc en plus : 
> 
> ```
> ...

 

Si c'est bien le résultat de 'httpd -S', alors tu n'as aucun vhost car apache ne peut pas résoudre le nom de tes vhosts (ServerName test dans la config que tu as donnée).  Donc les requêtes sont prises en charge par la config racine du serveur, dont le DocumentRoot semble être /var/www/localhost/

Ajoute une ligne

  10.2.1.62  test

dans /etc/hosts, et ça devrait aller mieux concernant ton vhost.  Apache doit être en mesure de résoudre tous les noms par lesquels tes vhosts sont accessibles.

 *Quote:*   

> 
> 
> Ce serveur écoute sur 3 interfaces minimum ... Je possède des sites Web sous "htdocs" et je n'ai pas vraiment besoin d'utiliser les vhost pour le moment, mais de ce que je comprend, les vhosts peuvent servir à la secu (sans vraiment utiliser les vhost avec le nom de l'url donc). Est-ce correct ?
> 
> 

 

Pour l'aspect sécu, je ne vois pas.  Par contre, même pour un site unique l'utilisation de vhost n'est pas inutile, sinon ça peut virer au cauchemar le jour ou tu veux ajouter un 2ème site.

 *Quote:*   

> 
> 
> Est-ce que ca à l'air correct ? Est-ce normal que le premier soit lancé par root ?
> 
> 

 

Normal, sinon apache ne pourrait pas écouter le port 80.  Mais ce sont les processus fils (user apache) qui traitent les requêtes.

----------

## loopx

Cool, merci  :Smile: 

Quand je parle de la sécurité, c'est juste les accès via une range d'ip ou autre  :Wink:   de manière à masquer certain site.

Mes site sont accessible via le net et via l'intranet. Si je fait un vhost, ca ira pour le net mais qu'en est-il des pc sur l'intranet qui n'utilise par exemple que l'ip du serveur comme url ?

Je vais lire la doc  :Cool:   :Smile: 

----------

## scherz0

 *loopx wrote:*   

> Cool, merci 
> 
> Quand je parle de la sécurité, c'est juste les accès via une range d'ip ou autre   de manière à masquer certain site.
> 
> 

 

Le contrôle d'accès via Allow se fait au niveau des <Directory> et/ou <Location>

 *Quote:*   

> 
> 
> Mes site sont accessible via le net et via l'intranet. Si je fait un vhost, ca ira pour le net mais qu'en est-il des pc sur l'intranet qui n'utilise par exemple que l'ip du serveur comme url ?
> 
> 

 

Pas de pb, les vhosts peuvent être associés à plusieurs IP/port et avoir plusieurs noms.  ServerAlias pour le nom canonique, et ServerAlias pour tous les autres.

----------

## loopx

J'ai fais cette configuration dans le répertoire "vhosts.d" :

```

serveur modules # cat /etc/apache2/vhosts.d/pix-mania.conf

Listen 80

<VirtualHost *:80>

        DocumentRoot /var/www/localhost/htdocs

        <Directory /var/www/localhost/htdocs>

                Order allow,deny

                Deny from all

        </Directory>

        <Directory /var/www/localhost/htdocs/mediawiki>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/cacti>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/nagios>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/test>

                Order allow,deny

                Allow from all

        </Directory>

</VirtualHost>

```

J'ai fais très léger (trop simple peut être ?) ... mais en tout cas, ca fonctionne comme je veux  :Smile:    la racine est inaccessible et les sites le sont  :Wink: 

Mais maintenant, comment faire la redirection de la racine vers un des sous sites ?

----------

## loopx

J'ai trouvé pour la redirection, mes sites sont configuré comme je le veux :

```

<VirtualHost *:80>

        DocumentRoot /var/www/localhost/htdocs

        RedirectMatch ^/$ /mediawiki

        <Directory /var/www/localhost/htdocs>

                Order allow,deny

                Deny from all

        </Directory>

        <Directory /var/www/localhost/htdocs/mediawiki>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/cacti>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/nagios>

                Order allow,deny

                Allow from all

        </Directory>

        <Directory /var/www/localhost/htdocs/test>

                Order allow,deny

                Allow from all

        </Directory>

</VirtualHost>

```

Le tit redirect renvoie ma page d'acceuil vers "mediawiki". Mais, est-le bon endroit pour cette instruction ou faut t'il la mettre dans le répertoire concerné par cette redirection (../htdocs) ?

Est-ce que ma configuration pourrait être satisfaisante pour le peu que je lui demande (niveau sécurité) ?

----------

## loopx

J'ai ceci dans les logs des erreur d'apache :

```

[Mon Dec 15 23:57:32 2008] [error] [client 83.101.5.155] client denied by server configuration: /var/www/localhost/htdocs/Accueil

[Mon Dec 15 23:57:36 2008] [error] [client 83.101.5.155] client denied by server configuration: /var/www/localhost/htdocs/favicon.ico, referer: http://loopx.dyndns.org/mediawiki/index.php/Accueil

[Tue Dec 16 00:01:12 2008] [error] [client 62.212.103.27] client denied by server configuration: /var/www/localhost/htdocs/Accueil

[Tue Dec 16 00:01:20 2008] [error] [client 62.212.103.27] client denied by server configuration: /var/www/localhost/htdocs/favicon.ico

[Tue Dec 16 00:21:11 2008] [error] [client 10.2.3.41] client denied by server configuration: /var/www/localhost/htdocs/favicon.ico, referer: http://10.2.5.2/mediawiki/index.php/Le_stockage_et_le_partage_de_fichiers

[Tue Dec 16 00:41:04 2008] [error] [client 10.2.3.76] client denied by server configuration: /var/www/localhost/htdocs/favicon.ico, referer: http://10.2.5.2/mediawiki/index.php/Ntop

[Tue Dec 16 01:01:31 2008] [error] [client 10.2.1.6] client denied by server configuration: /var/www/localhost/htdocs/Liens, referer: http://serveur/mediawiki/index.php/Accueil

[Tue Dec 16 01:03:23 2008] [error] [client 10.2.1.6] client denied by server configuration: /var/www/localhost/htdocs/Accueil, referer: http://serveur/mediawiki/index.php/Apachee

```

pourtant, les pages fonctionne  :Surprised:    comment je fais pour qu'il se taise  :Surprised:  ?

EDIT: ok j'ai trouvé, j'ai authoriser la connexion sur "htdocs", mais j'ai désactiver l'affichage des fichiers/répertoire ... Avec la redirection, "/" ne fait pas d'erreur avec l'index, et mediawiki ne crie plus  :Smile: 

Tout est bien qui fini bien  :Very Happy: 

Merci pour tout ^^

----------

## scherz0

 *loopx wrote:*   

> J'ai trouvé pour la redirection, mes sites sont configuré comme je le veux :
> 
> [...]
> 
> Le tit redirect renvoie ma page d'acceuil vers "mediawiki". Mais, est-le bon endroit pour cette instruction ou faut t'il la mettre dans le répertoire concerné par cette redirection (../htdocs) ?
> ...

 

Dans ton cas peu importe.  Si les perfs étaient un facteur important, la redirection serait mieux dans htdocs.

 *Quote:*   

> Est-ce que ma configuration pourrait être satisfaisante pour le peu que je lui demande (niveau sécurité) ?

 

Tu peux ajouter avant <Directory ...htdocs> :

```

  <Directory /> 

    AllowOverride       None 

    Options             None 

    Order               Allow,Deny 

    Deny                from all 

  </Directory> 

```

Par contre, <Directory /var/www/localhost/htdocs/mediawiki> et les suivants sont inutiles : ils héritent de <Directory ...htdocs> avec les mêmes propriétés.

----------

