39.LNMP 修改网站目录权限时提示 .user.ini: Operation not permitted 权限不够错误的解决方法

一般来说我们出现这个问题的时候有两种情况,一种是想修改网站目录权限,比如使用 chown -R www:www domain.com 的时候。另一种是想删除整个网站目录的时候。

那么 .user.ini 为什么无法修改呢,是因为这个文件被 chattr 命令锁定了。

chattr 命令:有时候你发现用 root 权限都不能修改某个文件,大部分原因是曾经用 chattr 命令锁定该文件了。chattr 命令的作用很大,通过 chattr 命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。chattr 命令不能保护 /、/dev、/tmp、/var 目录。lsattr 命令是显示 chattr 命令设置的文件属性。

解决方法也可以参考 LNMP 官方文档给出的建议

  • .user.ini 文件无法直接修改,如要修或删除需要先执行:chattr -i /网站目录/.user.ini
  • 可以使用 winscp 文件管理、vim 编辑器或 nano 编辑器进行修改。
  • 删除的话 rm -f /网站目录/.user.ini 就可以。
  • 修改完成后再执行:chattr +i /网站目录/.user.ini
  • .user.ini 不需要重启一般 5 分钟左右生效,也可以重启一下 php-fpm 立即生效。
  • 如果要更改网站目录必须要按上述方法修改防跨目录的设置,否则肯定报错!!

以下操作不建议

  • LNMP 1.4 或更高版本如果不想用防跨目录除需要删除 .user.ini 的防跨目录的目录还需要将 /usr/local/nginx/conf/fastcgi.conf 里面的 fastcgi_param PHP_ADMIN_VALUE “open_basedir=$document_root/:/tmp/:/proc/”; 在该行行前添加 # 或删除改行,需要重启nginx。
  • LNMP 1.4或更高版本也可以直接使用lnmp安装包 tools/ 目录下的 ./remove_open_basedir_restriction.sh 进行移除。

此外,在 Thinkphp、codeigniter、Laravel 等框架下,网站目录一般是在 public 下,但是 public 下的程序要跨目录调用 public 上级目录下的文件,因为 LNMP 默认是不允许跨目录访问的,所以都是必须要将防跨目录访问的设置去掉,有时候这些框架类的程序提示 500 错误也可能是这个问题引起的。

最后,如果我们只是单纯的想修改一下网站目录的权限,那么完全可以忽略这个错误,不用管就行。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容