前面基于LAMP环境搭建好了WP网站系统,但是无奈于Linux系统的权限十分的复杂, 网站经常没有写入权限,导致无法上传图片主题,无法自动更新网站等,特别麻烦。折腾了好久,终于是解决掉了,写下来留个参考。
环境:vultr日本VPS主机,基于Linux的Debian x64系统,网站环境LAMP
由于刚安装好博客,我没法上传图片,所以用winscp连接上我的服务器,将网站的安装目录中/var/www/xiaoweigod.com/wp-content文件夹给予了777权限,即所有用户可自由读写。上传图片的问题解决了,可是网站还是无法自动更新,连网站翻译都无法更新,插件也安装不上。后来又用winscp将我网站中的所有文件夹给予了777权限,还是没法解决(现在想想也是挺傻的)。后来上百度和谷歌搜索了下,发现其实并不是权限的问题。
看多了教程也慢慢明白起来了。我给予的777权限并不能解决博客创建临时目录的权限问题,核心就在于winscp,这个可视化的操作软件,本来是用XSHELL的,纯命令但嫌太麻烦。winscp给予一个目录权限后,并不能自动给予其子目录权限,要一个个去改;而且就算你把所有文件夹都改好了,但在改好的文件夹下却没有创建子目录的权限。发现这个之后,我就用Xshell,在/var/www/ 路径下执行
chmod 777 xiaoweigod.com
即将整个网站目录给予777最高权限。
本来以为OK了,但是后来测试还是不行,依然是无法更新程序和翻译,插件也安装提示失败。于是又去搜索教程,最后我才发现问题的关键。问题在于用户而不仅仅在于权限。LAMP环境中,即Linux+Apache2+Mysql+PHP环境搭建的网站服务器,由Apache2对网站目录进行操作,而用于操作的用户组名为www,用户名为www。于是我在wp-content目录下执行了 ls -l 命令,果然发现了问题!如图:
在wp-content文件中包含平时写博客上传的图片,结果无一例外是root用户上传的!也就是说上传文件的操作是root用户(超级用户)完成的,并不是Aapche2所控制的www用户。找到了问题所在,接下来就简单了。进入 /var/www 路径下,执行了
chmod -R www:www xiaoweigod.com
结果提示:
invalid user'www:www' (不正确的用户名。)
出现这种问题的原因是Apache2用于操作网站目录的用户名不是www,而是另有其他,这很好办。用winscp进入 /var/www/xiaoweigod.com/wp-content目录中,将uploads文件夹重命名为uploads1,然后去网站上撰写文章,上传图片。完了在winscp中刷新一下,果然出现了一个名为uploads的文件夹,并且所属用户是www-data!也就说说Apache2用于操作网站目录的用户名是www-data,所属的用户组为www-data。于是返回 /var/www 执行
chmod -R www-data:www-data xiaoweigod.com
直接就搞定了,立马就可以更新主题翻译,下载插件了。
在这一切都完成后,我又把网站目录的权限改回了755。
参考文章: Linux无法写入权限问题 & 解决Wordpress不能自动安装主题、插件
by @Misery