2014-05-23 24 views
10

Sto utilizzando la finestra mobile per eseguire un'istanza di apache. Il mio file finestra mobile più o meno così:problemi di autorizzazione con apache nella finestra mobile

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"] 

Tuttavia, quando ho costruire il contenitore ed eseguirlo, ho sempre e solo ottenere 403 errori.

Si noti che ho specificato che Apache dovrebbe funzionare come www-data in www-data gruppo e che/var/www è stato in modo ricorsivo chown d appartenere a root:www-data.

Inoltre, tutte le directory sono ricercabili e leggibili e tutti i file sono leggibili e scrivibili dal gruppo di dati www (beh, secondo ls -la e namei -m sono comunque).

Come posso risolvere questi problemi di autorizzazione? Non riesco a capirlo.

errore istantaneo da error.log apache:

[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 

EDIT:

uscita ls -laR /var/www alla fine del 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 

uscita namei -m /var/www/index.php a la fine del file Docker:

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

Dopo aver provato un sacco di cose, tra cui chmod -R 777 solo per vedere se ho potuto ottenere nulla a lavorare, ho provato a mettere i file di origine aggiunte dal Dockerfile in /var/www/html , il percorso predefinito per i file Apache da servire.

Ho soddisfatto esattamente le autorizzazioni del file predefinito (credo) e non funziona ancora. L'index.html predefinito fornito con apache viene caricato correttamente, ma la cartella src aggiunta ha ancora un errore di accesso negato 403.

ho cambiato il Dockerfile per ADD src /var/www/html/src e i permessi sono stati fissati con:

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 {} + 

Nessuna fortuna. Di seguito è riportata una parte dell'output di ls -laR su /var/www. Si noti che le autorizzazioni per la cartella html e index.html che vengono con un apache2 installare corrispondano a quelle della cartella aggiunto src:

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 

Forse chmod non funziona del tutto il modo in cui ho pensato che fa ??

Edit3

Un po 'finale delle informazioni. Il contenitore Docker è stato costruito da buildbot, che presumo sia eseguito come root.Non sono stato in grado di riprodurre questo scenario senza utilizzare buildbot per realizzare l'edificio.

Costruire tutto tramite i comandi di tipo sudo docker build -t apache . sul mio laptop funziona bene, ma i problemi sorgono quando buildbot lo fa. Non ho idea del perché: ^/

+4

io non considero questa una risposta, ma aggiungendo la fonte a/tmp tramite il comando ADD, quindi avere un comando RUN che copia tutto un file alla volta verso/var/www/html funzionato. SO WEIRD ** 10000000 !!!!!! 1 –

+0

Mi sono imbattuto in questo dopo aver postato una domanda simile a http://stackoverflow.com/questions/24308760/running-app-inside-docker-as-non-root- user La mia ipotesi è che non puoi chmod/chown file che sono stati aggiunti tramite il comando 'ADD'. –

+0

si prega di indicare la versione del docker e la piattaforma host da identificare. –

risposta

6

Mi sono imbattuto in questo dopo aver postato una domanda simile a Running app inside Docker as non-root user.

La mia ipotesi è che non è possibile chmod/chown file che sono stati aggiunti tramite il comando ADD. - thom_nic 19 giu 14:14

In realtà è possibile. Hai solo bisogno di emettere un comando RUN dopo l'ADD per il percorso del file che sarà all'interno del contenitore. Per esempio

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

Spero che questo aiuti. Ha funzionato per me.

+0

sì! questo è quello che ho trovato anche io. È passato un po 'di tempo da quando ho fatto questa domanda, quindi accetterò questa risposta poiché è la migliore che nessuno ha mai inventato finora. Penso ancora che ci dovrebbe essere un modo migliore per farlo. –

2

Ho riscontrato un problema simile; tuttavia il mio contenitore utilizzava VOLUME per mappare le directory attraverso il contenitore.

La modifica delle autorizzazioni sulla directory associata a /var/www/html ha risolto gli errori Proibito 403.

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 . 

noti che chmod deve essere applicato sull'host finestra mobile, non all'interno del contenitore. L'esecuzione nel contenitore non modifica la directory.

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 . 
Problemi correlati