你好,我是一名专业的网络开发人员,而不是服务器工程师,请耐心等待!
我刚刚获得了一个新的 Ubuntu LAMP VPS 服务器,我正在尝试配置它。
我知道以 apache-mod 形式运行 php 是运行 php 的最快方式。但为了实现这一点,我必须将目录设置为 777,以便 php 可以写入它们。反过来,ftp 就不能再删除由 php 创建的目录了。
这似乎并不理想。
我了解使用 fast-cgi 时“php 用户”和“ftp 用户”是相同的,因此您不会遇到这些问题,也不必将目录打开到 777 来允许写入,据我所知,这是一个安全问题。
那么,
- 权限为 755 的 fast-cgi 与权限为 777 的 apache mod 相比??
谢谢
编辑
所以 777 显然不太好。但我如何让 apache-mod 和 ftp 用户相同 - 如上所述,我不是服务器管理员!谢谢
答案1
带有 mod_php 的 Apache 易于设置且运行速度快 - 但它无法扩展。每个请求都需要一个完整的线程 - 其中包括 Apache 及其所有模块。这正是它快速运行的原因 - 每个请求都会获得一个专用的 php 实例。另一方面,极少数同时发生的请求会消耗您所有可用的内存,并使您的服务器速度变慢。
如果您选择 mod_php 路线 - @fuscata 的答案提供了一个很好的方法 - 使用组来避免您的目录和文件被“其他人”写入。另一个选择是简单地让您的 FTP 用户与 apache 运行时的用户相同 - 虽然从安全角度来看这并不好。
我绝对建议使用 fast-cgi 方法 - 除了可以正确实现权限之外,它还可以更好地利用可用资源。虽然单个请求的速度稍慢,但在较高负载下,整体性能将比 mod_php 好得多。
将 mod_fastcgi 与 php-fpm 结合使用 - 使用与 FTP 用户匹配的用户名设置 php-fpm 池,并使用尽可能严格的权限 - 755 通常对于目录来说是可以接受的(但您应该能够使用 750)考虑将 PHP 文件的权限设置为 640 - “其他”实际上不需要对您的文件具有读取权限(对于包含数据库密码、电子商务密钥等的文件尤其如此 - 尽管这些文件应设置为 600 - 或输入数据后设置为 400)。
答案2
如果您决定继续使用 mod_php,那么有几个选项,但我的建议是:
- 创建一个新用户,比如 ftpuser,其组为 ftpuser
- 确保用户主目录(您可以将其设置为 DocumentRoot)中没有任何敏感信息,例如 .my.cnf、邮件文件、ssh 私钥等。
- 将 Apache 用户 (www-data) 添加到 ftpuser 组
- 设置 Apahce 用户的 umask到 /etc/apache2/envvars 中的 002
- 将 ftpuser 的 umask 设置为 002(因此文件默认具有 775 权限)和/或更改 FTP 客户端中的设置以实现此目的。
- 在适当的目录/文件上:chgrp -R ftpuser、chmod -R 775、chmod -R g+s(这应该会导致 www-data 创建的所有文件/目录保留 ftpuser 组)