我运行 Linux Mint,带有 Apache2、PHP 和 MySQL。我已经激活了 Apache 的模块,以便public_html
可以使用用户的模块并可以从它们运行 PHP 脚本。我在我的public_html
(即)中安装了 WordPress ~/public_html/wordpress
,但它不能完全运行。
当我尝试更改背景图像或标题图像时,收到一条错误消息,指出无法创建存储上传内容的目录(年/月或月/年)。
显然我的网络服务器没有权限在public_html
或其子目录(如 下的一些目录~/public_html/wordpress
)中创建目录 - 可能也没有创建文件。
因此我想知道我的选择是什么。是否有一些我必须添加的模块或一些我必须修复的配置文件,以便网络服务器可以写入?或者我是否必须更改 - 及其子目录的所有者和/或组public_html
(有没有办法确保子目录属于同一所有者/组)? ...显然不会阻止我更改我的网页。非常欢迎提出建议、建议和最佳实践。
我知道如果我以 root 身份安装 WordPress,可能会遇到更少的麻烦/var/www
,但我宁愿避免这种解决方案。
答案1
显然我的网络服务器没有权限在 public_html 或其子目录(如 ~/public_html/wordpress 下的某些目录)中创建目录 - 也可能无权创建文件。
这确实很有可能是问题所在。但是,您不必将自己锁定在该目录之外:有许多选项允许您将文件保留在该目录中并允许 Web 服务器写入该目录:
将自己放入
www-data
组:sudo gpasswd -a $(whoami) www-data
,然后更改 public_html 目录的组:sudo chown -R $(whoami):www-data ~/public_html
。这样您和 Web 服务器都将共享该目录。使用粘性位:这将允许 Web 服务器将文件写入该目录,同时还携带该文件夹的组,从而允许您仍然以用户身份访问上传目录:
chmod g+rws,o+rwx ~/public_html/wordpress/wp-content
。使用 ACL 指定高级权限以允许服务器写入目录:
setfacl -m u:www-data:rwx ~/public_html/wordpress/wp-content
。如果您走那条路,我建议您阅读手动的对于 ACL,因为它们非常强大并且您可以用它们做很多事情。
警告
但请注意,上述解决方案都不太适合生产环境,因为它们都将允许服务器上允许运行 PHP 代码的任何用户也拥有 Web 服务器权限,因此可能会将恶意文件放入您的上传目录中。确保仅有的使上传目录可写,并确保放置一个 .htaccess 禁止从该上传目录执行任何代码。对于生产服务器,我建议使用 suexec、php-fpm 或任何其他方式在 Web 服务器外部执行 PHP 代码,以用户的系统用户身份运行 PHP。