Como permitir que o php5-fpm execute arquivos de usuário sem alterar implicitamente as permissões toda vez?

3

Eu recentemente mudei para o Ubuntu. Uma das ferramentas que mais utilizei foi o XAMPP. Quando eu instalei o LAMP stack no Ubuntu notei um grande aumento no desempenho e fiquei muito satisfeito com isso. No entanto, depois de literalmente passar dias e ler dezenas de artigos de instruções, ainda não consegui configurá-lo corretamente.

Acabei de instalar o apache2 + php5-fpm porque ele pode executar os arquivos com as permissões do usuário.

No entanto, isso ainda não funcionou bem para mim. Por exemplo, baixei um arquivo de um CMS popular e o extraí para o diretório html do apache. As permissões resultantes nesses arquivos são 0664 e 0700 nas pastas.

Regras do diretório do Apache:

<Directory "/home/myuser/www/">
    AllowOverride All
    Require all granted
    Allow from all    
</Directory>

Quando AllowOverride All :

[Fri Dec 12 21:16:01.037580 2014] [core:crit] [pid 23745:tid 140466931369728] 
(13)Permission denied: [client 127.0.0.1:54670] AH00529:  
/home/myuser/www/mycms/install/.htaccess pcfg_openfile: unable to check htaccess 
file, ensure it is readable and that '/home/myuser/www/mycms/install/' is executable

Quando AllowOverride None , o apache2 executa index.php , que está no diretório-raiz, mas não executará /config/index.php

[Fri Dec 12 21:02:41.552369 2014] [core:error] [pid 22530:tid 140517706823424]
(13)Permission denied: [client 127.0.0.1:54465] AH00035: access to 
/install/index.php denied (filesystem path 
'/home/myuser/www/mycms/install/index.php') because search 
permissions are missing on a component of the path

Ainda não sou muito versado em regras de diretórios do apache, talvez haja algum erro. O arquivo index.php deve ser legível? O serviço php5-fpm é executado como meu usuário:

/etc/php5/fpm/pool.d

Line 22: user = myuser
Line 23: group = myuser

Os arquivos são executados quando eu defino chmod -R 0755 www/ . No entanto, eu não posso continuar executando este comando toda vez que eu adiciono alguns arquivos ou quando eles são criados pelo php. Não há uma maneira de trabalhar sem mexer constantemente nas permissões? Eu perguntei a um colega e ele disse: "Defina o root user para php5-fpm service". No entanto, esta é mais uma solução de escape improvisada. Também tenho medo de executar algumas funções de glob/* e excluir arquivos que eu não pretendia excluir (aconteceu comigo no passado).

Como posso configurar minha pilha LAMP para executar automaticamente todos os meus arquivos?

Se houver um bom guia sobre como configurá-lo com o suphp ou algum outro mod, eu provavelmente o veria. Mas tem que funcionar todo o caminho.

Editar

 ps aux | egrep '(apache|httpd)'
root     18763  0.0  0.1  84256  4720 ?        Ss   21:35   0:00 /usr/sbin/apache2 -k start
www-data 18767  0.0  0.1 373432  6256 ?        Sl   21:35   0:00 /usr/sbin/apache2 -k start
www-data 18768  0.0  0.1 373432  6256 ?        Sl   21:35   0:00 /usr/sbin/apache2 -k start
gskema   20515  0.0  0.0  14884  2364 pts/6    S+   21:37   0:00 grep -E --color=auto (apache|httpd)

ps aux | egrep '(php)'
gskema    8312  0.0  0.0   4448   492 ?        S    16:32   0:00 /bin/sh /opt/phpstorm/bin/phpstorm.sh
gskema    8361  8.7 31.0 4630304 1245684 ?     Sl   16:32  26:52 /usr/lib/jvm/java-8-oracle/bin/java -Xms128m -Xmx750m -XX:MaxPermSize=350m -XX:ReservedCodeCacheSize=225m -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djsse.enableSNIExtension=false -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -Dawt.useSystemAAFontSettings=lcd -Djb.vmOptionsFile=/opt/phpstorm/bin/phpstorm64.vmoptions -XX:ErrorFile=/home/gskema/java_error_in_WEBIDE_%p.log -Xbootclasspath/a:/opt/phpstorm/bin/../lib/boot.jar -Didea.paths.selector=WebIde80 -Didea.platform.prefix=PhpStorm -Didea.no.jre.check=true -Djb.restart.code=88 com.intellij.idea.Main
gskema    8396  0.0  0.0   4936   904 ?        S    16:32   0:00 /opt/phpstorm/bin/fsnotifier64
root     18950  0.0  0.6 348744 24312 ?        Ss   21:35   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)                    
www-data 18953  0.0  0.1 348744  7836 ?        S    21:35   0:00 php-fpm: pool www                                                       
www-data 18954  0.0  0.1 348744  7836 ?        S    21:35   0:00 php-fpm: pool www                                                       
gskema   20649  0.0  0.0  14888  2364 pts/6    R+   21:40   0:00 grep -E --color=auto (php)

Eu corri um comando e vejo que existem vários? processos em execução. Alguém pode comentar sobre isso?

    
por gskema 12.12.2014 / 20:26

1 resposta

2

Existem muitos guias para o setup do apache2 + php-fpm no Ubuntu. Mas sim, eles não falam sobre permissão de diretório e eu tenho visto pessoas em minha organização lutando com isso de tempos em tempos. Aqui está a configuração geral que você deve analisar:

O Apache deve ser executado como usuário de www-data

O php-fpm deve estar rodando como usuário www-data.

www-data  1591  0.0  0.4 417116 34008 ?        S    Dec19   0:00 php-fpm: pool

O diretório raiz do apache deve ter seu usuário como proprietário e www-data como o grupo.

drwxr-xr-x 44 anirudh www-data 4096 Dec 20 10:27 www

Em seguida, adicione o grupo www-data ao seu usuário.

sudo usermod -a -G www-data <your-user>

Dito isto, se você ainda quer rodar o php-fpm como seu usuário, tenha certeza que até o apache também é rodado como o mesmo usuário e então eu acho que ele deve funcionar bem.

    
por anirudh 20.12.2014 / 07:58