数字化技能提升教程,数字化时代生存宝典

Linux如何正确设置网站目录所有者与读写权限

浏览:158

网站迁移、解压文件或更换PHP运行方式后,可能出现图片无法上传、缓存无法生成、配置文件不可读等问题。很多人会直接把网站目录设置为777,虽然可能暂时恢复写入,却会扩大安全风险。

正确做法是先确认Web服务器和PHP使用哪个账号运行,再按目录用途设置所有者与权限。

一、查看当前权限

进入网站上级目录,执行:

ls -la /var/www/example.com

查看路径中每一级目录权限:

namei -l /var/www/example.com/public/index.php

常见输出中的权限含义如下:

drwxr-xr-x
-rw-r--r--

第一个字符表示文件类型,后面三组权限分别属于所有者、用户组和其他用户。

二、确认服务运行账号

Nginx可以检查:

ps aux | grep nginx

Apache可以检查:

ps aux | grep -E 'apache2|httpd'

PHP-FPM账号通常配置在池文件中:

grep -R "^[[:space:]]*user =" /etc/php/*/fpm/pool.d/

不同系统可能使用www-data、nginx、apache或独立网站账号。不要在没有确认的情况下照搬用户名称。

三、设置网站目录所有者

假设网站由www-data账号运行,可执行:

sudo chown -R www-data:www-data /var/www/example.com

如果网站代码通过部署账号更新,而PHP只需要写入上传和缓存目录,可以让代码属于部署账号,只对必要目录授予Web服务写权限。

这样比让Web服务账号拥有整个网站目录的写权限更安全。

四、设置基础文件权限

普通网站常见权限为:

sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;

其中:

  • 目录755:所有者可写,其他用户可读取和进入
  • 文件644:所有者可写,其他用户只读

需要由程序写入的上传、缓存和会话目录,应结合运行账号单独设置,而不是提高整个网站权限。

五、保护敏感配置文件

包含数据库密码和接口密钥的文件应进一步收紧权限。例如:

sudo chmod 640 /var/www/example.com/.env

WordPress网站可以根据实际运行环境收紧:

sudo chmod 640 /var/www/example.com/wp-config.php

修改后要测试PHP进程是否仍能读取文件。权限过严同样会造成网站无法运行。

六、不要使用777解决问题

以下命令不应作为通用修复方式:

chmod -R 777 /var/www/example.com

777允许所有本机用户读写和进入目录。共享服务器或存在其他服务账号时,这会明显增加文件被篡改的风险。

遇到写入失败,应检查:

  • 文件所有者是否正确
  • PHP-FPM运行账号是否匹配
  • 目标目录是否需要写权限
  • SELinux是否拦截访问
  • 磁盘是否已满
  • 文件系统是否只读

相关文章
猜你喜欢