web-dev-qa-db-fra.com

Problèmes d'autorisation avec Apache dans Docker

J'utilise Docker pour exécuter une instance Apache. Mon fichier Docker ressemble à ceci:

FROM ubuntu

MAINTAINER [email protected]

RUN cat /etc/passwd
RUN cat /etc/group

RUN apt-get update && apt-get install -yq Apache2 php5 libapache2-mod-php5 php5-mysql
RUN apt-get install -yq openssh-server
RUN mkdir /var/run/sshd

ENV Apache_RUN_USER www-data
ENV Apache_RUN_GROUP www-data
ENV Apache_LOG_DIR /var/log/Apache2

EXPOSE 80

ADD config/Apache2/000-default.conf /etc/Apache2/sites-available/000-default.conf
ADD config/php5/php.ini /etc/php5/Apache2/php.ini
ADD config/start.sh /tmp/start.sh
ADD src /var/www

RUN chown -R root:www-data /var/www
RUN chmod u+rwx,g+rx,o+rx /var/www
RUN find /var/www -type d -exec chmod u+rwx,g+rx,o+rx {} +
RUN find /var/www -type f -exec chmod u+rw,g+rw,o+r {} +

#essentially: CMD ["/usr/sbin/Apache2ctl", "-D", "FOREGROUND"]
CMD ["/tmp/start.sh"]

Cependant, lorsque je crée le conteneur et l'exécute, je n'obtiens que 403 erreurs.

Notez que j'ai spécifié qu'Apache doit s'exécuter en tant que www-data Dans le groupe www-data, Et que/var/www a été récursivement chownd pour appartenir à root:www-data .

En outre, tous les répertoires sont consultables et lisibles, et tous les fichiers sont lisibles et inscriptibles par le groupe www-data (enfin, selon ls -la et namei -m, ils le sont de toute façon).

Comment résoudre ces problèmes d'autorisations? Je ne peux pas comprendre.

Erreur réelle du fichier Apache error.log:

[Fri May 23 18:33:27.663087 2014] [core:error] [pid 14] (13)Permission denied: [client 11.11.11.11:61689] AH00035: access to /index.php denied (filesystem path '/var/www/index.php') because search permissions are missing on a component of the path

[~ # ~] modifier [~ # ~] :

sortie de ls -laR /var/www à la fin du Dockerfile:

Step 21 : RUN ls -laR /var/www
 ---> Running in 74fd3609dfc8
/var/www:
total 1036
drwxr-xr-x 67 root www-data  4096 May 23 18:38 .
drwxr-xr-x 26 root root      4096 May 23 18:38 ..
-rw-rw-r--  1 root www-data    28 May 23 12:22 .gitignore
-rw-rw-r--  1 root www-data   501 May 23 12:22 .htaccess
-rw-rw-r--  1 root www-data  7566 May 23 12:22 index.php

Sortie de namei -m /var/www/index.php À la fin du Dockerfile:

Step 22 : RUN namei -m /var/www/index.php
 ---> Running in 1203f0353090
f: /var/www/index.php
 drwxr-xr-x /
 drwxr-xr-x var
 drwxr-xr-x www
 -rw-rw-r-- index.php

EDIT2

Après avoir essayé tout un tas de choses, y compris chmod -R 777 Juste pour voir si je pouvais faire fonctionner quoi que ce soit , j'ai essayé de mettre les fichiers source ajouté à partir du Dockerfile dans /var/www/html, l'emplacement par défaut pour les fichiers Apache à servir.

J'ai fait correspondre exactement les autorisations de fichier par défaut (je pense), et cela ne fonctionne toujours pas. Le fichier index.html par défaut fourni avec Apache se charge très bien, mais le dossier src ajouté a toujours une erreur 403 D'accès refusé.

J'ai changé le Dockerfile en ADD src /var/www/html/src Et les autorisations ont été définies en utilisant:

RUN find /var/www/html -type d -exec chmod u+rwx,g+rx,o+rx {} +
RUN find /var/www/html -type f -exec chmod u+rw,g+r,o+r {} +

Pas de chance. Ci-dessous, une partie de la sortie de ls -laR Sur /var/www. Notez que les autorisations pour le dossier html et index.html Fournies avec une installation Apache2 Correspondent à celles du dossier src ajouté:

Step 19 : RUN ls -laR /var/www/
 ---> Running in 0520950d0426
/var/www/:
total 12
drwxr-xr-x  6 root root 4096 May 23 19:23 .
drwxr-xr-x 24 root root 4096 May 23 19:23 ..
drwxr-xr-x  5 root root 4096 May 23 19:23 html

/var/www/html:
total 24
drwxr-xr-x  5 root root  4096 May 23 19:23 .
drwxr-xr-x  6 root root  4096 May 23 19:23 ..
-rw-r--r--  1 root root 11510 May 23 18:28 index.html
drwxr-xr-x 47 root root  4096 May 23 19:23 src

/var/www/html/src:
total 1032
drwxr-xr-x 47 root root  4096 May 23 19:23 .
drwxr-xr-x  5 root root  4096 May 23 19:23 ..
-rw-r--r--  1 root root    28 May 23 12:22 .gitignore
-rw-r--r--  1 root root   501 May 23 12:22 .htaccess
-rw-r--r--  1 root root  7566 May 23 12:22 index.php

Peut-être que chmod ne fonctionne pas exactement comme je le pensais ??

EDIT3

Une dernière information. Le conteneur Docker est en cours de construction par buildbot, dont je suppose qu'il s'exécute en tant que root. Je n'ai pas pu reproduire ce scénario sans utiliser buildbot pour faire le bâtiment.

Tout construire via les commandes de type Sudo docker build -t Apache . Sur mon ordinateur portable fonctionne bien, mais les problèmes surviennent lorsque buildbot le fait. Je ne sais pas pourquoi: ^ /

14
d0c_s4vage

Je viens de tomber sur cela après avoir posté une question similaire sur Exécution de l'application dans Docker en tant qu'utilisateur non root .

Je suppose que vous ne pouvez pas chmod/chown fichiers qui ont été ajoutés via la commande ADD. - thom_nic 19 juin à 14:14

En fait, vous le pouvez. Vous avez juste besoin d'émettre une commande RUN après l'ADD pour l'emplacement du fichier qui sera À L'INTÉRIEUR de votre conteneur. Par exemple

ADD extras/dockerstart.sh /usr/local/servicemix/bin/
RUN chmod 755 /usr/local/bin/dockerstart.sh

J'espère que cela pourra aider. Ça a marché pour moi.

10
user3590150

J'ai rencontré un problème similaire; cependant, mon conteneur utilisait VOLUME pour mapper les répertoires à travers le conteneur.

Modification des autorisations sur le répertoire mappé sur /var/www/html lui-même a corrigé les erreurs 403 interdites.

docker-Host$ ls -ld /var/www/html
drwxr--r--  53 me  staff  1802 Mar  8 22:33 .

docker-Host$ chmod a+x /var/www/html

docker-Host$ ls -ld /var/www/html
drwxr-xr-x  53 me  staff  1802 Mar  8 22:33 .

Notez que chmod doit être appliqué sur l'hôte Docker, pas dans le conteneur. L'exécuter dans le conteneur n'apporte aucune modification au répertoire.

docker-container$ chmod a+x /var/www/html

docker-container$ ls -ld /var/www/html
drwxr--r--  53 me  staff  1802 Mar  8 22:33 .
5
Matt Strom