web-dev-qa-db-fra.com

Après le redémarrage d'Apache, DocumentRoot doit être un répertoire, même s'il ne s'agit pas d'un répertoire et qu'il semble n'y avoir aucun problème de privilège.

J'ai ce qui est presque certainement une question de débutant. Je m'attendais à trouver le problème en écrivant cette question, mais je suis toujours bloqué.

Je souhaite modifier DocumentRoot pour Apache, mais le message d'erreur suivant: "DocumentRoot doit être un répertoire". 

Situation:

  • Le code est exécuté sur une machine virtuelle VMWare 4.0.4 build-744019
  • La version de linux est Scientific Linux version 6.4 (Carbon).
  • La version d'Apache est Apache/2.2.15 (Unix) (il s'agit d'une installation de yum sans rien Special)

Dans le httpd.conf

DocumentRoot "/home/stave/www"

Quand je redémarre, je reçois le message

Starting httpd: Syntax error on line 292 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory

Mesures prises jusqu'à présent:

Je me suis assuré que le répertoire existe:

ls -asl /home/stave
4 drwxrwxrwx.  2 stave stave    4096 Feb  9 09:08 www
It even has a file in it "index.html", so I am very sure that the directory exists

J'ai considéré qu'il pourrait s'agir d'un problème de privilèges donc (c'est une machine de développement virtuelle isolée d'Internet et je dépanne donc je ne suis pas trop inquiet pour la sécurité) car vous pouvez voir que j'ai défini les privilèges à 777.

J'ai même changé l'utilisateur sous lequel Apache est exécuté (et j'ai confirmé que le changement fonctionnait avec ps) afin de transférer pour garantir que les privilèges ne soient tout simplement pas un problème.

Stackoverflow

Il y a quelques réponses de débordement de pile, mais la plupart d'entre elles disent "lisez le message d'erreur. Cela signifie que le répertoire n'existe pas réellement". D'autres ont laissé entendre qu'il pourrait y avoir une barre oblique à la fin, ce qui serait mauvais. 

Autres sites

Le plus utile que j'ai trouvé était ce que conseillé 

Vous avez probablement obtenu l'erreur "DocumentRoot doit être un répertoire", même s'il s'agit bien d'un répertoire en raison des extensions SELinux. Exécutez system-config-securitylevel (ou redhat-config-securitylevel) pour désactiver SELinux pour httpd ou donnez les autorisations à SELinuxdirectory: chcon -R -h -t httpd_sys_content_t/chemin/vers/répertoire *

Ma version de Linux n'est pas Security Enhanced Linux, donc sans comprendre, je l'ai quand même essayée: aucun effet.

Situation actuelle

Je suis à court d'idées à essayer, alors toute question de diagnostic ou tout conseil serait grandement apprécié.

25
Stave Escura

Le lien que vous avez posté sous "Autres sites Web" met en évidence la cause fondamentale de votre problème, à savoir Selinux.

À moins que le serveur ne fasse partie d'un environnement super sécurisé, je voudrais simplement désactiver Selinux.

Sur RedHat/CentOS/Scientific Linux, cela peut facilement être fait en éditant/etc/sysconfig/selinux - recherchez le paramètre "selinux" et modifiez l'option "en vigueur" en "désactivée" conformément à l'extrait ci-dessous:

# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=disabled

Il est probablement sage de redémarrer le serveur après avoir effectué cette modification.

21
artfuldodger

Vous ne devriez pas simplement désactiver SELinux.

Vous devez activer httpd_enable_homedirs. 

yum -y install policycoreutils-python
setsebool -P httpd_enable_homedirs on
9
Cedric

J'ai rencontré ce problème aujourd'hui aussi et c'est parce que j'ai déplacé mon DocumentRoot de/var/www/html vers/srv/www/html. Dans le cadre de nos politiques de sécurité, nous n'avons pas l'option de désactiver simplement SELinux. 

C’est pourquoi ma solution, comme je l’ai découverte, était de modifier le contexte du fichier SELinux pour que/srv corresponde à/var. Un compromis oui, mais il vaut mieux que de le désactiver complètement. Sinon, je me suis assuré que/srv/www et tous les sous-dossiers avaient le httpd_sys_content_t pour correspondre aux dossiers sous/var/www et tout va bien maintenant.

7
David

Ceci est fondamentalement la même réponse que celle de David, mais un peu plus clair, le répertoire de service http contient un ensemble de contextes de sécurité SELinux erroné.

L'explication complète pour résoudre ce problème est ici, http://mybroadband.co.za/vb/showthread.php/588183-Fix-403-Forbidden-on-newly-configured-CentOS-6-5-httpd-server - (ou-13-10-Ubuntu-LAMP)

Mon problème était que je hébergeais mes sites Web dans un répertoire différent de celui du chemin d'accès racine de document/var/www /, je devais donc suivre la troisième option du lien ci-dessus pour la corriger. Je mets le même contexte de fichier de mon répertoire/websites/à correspondre à celui de/var/www /. Ce qui était étrange, c’est que les versions précédentes de CentOS 5.5 ne doivent pas avoir installé/activé SELinux, car mes autres serveurs n’avaient aucun problème avec cela et lorsqu’ils exécutaient ls -Z à l’invite de commande, l’invite affichait ces dossiers comme "non étiquetés".

J'utilise CentOS 6.5 sur AWS à partir de l'installation minimale du marché officiel. Ainsi, lorsque j'ai exécuté la commande ls -Z sur mes dossiers, j'ai vu exactement ce que le lien ci-dessus montre comme un problème possible.

L'exécution de la commande chcon a résolu mon problème!

Il suffit de remplacer html/par le répertoire que vous souhaitez utiliser!

chcon -Rv --type = httpd_sys_content_t html /

chcon -Rv --user = system_u html /

Sur une note de côté, j'ai également dû désactiver iptables pour que le routage fonctionne, les valeurs par défaut servaient des pages vierges.

service iptables stop

Espérons que cela aide n'importe qui avec le même problème.

5

Environnement: Linux - système de fichiers racine sur un SSD DocumentRoot sur un disque dur et monté via fstab Redémarrer Apache2 après le démarrage - pas de problème Il semble que le démarrage d’Apache soit un problème de synchronisation, mais pas avant.

Solution de contournement: Définissez le répertoire DocumentRoot sur le système de fichiers racine avec le propriétaire, le groupe et les autorisations appropriés. Le répertoire peut être vide.

0
G. C. Davis