osh*_*nen 14 permissions chmod php files
更新更清晰:
根据http://expressionengine.com/user_guide/installation/installation.html,它说:
对于大多数 Unix 主机,以下是典型的,但您可以检查您的主机,看看是否可以使用更严格的权限来允许 PHP 写入文件 (666) 和文件夹 (777)。在 Windows 服务器上,以下内容不适用,但您需要确保 ExpressionEngine 可写入文件和文件夹。为此,您可能需要联系您的房东。
不确定这是什么意思。我可以将特定文件和文件夹分别更改为 666 和 777,在我是 chown'er 的地方,但上面的内容听起来好像我也需要允许 PHP 执行此操作?
原问题:
我需要确保 PHP 可以写入特定文件 (666) 和文件夹 (777)。
我该怎么做呢?
Mor*_*ing 22
我将通过技术解决方案完成rahmu和MV的答案。以下所有内容仅对类 UNIX 系统有效。
滚动查看 chmod/chown 部分,查看使用 ACL 的示例 - 比 UNIX 文件模式更强大的工具。
首先,您需要知道运行 Web 服务器的用户名。如果您使用的是Apache,它可以是apache
或httpd
,www-data
等等。在大多数的Debian类系统中,Apache是www-data
。对于 nginx,一般来说也是www-data
.
要检查它,请尝试:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Run Code Online (Sandbox Code Playgroud)
确保此命令返回的用户名是一致的(例如,我 99% 的时间都使用 nginx,但此命令返回tomcat7
,我安装过一次的 Java Web 服务器)。
chmod
和chown
执行chmod
666 或 777(针对不良文档/教程中此类问题的首选解决方案)可以神奇地使事情有效,但不安全。授予 666 或 777 权限将授予“其他人”访问权限。因此,不仅是 Apache,而且还有grandmother
和 nsa
(前提是这些用户帐户存在于您的计算机上 - 但实际上并非如此,除非仅用于测试/故障排除,否则请避免这样做)。
最好更具体一点,只给你和 Apache 权限。更改文件组以将文件的完全控制权交给 Web 服务器。为此,请递归更改所有者:
chown -R www-data:www-data your/folder/
Run Code Online (Sandbox Code Playgroud)
但最有可能的是,您可能只想通过更改组来保持对文件的完全访问权限:
chown -R yourusername:www-data your/folder/
Run Code Online (Sandbox Code Playgroud)
然后,执行适当的操作chmod
以授予该组www-data
与您相同的权限。比如当前模式为640 (6为你,4为www-data,0为他人,翻译为-rw-r-----),设置为660 (6为你,6为www-数据,其他人为 0,转换为 -rw-rw----)。请参阅 rahmu 的答案以了解有关文件模式的更多信息,这是一种古老但优雅的机制。
为避免使用 操作神秘数字chmod
,您还可以使用以下语法:
chmod -R g+rw your/folder/
Run Code Online (Sandbox Code Playgroud)
它的意思是“对组(g
),添加(+
)rw
对文件夹的读写()权限your/folder/
,递归(-R
)”。
在 90% 的情况下,这应该足够了。
有时第一个解决方案是不够的。我将以记录和缓存大量数据的Symfony 框架为例。因此它需要对相应文件夹的写访问权限。
而chmod
/chown
方法可能还不够,当您在 CLI(在我的用户帐户下)和 Web(Web 服务器用户)中并行使用 Symfony 控制台时。这会导致很多问题,因为 Symfony 不断修改权限。
在这种情况下,我们将使用 ACL(访问控制列表),这是在许多 UNIX 系统上管理权限的一种更高级的方法。
这里由官方的Symfony文档中给定(命令,请更改app/cache
和app/logs
您的需要):
chmod +a
(即非 Debian/Ubuntu)sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Run Code Online (Sandbox Code Playgroud)
chmod +a
(最常见)的系统上您将需要该setfacl
工具;也许它默认安装在您的系统上,因此请尝试setfacl -v
查看该命令是否可用。
如果该命令不可用,并且您使用的是 Ubuntu 14.04+,则只需安装该工具:
sudo apt install acl
Run Code Online (Sandbox Code Playgroud)
否则,请遵循您的操作系统文档,因为您可能需要更改分区的挂载方式(此处为Ubuntu 文档)。
我们在那里:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Run Code Online (Sandbox Code Playgroud)
这种方法我从来没有遇到过任何问题,满意或您的退款。
小智 0
Expression Engine 就像许多其他 PHP Web 应用程序一样,需要对某些文件和目录进行读+写访问。例如,EE 需要对其 config.php 和 database.php 文件的写访问权限,以及对其文件上传目录的写访问权限。
文档说明的是,由于大多数服务器将 PHP 作为 mod_php 运行(因此以 Web 服务器的权限运行),并且您可能会使用自己的用户通过 FTP(或类似的)上传文件,这些文件和目录需要被授予权限 666(每个人都可以读和写)和 777(每个人都可以读、写和浏览)。
这不是最安全的方法,但肯定是最简单的方法,特别是如果您使用托管服务。
但是,正如 EE 说明所述,请询问您的托管提供商,因为有些不使用 mod_php,而是使用 fastcgi、suphp 或其他版本。这些服务器以您自己的用户身份运行 PHP,因此 PHP 以及 EE 脚本创建的任何文件都可以读取和写入您上传的所有文件。在这种情况下,需要为 PHP 访问的文件和目录授予 600 和 700 访问权限。由 Web 服务器(而不是 PHP 运行时)直接访问的其他文件仍需要 666 和 777 访问)。
归档时间: |
|
查看次数: |
115342 次 |
最近记录: |