2017-07-23 12 views
0

Avant de demander, j'ai essayé de chercher des questions similaires, aucune d'entre elles n'avait précisément mon problème.
Je suis nouveau à ce sujet, et j'ai installé Apache2, PHP5 et MySQL5 sur un RasPi exécutant Raspbian.
Si nécessaire, je mets le index.html en /var/www/html et quand je tape l'IP de mon PI seul ou suivi de /index.html, index.html exécute son code correctement et tous les éléments apparaissent.

Problème: En outre, j'ai mis mes fichiers JS et CSS dans ce même dossier, ainsi que quelques photos à afficher.
Le navigateur lit le code HTML en détail, mais ne charge pas les fichiers JS et CSS ainsi que les images. Mettre les fichiers dans les sous-dossiers n'a également pas aidé.
Lorsque je tape l'IP suivi d'un /style.css (nom de mon fichier CSS lié), j'obtiens un 403 Interdit. Les erreurs du journal affiche également ceci:Apache ne permet pas de charger d'autres fichiers que index.html

file permissions deny server access: /var/www/html/photo.jpg, referer: http://192.168.178.120/ 
access to /images/dark.jpg denied because search permissions are missing on a component of the path, referer: http://192.168.178.120/ 


J'ai essayé des recherches sur cela, mais rien aidé. Lorsque mon JS et CSS sont dans mon HTML, tout fonctionne bien sauf les images
Conclu: Apache ne permet pas au navigateur de charger des fichiers autres que index.html.
Savez-vous quel pourrait être le problème? Y at-il un dossier spécifique où je devrais mettre mes autres dossiers? Merci d'avance.

+0

Cela ressemble à un problème d'autorisation de fichier. Si vous tapez 'ls -l/var/www/html', quel utilisateur possède les fichiers et quelles permissions lire/écrire/exécuter ont les fichiers? Veuillez ajouter la sortie de 'ls' à votre question. – rickdenhaan

+0

Voici la sortie. je reçois * rw * signifie lire écrire mais les deux autres * r *? * index.html * appartient à pi root, tous les autres fichiers appartiennent à pi pi. Qu'est-ce que ça veut dire? https://pastebin.com/iUMBVK4i – delyodobrev

Répondre

0

En fonction du résultat de ls, vos fichiers ne sont pas accessibles à Apache.

Réponse courte:

Exécutez les deux commandes suivantes:

find /var/www/html -type f -exec chmod 644 {} \;

find /var/www/html -type d -exec chmod 755 {} \;

explication plus longue:

[email protected]:~ $ ls -l /var/www/html 
total 2976 
-rw------- 1 pi pi  60146 Jul 23 22:11 bnw.jpg 
-rw------- 1 pi pi 202851 Jul 23 22:11 color.jpg 
-rw------- 1 pi pi 617185 Jul 23 21:27 dark.jpg 
-rw------- 1 pi pi 2028727 Jul 23 22:11 effect.jpg 
drwx------ 2 pi pi  4096 Jul 23 21:33 images 
-rw------- 1 pi pi  2238 Jul 23 22:11 index.css 
-rw-r--r-- 1 pi root 1261 Jul 23 22:11 index.html 
-rw------- 1 pi pi 108397 Jul 23 22:11 photo.jpg 
-rw------- 1 pi pi  538 Jul 23 22:11 script.js 
-rw------- 1 pi pi  2238 Jul 23 21:33 style.css 

Les symboles au début de la ligne ont la signification suivante:

d: indicates a directory 
r: means the file/directory is readable 
w: means the file/directory is writable 
x: means the file/directory is executable 

-: means none of the above apply 

Ces symboles sont regroupés comme suit:

drwxrwxrwx 
     ^^^ apply to all users on the system 
    ^^^--- apply to all users in the group that owns the file 
^^^------ apply to the user that owns the file 

Où il est dit pi pi il fait référence au propriétaire du fichier: l'utilisateur pi dans le groupe pi. Votre fichier index.html est une exception car il appartient au groupe root.

Ce n'est pas vraiment important pour l'instant, sauf que vous devez vous rendre compte que Apache s'exécute généralement en tant qu'utilisateur www-data dans le groupe www-data. Cela varie un peu d'un système à l'autre, mais c'est le plus commun.Cela signifie que pour que Apache puisse accéder à un fichier, il doit être mis à la disposition de l'utilisateur www-data ou du groupe www-data (ou les deux).

Dans votre cas, les fichiers appartiennent à l'utilisateur pi et le groupe pi (à l'exception de index.html, qui appartient au groupe root. Comme Apache n'est pas utilisateur et est très probablement pas dans les deux de ces groupes, cela signifie que les autorisations de fichiers pour "tous les utilisateurs sur le système" doivent être définies correctement pour qu'Apache puisse accéder au fichier

Comme vous pouvez le voir, index.html est configuré pour être lisible par tous les utilisateurs le système:

-rw-r--r-- 1 pi root 1261 Jul 23 22:11 index.html 
     ^^^ all users on the system may read from this file, but may not write and may not execute the file 
    ^^^--- all users in the group "root" may read from this file, but may not write and may not execute the file 
^^^------ the user "pi" may read from and write to this file, but may not execute the file 

Tous les autres fichiers, y compris le répertoire images, ne sont accessibles à l'utilisateur « pi »:

-rw------- 1 pi pi 2028727 Jul 23 22:11 effect.jpg 
     ^^^ all users on the system may not read from, write to or execute this file 
    ^^^--- all users in the group "pi" may not read from, write to or execute this file 
^^^------ the user "pi" may read from and write to this file, but may not execute it 

Donc, pour effect.jpg être mis à la disposition Apache, vous devez modifier les autorisations de fichier à ceci:

-rw----r-- 1 pi pi 2028727 Jul 23 22:11 effect.jpg 
     ^^^ all users on the system (including Apache) may read from this file 

Pour ce faire , vous utilisez la commande chmod. Il y a deux façons de retourner cette autorisation:

chmod o+r effect.jpg

chmod 604 effect.jpg

chmod o+r signifie "ajouter 'r' autorisation de la catégorie« autres utilisateurs"(vous utiliseriez u+r ou g+r pour modifier les autorisations d'utilisateur ou de groupe). chmod 604 signifie "Définir des autorisations pour l'utilisateur à 6, groupe à 0 et d'autres à 4" - où les nombres sont une somme binaire des autorisations: 1 (exécutable), 2 (accessible en écriture), 4 (lisible).

répertoires ont besoin d'un peu plus de travail:

drwx------ 2 pi pi  4096 Jul 23 21:33 images 

Pour permettre au système de fichiers pour ouvrir réellement un répertoire et lire les fichiers dedans, il doit être exécutable pour l'utilisateur qui essaie d'accéder à son contenu. Donc, pour permettre à Apache de lire tous les fichiers de ce dossier, il devra avoir les autorisations suivantes:

drwx---r-x 2 pi pi  4096 Jul 23 21:33 images 
     ^^^ all users on the system may read from this directory and execute it 

Pour ce faire, utilisez le même principe:

chmod o+rx images (d'autres utilisateurs, ajouter lisible et les autorisations exécutables)

chmod 705 images (jeu de lecture (4) + écriture (2) + execute (1) pour le propriétaire et de lecture (4) + execute (1) pour tous les autres utilisateurs)

Maintenant, bien que ce ne soit pas strictement nécessaire si le propriétaire et le groupe sont identiques, il est recommandé de s'assurer que le groupe dispose des mêmes autorisations que la catégorie "tous les autres utilisateurs". Ainsi, au lieu de donner des fichiers 604 (-rw----r--) et des dossiers 705 (drwx---r-x), il est préférable de leur donner la pratique 644 (-rw-r--r--) et 705 (drwxr-xr-x).Si vous travaillez dans un environnement où plusieurs développeurs doivent être en mesure de modifier les fichiers, ils doivent appartenir au même groupe d'utilisateurs. Les meilleures pratiques consistent à accorder au groupe les mêmes autorisations que le propriétaire, 644 (-rw-rw-r--) et 775 (drwxrwxr-x). Enfin, vous ne souhaitez pas avoir à modifier manuellement toutes les autorisations de fichiers. Ce projet particulier semble être relativement petit, mais c'est toujours un travail agaçant. Heureusement, nous pouvons utiliser la commande find pour effectuer une mise à jour par lots.

find liste le contenu complet du dossier donné, y compris les sous-dossiers, sur lesquels vous pouvez filtrer ou exécuter des actions.

find /var/www/html -type f

Ceci listera toutes les entrées dans /var/www/html ou les sous-dossiers qui sont un fichier régulier.

find /var/www/html -type d

Ceci listera toutes les entrées dans /var/www/html ou les sous-dossiers qui sont des répertoires.

Nous pouvons utiliser -exec dire find pour effectuer automatiquement une certaine commande sur chaque fichier/dossier, il trouve:

find /var/www/html -type f -exec chmod 644 {} \;

Le {} est un espace réservé où find répandrai chaque nom de fichier. Le \; est nécessaire pour informer find qu'aucun argument supplémentaire pour la commande -exec ne sera fourni, donc nous pouvons éventuellement ajouter d'autres arguments pour find lui-même.

Ainsi, la commande ci-dessus fixer les autorisations pour tous les fichiers, la commande suivante corrigera les autorisations pour tous les dossiers:

find /var/www/html -type d -exec chmod 755 {} \;

Après cela, Apache devrait avoir accès à tous les fichiers et dossiers dans /var/www/html. Gardez à l'esprit que, chaque fois que vous créez un nouveau fichier dans ce dossier, vous devez vérifier les autorisations et le corriger si nécessaire.

+0

Fonctionne parfaitement pour les fichiers actuellement sur le serveur. Qu'est-ce qui cause cela, est-ce normal ou y a-t-il un moyen d'empêcher le système de se restreindre de cette façon? En outre, naturellement, un fichier nouvellement téléchargé n'a pas encore les autorisations. Est-il impossible de configurer le système pour définir automatiquement les autorisations? (deux problèmes avec la même question) – delyodobrev

+0

C'est possible, vous [utilisez un 'umask'] (https: // www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html) pour définir automatiquement les autorisations appropriées. – rickdenhaan