我在共享主机(CentOS)上运行 wordpress 网站。只有当我将上传目录设置为 777 时,才能通过 wordpress 上传,但这并不安全。
上传目录归用户和组 psacln 所有(我们在服务器上使用 plesk)。
在 Google 上搜索之后仍然不明白我该怎么做,才能让用户从 wordpress 上传而不在目录上设置 777?
谢谢
答案1
该目录需要由运行 PHP 进程的同一用户拥有。如果您在 apache 下使用 PHP,则此用户通常是 apache。
您可以通过检查 httpd 的用户来检查这一点:
[user@host ~]$ ps aux | grep httpd
您将获得类似这样的输出:
[user@host ~]$ ps aux | grep nginx
root 4774 0.0 0.3 11204 3288 ? Ss 12:20 0:00 /usr/sbin/httpd
apache 4776 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4777 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4778 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4779 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4780 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4781 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4782 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4783 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
root 4787 0.0 0.0 5500 716 pts/1 S+ 12:20 0:00 grep httpd
在这里,我运行的是将 PHP 编译为模块的 apache,因此将权限更改为“apache”将解决您的问题,并且如果您确实有安全意识,您可以将权限重置为 755 或 700:
[user@host ~]$ chown apache /path/to/upload/dir
[user@host ~]$ chmod 755 /path/to/upload/dir
根据您的评论,您可以将apache
和添加psacln
到同一组,更改组所有权并以此方式进行 chmod
[user@host ~]$ sudo groupadd web
[user@host ~]$ sudo usermod -G web apache
[user@host ~]$ sudo usermod -G web psacln
[user@host ~]$ chgrp web /path/to/upload/dir
[user@host ~]$ chmod 070 /path/to/upload/dir
您还可以使用 575 来获得 rwr 权限(所有者、组、其他)
答案2
我正在使用这个简单的脚本在文件系统上设置所有正确的权限,以保证 WordPress 安装尽可能安全,但仍然允许从 Web 服务器上传。
#!/bin/bash
PATH=/bin:/usr/bin
WEBROOT="/var/www/www.example.org"
UPLOADS="${WEBROOT}/wp-content/uploads"
chown -R nobody:nogroup ${WEBROOT}
find ${WEBROOT} -type d -exec chmod 0555 {} \;
find ${WEBROOT} -type f -exec chmod 0444 {} \;
chown nobody:www-data ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chmod 0464 ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chown -R nobody:www-data ${UPLOADS}
find ${UPLOADS} -type d -exec chmod 2575 {} \;
find ${UPLOADS} -type f -exec chmod 0464 {} \;
如果我想升级 WordPress 或任何插件或主题,我只需运行
chmod -R 0777 /var/www/www.example.org
然后进行更新。升级完成后,我立即运行第一个脚本来再次设置正确的权限。
答案3
使用 777 或添加 apache/http/user 权限并允许文件修改是不安全的。
不允许直接下载,只在升级时使用 ftp 或 SFTP 访问。这样,网站对文件只有读取/执行权限(如果你之前没有做过该死的 777)。
为了安全的权限管理,请使用 WSD 安全扫描器插件来测试您的 WP 是否安全。