我已经查看了here,但没有找到有关最佳文件权限的任何详细信息。我也在这里查看了一些 WordPress 表单的问题,但任何建议 777 的人显然都需要一点安全课。
简而言之,我的问题是这个。我应该拥有以下哪些权限:
- 存储所有 WordPress 内容的根文件夹
- wp-管理员
- wp-内容
- wp-包括
然后是每个文件夹中的所有文件?
当您设置 WP 时,您(网络服务器)可能需要对文件的写入权限。所以访问权限可能需要放松。
chown www-data:www-data -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \; # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \; # Change file permissions rw-r--r--
设置完成后,您应该收紧访问权限,根据Hardening WordPress ,除了 wp-content 之外的所有文件都应该只能由您的用户帐户写入。wp-content 也必须可由www-data写入。
chown <username>:<username> -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content
也许您想稍后更改 wp-content 中的内容。在这种情况下,您可以
su
,无论您做什么,请确保文件具有www-data的 rw 权限。
将所有 wp 文件的完全访问权限授予www-data
用户(在本例中为 Web 服务器用户)可能很危险。所以不要这样做:
chown www-data:www-data -R *
但是,在您安装或升级 WordPress 及其插件时,它会很有用。但是当您完成后,保留 Web 服务器拥有的 wp 文件不再是一个好主意。
它基本上允许网络服务器放置或覆盖您网站中的任何文件。这意味着如果有人设法使用 Web 服务器(或某些 .php 脚本中的安全漏洞)将一些文件放入您的网站,就有可能接管您的网站。
为了保护您的站点免受此类攻击,您应该执行以下操作:
所有文件都应该归您的用户帐户所有,并且应该可以由您写入。任何需要 WordPress 写入权限的文件都应该可以由 Web 服务器写入,如果您的主机设置需要它,这可能意味着这些文件需要由 Web 服务器进程使用的用户帐户归组所有。
/
WordPress 根目录:所有文件都应该只能由您的用户帐户写入,如果您希望 WordPress 自动为您生成重写规则,则 .htaccess 除外。
/wp-admin/
WordPress 管理区域:所有文件只能由您的用户帐户写入。
/wp-includes/
大部分 WordPress 应用程序逻辑:所有文件都应该只能由您的用户帐户写入。
/wp-content/
用户提供的内容:旨在由您的用户帐户和 Web 服务器进程写入。
你
/wp-content/
会发现:
/wp-content/themes/
主题文件。如果您想使用内置的主题编辑器,所有文件都需要可由 Web 服务器进程写入。如果您不想使用内置主题编辑器,则所有文件只能由您的用户帐户写入。
/wp-content/plugins/
插件文件:所有文件只能由您的用户帐户写入。
可能存在的其他目录
/wp-content/
应由需要它们的插件或主题记录。权限可能会有所不同。
对于那些在主文件夹下有 wordpress 根文件夹的人:
** Ubuntu/阿帕奇
CREDIT授予 www-data 组写入权限
你想打电话usermod
给你的用户。所以那将是:
sudo usermod -aG www-data yourUserName
** 假设www-data
组存在
检查您的用户是否在www-data
组中:
groups yourUserName
你应该得到类似的东西:
youUserName : youUserGroupName www-data
** youUserGroupName 通常与您的用户名相似
递归更改 wp-content 文件夹的组所有权,保持您的用户所有权
chown yourUserName:www-data -R youWebSiteFolder/wp-content/*
将目录更改为 youWebSiteFolder/wp-content/
cd youWebSiteFolder/wp-content
递归更改文件夹和子文件夹的组权限以启用写入权限:
find . -type d -exec chmod -R 775 {} \;
** `/home/yourUserName/youWebSiteFolder/wp-content/' 的模式从 0755 (rwxr-xr-x) 更改为 0775 (rwxrwxr-x)
递归更改文件和子文件的组权限以启用写权限:
find . -type f -exec chmod -R 664 {} \;
结果应该类似于:
WAS:
-rw-r--r-- 1 yourUserName www-data 7192 Oct 4 00:03 filename.html
CHANGED TO:
-rw-rw-r-- 1 yourUserName www-data 7192 Oct 4 00:03 filename.html
相当于:
chmod -R ug+rw 文件夹名
文件的权限为 664,目录的权限为 775。
Ps 如果有人'could not create directory'
在更新插件时遇到错误,请执行:
server@user:~/domainame.com$ sudo chown username:www-data -R wp-content
当您位于域的根目录时。
假设:在 LocalHost 上wp-config.php
有FTP 凭据
define('FS_METHOD','direct');
最好阅读此https://wordpress.org/support/article/chang-file-permissions/上的 wordpress 文档
- 所有文件都应归实际用户帐户所有,而不是用于 httpd 进程的用户帐户
- 组所有权无关紧要,除非对 Web 服务器进程权限检查有特定的组要求。通常情况并非如此。
- 所有目录应为 755 或 750。
- 所有文件应为 644 或 640。例外:wp-config.php 应为 440 或 400,以防止服务器上的其他用户读取它。
- 任何目录都不应该被赋予 777,即使是上传目录。由于 php 进程作为文件的所有者运行,因此它获得所有者权限,甚至可以写入 755 目录。
我将权限设置为:
# Set all files and directories user and group to wp-user
chown wp-user:wp-user -R *
# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/
# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;
# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;
就我而言,我为 WordPress 创建了一个特定用户,该用户不同于 apache 默认用户,该用户阻止从 Web 访问该用户拥有的那些文件。
然后它授予 apache 用户处理上传文件夹的权限,最后设置足够安全的文件和文件夹权限。
已编辑
如果您使用的是 W3C Total Cache,您还应该执行以下操作:
rm -rf wp-content/cache/config
rm -rf wp-content/cache/object
rm -rf wp-content/cache/db
rm -rf wp-content/cache/minify
rm -rf wp-content/cache/page_enhanced
然后它会工作!
已编辑
在开发 WordPress 网站一段时间后,我建议每个环境使用不同的文件权限:
在生产中,我不会授予用户修改文件系统的权限,我只会允许他们上传资源并授予对某些插件特定文件夹的访问权限以进行备份等。但是在 Git 下管理项目并使用部署密钥服务器,在登台和生产上都不是很好的更新插件。我将生产文件设置留在这里:
# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/uploads/
www-data:www-data = apache 或 nginx 用户和组
暂存将共享相同的生产权限,因为它应该是它的克隆。
最后,开发环境将可以访问更新插件、翻译、一切......
# Set uploads folder user and group to www-data
chown www-data:www-data -R wp-content/
# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/themes
# Set uploads folder user and group to www-data
chown your-user:root-group -R wp-content/plugins/your-plugin
www-data:www-data = apache 或 nginx 用户和组 your-user:root-group = 你的当前用户和根组
这些权限将使您无需请求许可即可访问开发themes
和文件夹。your-plugin
其余内容将归 Apache 或 Nginx 用户所有,以允许 WP 管理文件系统。
在创建 git repo 之前,首先运行以下命令:
# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;
# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;
文件的正确权限是 644 文件夹的正确权限是 755
要更改权限,请使用终端和以下命令。
find foldername -type d -exec chmod 755 {} \;
find foldername -type f -exec chmod 644 {} \;
文件夹为 755,文件为 644。
我认为以下规则推荐用于默认的 wordpress 网站:
对于 wp-content 中的文件夹,设置 0755 权限:
chmod -R 0755 插件
chmod -R 0755 上传
chmod -R 0755 升级
让 apache 用户成为上述 wp-content 目录的所有者:
chown apache 上传
chown apache升级
chown apache 插件
这实际上取决于您计划使用的插件,因为某些插件会更改 wordpress 的根文档。但通常我会为 wordpress 目录推荐这样的东西。
这会将“root”(或您正在使用的任何用户)分配为每个文件/文件夹中的用户,R 表示递归,因此它不会停止在“html”文件夹中。如果你没有使用 R,那么它只适用于“html”目录。
sudo chown -R root:www-data /var/www/html
这会将“wp-content”的所有者/组设置为“www-data”,从而允许 Web 服务器通过管理面板安装插件。
chown -R www-data:www-data /var/www/html/wp-content
这会将“html”文件夹中的每个文件(包括子目录中的文件)的权限设置为644,因此外部人员不能执行任何文件,修改任何文件,组不能执行任何文件,修改任何文件并且只能允许用户修改/读取文件,但即使用户仍然无法执行任何文件。这很重要,因为它可以防止在“html”文件夹中执行任何类型的操作,而且由于 html 文件夹和除 wp-content 文件夹之外的所有其他文件夹的所有者都是“root”(或您的用户),因此 www-data 可以t 修改 wp-content 文件夹之外的任何文件,因此即使 Web 服务器中存在任何漏洞,并且如果有人未经授权访问该站点,他们也无法删除除插件之外的主站点。
sudo find /var/www/html -type f -exec chmod 644 {} +
这会将访问“wp-config.php”的权限限制为具有rw-r-----这些权限的用户/组。
chmod 640 /var/www/html/wp-config.php
如果插件或更新抱怨它无法更新,则访问 SSH 并使用此命令,并通过管理面板授予“www-data”(Web 服务器)临时权限以更新/安装,然后恢复完成后返回“root”或您的用户。
chown -R www-data /var/www/html
并在 Nginx(与 apache 相同的程序)中保护 wp-admin 文件夹免受未经授权的访问和探测。即使您安装了 nginx,也需要 apache2-utils 来加密密码,如果您打算将更多用户添加到同一个文件,请省略 c。
sudo apt-get install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd userName
现在访问这个位置
/etc/nginx/sites-available/
使用此代码用密码保护“wp-admin”文件夹,现在如果您尝试访问“wp-admin”,它将询问密码/用户名。注意,这里您使用包含加密密码的“.htpasswd”文件。
location ^~ /wp-admin {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
index index.php index.html index.htm;
}
现在重启nginx。
sudo /etc/init.d/nginx restart
命令:
chown www-data:www-data -R *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
其中 ftp-user 是您用来上传文件的用户
chown -R ftp-user:www-data wp-content
chmod -R 775 wp-content
要绝对确保您的网站是安全的并且您对文件夹使用正确的权限,请使用如下安全插件:
https://en-ca.wordpress.org/plugins/all-in-one-wp-security-and-firewall/
https://en-ca.wordpress.org/plugins/wordfence/
这些插件将扫描您的 Wordpress 安装并通知您任何潜在问题。这些还会警告您任何不安全的文件夹权限。除此之外,这些插件会建议您应该为文件夹分配哪些权限。
chown -Rv www-data:www-data
chmod -Rv 0755 wp-includes
chmod -Rv 0755 wp-admin/js
chmod -Rv 0755 wp-content/themes
chmod -Rv 0755 wp-content/plugins
chmod -Rv 0755 wp-admin
chmod -Rv 0755 wp-content
chmod -v 0644 wp-config.php
chmod -v 0644 wp-admin/index.php
chmod -v 0644 .htaccess
在 wp_config 文件中定义。
/var/www/html/Your-Project-File/wp-config.php
define( 'FS_METHOD', 'direct' );
chown - 更改文件/目录的所有权。IE。文件/目录的所有者更改为指定的所有者,但不会修改权限。
sudo chown -R www-data:www-data /var/www
我无法告诉您这是否正确,但我在 Google Compute App Engine 上使用了 Bitnami 图像。我在插件和迁移方面遇到了问题,在通过 chmod'ing 权限进一步搞砸了事情之后,我发现这三行解决了我所有的问题。不确定这是否是正确的方法,但对我有用。
sudo chown -R bitnami:daemon /opt/bitnami/apps/wordpress/htdocs/
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type f -exec chmod 664 {} \;
sudo find /opt/bitnami/apps/wordpress/htdocs/ -type d -exec chmod 775 {} \;
对于 OS X,请使用以下命令:
sudo chown -R www:www /www/folder_name
基于我自己网站上的所有阅读和痛苦,在被黑客入侵后,我提出了上面的列表,其中包括一个名为 Wordfence 的 Wordpress 安全插件的权限。(不隶属于它)
在我们的示例中,wordpress 文档根目录是 /var/www/html/example.com/public_html
打开权限,以便 www-data 可以写入文档根目录,如下所示:
cd /var/www/html/example.com
sudo chown -R www-data:www-data public_html/
现在,作为管理员,您可以从站点的仪表板执行更新。
按照以下步骤完成更新后的安全站点:
sudo chown -R wp-user:wp-user public_html/
上述命令将 wordpress 安装中所有内容的权限更改为 wordpress FTP 用户。
cd public_html/wp-content
sudo chown -R www-data:wp-user wflogs
sudo chown -R www-data:wp-user uploads
上述命令确保安全插件 Wordfence 可以访问其日志。上传目录也可由 www-data 写入。
cd plugins
sudo chown -R www-data:wp-user wordfence/
上述命令还确保安全插件需要读写权限才能正常运行。
目录和文件权限
# Set all directories permissions to 755
find . -type d -exec chmod 755 {} \;
# Set all files permissions to 644
find . -type f -exec chmod 644 {} \;
将 wp-config.php 的权限设置为 640,这样只有 wp-user 可以读取此文件,其他人无法读取。具有上述文件所有权的 440 权限对我不起作用。
sudo chmod 640 wp-config.php
使用 SSH 的 Wordpress 自动更新在 PHP5 上运行良好,但由于 php7.0-ssh2 与 Ubuntu 16.04 捆绑的问题而与 PHP7.0 中断,我找不到如何安装正确的版本并使其工作。幸运的是,一个名为ssh-sftp-updater-support (免费)的非常可靠的插件可以使用 SFTP 进行自动更新,而无需 libssh2。因此,除非在极少数情况下需要,否则永远不必放松上述权限。