如何允许 php5-fpm 执行用户文件而无需每次都隐式更改权限?

如何允许 php5-fpm 执行用户文件而无需每次都隐式更改权限?

我最近换到了 Ubuntu。我经常使用的工具之一是 XAMPP。当我在 Ubuntu 上安装 LAMP 堆栈时,我注意到性能有了很大的提升,对此我非常满意。然而,在花了几天时间阅读了几十篇操作方法文章之后,我仍然无法正确设置它。

我最终安装了apache2+,php5-fpm因为它可以以用户的权限执行文件。

然而,这对我来说仍然不太奏效。例如,我下载了一个流行 CMS 的存档并将其提取到 Apache html 目录中。这些文件上的最终权限是06640700文件夹上的。

Apache 目录规则:

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

什么时候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

运行时AllowOverride None,apache2index.php位于根目录,但无法运行/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

我还不太熟悉 apache 目录规则,也许其中有些错误。该index.php文件应该可读吗?该php5-fpm服务以我的用户身份运行:

/etc/php5/fpm/pool.d

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

当我设置时,文件会运行chmod -R 0755 www/。但是,每次添加一些文件或由 php 创建文件时,我都无法继续运行此命令。有没有一种不不断篡改权限的方法?我问了一位同事,他只是说:“设置服务root用户php5-fpm”。然而,这更像是一种临时的逃避解决方案。我还担心我可能会运行一些glob/*函数并删除我无意删除的文件(过去曾发生过这种情况)。

如何设置我的 LAMP 堆栈以便能够自动运行我的所有文件?

如果有关于如何使用 suphp 或其他模块进行设置的良好指南,我很乐意查看。但它必须完全正常工作。

编辑

 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)

我运行了一个命令,发现有多个?进程正在运行。有人可以对此发表评论吗?

答案1

那里有很多关于在 Ubuntu 上设置 apache2 + php-fpm 的指南。但是,它们确实没有提到目录权限,而且我经常看到我的组织中的人们为此苦恼。以下是您应该查看的常规设置:

Apache 应该以 www-data 用户身份运行

php-fpm 应该以 www-data 用户身份运行。

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

apache 根目录应以您的用户作为所有者,以 www-data 作为组。

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

然后将 www-data 组添加到您的用户。

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

话虽如此,如果您仍然想以您的用户身份运行 php-fpm,请确保 apache 也以同一用户身份运行,然后我认为它应该可以正常工作。

相关内容