![Apache php 脚本的 www 权限](https://linux22.com/image/717157/Apache%20php%20%E8%84%9A%E6%9C%AC%E7%9A%84%20www%20%E6%9D%83%E9%99%90.png)
我有一个运行私人社交网络的 php 脚本。它在 Ubuntu 16.04.03 上运行,带有 mariadb 和 apache 2 以及 php7 配置。
我在 /var/www/myscript 中创建了一个新文件夹并复制了该文件夹中的所有文件。
我现在的问题是,需要什么权限才能确保配置安全。将所有文件设置为 640、将所有文件夹设置为 750、所有者和用户设置为 www-data 是否安全?
我找到了这个教程,http://fideloper.com/用户组权限-chmod-apache 权限看起来不一样,这些权限也好吗?
如果有人能帮助我,那就太好了。非常感谢。谨致问候
答案1
这很大程度上取决于您的 CMS。
事实上,我真的不喜欢市面上 99% 的 CMS。它们的所有 PHP 文件都放在公共 Apache 树中,这意味着客户端可以访问它们。这不安全。这些文件应该放在客户端无法访问的地方。话虽如此,但需要index.php
公开(显然?)和一些其他文件,具体取决于您的 CMS。其他所有内容都可以放在 Apache 不允许客户端访问的文件夹中。这样权限问题就少了很多。
假设您有一个名为public_html
Apache 的文件夹,您可以拥有如下结构:
/var/www/example.com
/var/www/example.com/php -- put your PHP scripts here
/var/www/example.com/data -- whatever data files (XML, templates, non-public)
/var/www/example.com/public_html -- only folder accessible by Apache
/var/www/example.com/public_html/index.php -- the PHP that handles the CMS
现在...所有权,除非您使用像 WordPress 这样的 CMS 来自动更新,否则文件需要由 Apache2 用户(www-data
对于 Ubuntu)可写。在所有其他情况下,您应将用户和组设置为不同的用户,www-data
并确保 Apache 无权修改这些文件。确保它可以读取它们(也许其他文件有“r”(644)和目录有“rx”(755)。)
假设你使用rsync
进行更新并授予rsync
以用户 身份写入文件的权限www
。现在你可以将所有这些文件归 和www
所拥有www-data
,更新就可以正常工作。
显然,如果您具有将文件保存到 Web 服务器的上传功能,那么该目录需要可由 写入www-data
。此外,这些文件应该备份(就像您的数据库一样),因为它们可以被客户端访问(读作:可黑客入侵)。由于您有内部网,所以可能不太担心,尽管大多数大型企业报告称,他们的大多数数据丢失都是由于在那里工作的员工而不是来自外部的黑客造成的。需要记住这一点。
类似这样的工作适用于此类文件:
mkdir /var/www/example.com/public_html/download
chown www-data:www-data /var/www/example.com/public_html/download
chmod 775 /var/www/example.com/public_html/download
虽然实际文件可能位于一个大目录中(无论文件数量有多少,速度都很快),但这些文件的路径可以根据 CMS 的需要而有所不同。
答案2
如果您确实不需要,请不要为任何文件或文件夹设置写权限。通常,您只为需要由应用程序本身写入的 tmp 文件夹或配置文件设置写权限。虽然对任何文件或文件夹拥有写权限并不是真正的错误,但您应该始终考虑到您正在运行的应用程序可能存在安全漏洞,然后攻击者可以自由地在任何他想要的地方保存自定义脚本,编写您的配置等。
答案3
非常感谢您的帮助。
如果我正确理解了所有提示,我应该执行以下操作:
/var/www/mysite 及其所有文件和子文件夹的所有者不应为 www-data(设置为 root 可以吗?)/var/www/mysite 及其所有文件和子文件夹的组应为 www-data
所有文件应为 644 或最好为 640,目录应为 755 或 750?如果用户从网站上传文件,我有一个文件夹 /var/www/mysite/uploads,并且在此文件夹中,我将 www-data 设置为所有者和组,并将权限设置为 775。
目前我的文件夹如下所示:
/var/www/mysite -> root:www-data (用于所有文件和文件夹)文件具有 640 个权限文件夹具有 750 个权限
这个配置看起来是否正常且安全?或者我应该将用户从 root 更改为用于维护服务器的用户?
再次感谢你的帮助。