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 lors du redémarrage d'Apache, j'obtiens
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
Le fait est que le répertoire existe absolument. Je le regarde droit dans les yeux. pwd
me montre que c'est mon répertoire actuel, etc. Ce n'est pas si difficile de l'orthographier correctement. Je ne trouve aucune autre erreur ou avertissement dans les journaux httpd. apache: apache est propriétaire du répertoire et de tous les sous-répertoires / fichiers. Il n'y a aucun lien symbolique ou quoi que ce soit impliqué ici. Que manque-t-il ou que dois-je regarder pour déterminer pourquoi?
Le système d'exploitation est CentOS 6.0
apache-2.2
centos
Jake Wilson
la source
la source
DocumentRoot
, cela pourrait vous donner un aperçu de ce que le serveur Web voit. Vous pouvez également vouloir vérifier les autres répertoires le long du chemin, mais si c'est vraiment sous/var/www/
ceux-ci, cela ne devrait pas être un problèmeRéponses:
La première chose qui m'est venue à l'esprit est qu'Apache a-t-il la permission d'accéder à ce répertoire?
En outre, ceci: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
la source
apache:apache
, cependant j'ai suivi ce lien (qui est sur SO pour une raison quelconque?) Et en effet SELinux était le problème. SELinux cause plus de problèmes qu'il fait du bien imo.setenforce 0
résolu, mais en regardant les autorisationsls-laZ
, le lien symbolique a les mêmes autorisations que les autres fichiers auxquels il peut accéder, à l'exception de chmod. Les fichiers sont -rw-r - r--, et le lien symbolique est lrwxrwxrwx. Serait-ce la raison pour laquelle cela ne fonctionne pas avec setenforce 1?Voici une approche didactique du cas SELinux:
Découvrez si SELinux est actif:
Dans l'affirmative, une vérification comparative pourrait être utile. Par exemple, un serveur a un DocumentRoot par défaut sur
/var/www/html
, mais nous le voulons ailleurs comme/path/to/document/root
.Si SELinux ne joue pas activement avec la ressource,
ls -dZ
le répertoire affichera quelque chose comme:En revanche, si des contextes SELinux sont appliqués, cela
ls -dZ
ressemble plus à:Si nous comparons à un DocumentRoot fonctionnel, cela ressemblerait à quelque chose comme:
Les arguments
_r
et se_t
rapportent à-r
(--role
et-t
(--type
) àchcon
. Voici une page de manuel réduite:À première vue, les éléments suivants peuvent sembler fonctionner, mais peuvent ne pas fonctionner.
Si le serveur Web ne peut toujours pas voir le DocumentRoot, notez que le contexte est important jusqu'à la racine:
À ce stade, le serveur Web peut voir le répertoire.
Oui, j'ai appris à la dure ce soir.
REMARQUE: L'utilisation de chcon a conceptuellement un inconvénient selon la documentation RedHat ( 5.6.1. Modifications temporaires: chcon ) qui stipule:
Utilisez semanage et restorecon pour apporter des modifications plus permanentes. Un bref exemple:
En ce qui concerne la restauration , notez que -F est requis pour affecter l'ensemble du contexte (c'est-à-dire l'utilisateur et le type). De plus, -R signifie apporter des modifications récursivement. Les arguments -v ou -p peuvent montrer la progression de façon verbeuse ou laconique. Utilisez -FRnv pour voir ce qui se passerait sans apporter de modifications.
Une fois le semanage utilisé de cette manière, il est possible de visualiser les modifications de sécurité locales avec une commande comme:
La sortie de l' exportation de semanage peut être enregistrée et utilisée par l' importation de semanage pour faciliter l'application d'un ensemble de modifications à divers systèmes.
REMARQUE: cette réponse fournit le contexte de type le plus basique pour un site. La sécurité peut être beaucoup plus granulaire. Par exemple, consultez une liste de types pouvant s'appliquer aux pages de serveur Web avec une commande comme:
REMARQUE: les utilitaires tels que semanage et seinfo peuvent ne pas être installés par défaut. Au moins sur certaines distributions, les packages requis peuvent être nommés quelque chose comme ceci:
la source
Cela ressemble à SELinux, je vous suggère de travailler avec. Regardez dans le répertoire / var / log / audit pour confirmer.
Pire cas, vous pouvez toujours désactiver selinux, comme indiqué précédemment, mais je vous suggère de travailler avec lui à 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.
Donc, si cela se produit, j'applique simplement le contexte d'un autre répertoire, qui dans ce cas, est html:
la source
Utilisez cette commande en racine pour changer le contexte de sécurité de "httpd_sys_content_t" qui permet à Apache de s'exécuter.
Utilisez
ls -dZ /var/www/whatever
pour afficher les détails des rôles de sécuritéla source