web-dev-qa-db-fra.com

Apache dit que la documentation n'existe pas quand elle

J'ai utilisé Webmin pour créer l'hôte virtuel suivant:

<VirtualHost *:80>
        DocumentRoot "/var/www/whatever"
        ServerName whatever.ourdomain
        <Directory "/var/www/whatever">
                allow from all
                Options +Indexes
        </Directory>
</VirtualHost>

Et quand redémarrant Apache, je reçois

Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist

La chose est que le répertoire existe absolument. Je regarde juste à ça. pwd me montre que c'est mon annuaire actuel, etc. Ce n'est pas si difficile de bien épeler. Je ne trouve aucune autre erreur ou avertissements dans les journaux httpd. Apache: Apache possède le répertoire et tous les sous-répertoires/fichiers. Il n'y a aucun lien symbolique ou quoi que ce soit impliqué ici. Qu'est-ce que je manque ou que dois-je regarder d'autre pour déterminer pourquoi c'est?

Os est Centos 6.0

12
Jake Wilson

La première chose qui a sauté dans mon esprit est que Apache a la permission d'accéder à ce répertoire?

Aussi, ceci: https://stackoverflow.com/questions/3948038/apache-says-my-documenttroot-directory-duesnt-exist

8
yrosen

Voici une approche de tutoriel de l'affaire SELINUX:

Découvrez si SELINUX est actif:

 $ sestatus
 SELinux status:                 enabled
 SELinuxfs mount:                /selinux
 Current mode:                   enforcing
 Mode from config file:          enforcing
 Policy version:                 24
 Policy from config file:        targeted

Si tel est le cas, une vérification comparative pourrait aider. Par exemple, un serveur a une documentation par défaut à /var/www/html, mais nous le voulons ailleurs comme /path/to/document/root.

Si SELINUX ne joue pas activement avec la ressource, ls -dZ sur le répertoire montrera quelque chose comme:

$ ls -dZ /path/to/document/root
? /path/to/document/root/

D'autre part, si les contextes SELINUX sont appliqués, ls -dZ ressemble plus à:

$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root

Si nous comparons à une documentation de travail, cela ressemblerait à quelque chose comme:

$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html

Les _r et _t se rapporte à -r (--role et -t (--type) arguments à chcon. Voici une page d'homme coupée:

NAME
   chcon - change file security context

SYNOPSIS
   chcon [OPTION]... CONTEXT FILE...
   chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
   chcon [OPTION]... --reference=RFILE FILE...

DESCRIPTION
   Change the security context of each FILE to CONTEXT.  With --reference,
   change the security context of each FILE to that of RFILE.

   --reference=RFILE
          use RFILE's security context rather than  specifying a CONTEXT value

   -R, --recursive
          operate on files and directories recursively

À première estimation, ce qui suit pourrait sembler fonctionner, mais pourrait ne pas.

$ Sudo chcon -R -t httpd_sys_content_t /path/to/document/root

Si le serveur Web ne peut toujours pas voir la documentation, notez que le contexte compte tout le chemin de la racine:

$ Sudo chcon -R -t httpd_sys_content_t /path/to/document
$ Sudo chcon -R -t httpd_sys_content_t /path/to
$ Sudo chcon -R -t httpd_sys_content_t /path

À ce stade, le serveur Web peut voir le répertoire.

Oui, j'ai appris le difficile de ce soir.

Remarque: l'utilisation de chcon Conceptuellement conceptuellement un inconvénient par Documentation RedHat ( 5.6.1. Modifications temporaires: Chcon ) qui indique:

The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.

Utilisez Semanage et Restorecon Pour faire plus de changements permanents. Un bref exemple:

 $ Sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
     "/path/to/document/root(/.*)?"
 $ Sudo restorecon -FR /path/to/document/root

En ce qui concerne Restorecon, Notez que F est nécessaire pour affecter tout le contexte (c'est-à-dire utilisateur et type). En outre, r signifie apporter des modifications récursives. Arguments V ou P Peut montrer des progrès sous une mode verbeuse ou terrese. Utilisez FRNV Pour voir ce qui se passerait sans apporter de modifications.

Une fois Semanage est utilisé de cette manière, il est possible d'afficher des modifications de sécurité locales avec une commande comme:

$ Sudo semanage export

La sortie de Semanage export peut être enregistrée et utilisée par Semanage Importer Pour faciliter l'application d'un ensemble de modifications à divers systèmes.

Remarque: cette réponse fournit un contexte de type le plus élémentaire pour un site. La sécurité peut être beaucoup plus granuleuse. Par exemple, voir une liste de types pouvant s'appliquer aux pages de serveur Web avec une commande comme:

$ seinfo -t | grep http

Remarque: utilitaires comme Semanage et Seinfo Peut ne pas être installé par défaut. Au moins sur certaines distributions, les packages requis peuvent être nommés quelque chose comme ceci:

policycoreutils-python
setools-console
16
kbulgrien

Cela ressemble à SELINUX.Je suggérerait de travailler avec elle. Regardez dans le répertoire/var/journal/audit pour confirmer.

Pire cas, vous pouvez toujours désactiver SELINUX, comme indiqué précédemment, mais je vous suggère de travailler avec elle à la place. Par exemple, si je devais créer un répertoire à utiliser avec Apache, il n'aura pas le bon contexte, comme indiqué ici.

[root@amp23140 www]# ls -Z
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 whatever

Donc, si cela se produit, j'applique simplement le contexte d'un autre répertoire, lequel dans ce cas est HTML:

[root@amp23140 www]# chcon whatever --reference=html
[root@amp23140 www]# ls -lZ
drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 whatever
6
Rilindo

Utilisez cette commande en root pour modifier le contexte de sécurité de "httpd_sys_content_t" qui permet à Apache d'exécuter.

chcon -R -h -t httpd_sys_content_t /var/www/whatever

Utilisation ls -dZ /var/www/whatever Pour voir les détails de sécurité

0
user236790