Linux 提示 Permission denied,先别急着 chmod 777

举报
yd_299926989 发表于 2026/11/07 08:42:07 2026/11/07
【摘要】 在 Linux 上部署网站或跑脚本,碰到 Permission denied 很常见。直接把目录改成 777 虽然省事,但也把写权限给了所有本地用户,不适合当成默认解决办法。可以按下面的顺序查。 先确认是谁在访问终端里执行的程序通常使用当前用户身份;网站服务则可能是 www、www-data 或 nginx,具体以实际配置为准。whoamiidls -ld /path/to/appls -l...

在 Linux 上部署网站或跑脚本,碰到 Permission denied 很常见。直接把目录改成 777 虽然省事,但也把写权限给了所有本地用户,不适合当成默认解决办法。可以按下面的顺序查。

先确认是谁在访问

终端里执行的程序通常使用当前用户身份;网站服务则可能是 www、www-data 或 nginx,具体以实际配置为准。

whoami
id
ls -ld /path/to/app
ls -l /path/to/app/config.ini

这里的路径只是示例,需要换成自己的文件。重点看属主、属组,以及正在运行的程序属于哪个用户,不要只看自己的账号能不能打开文件。

文件能读,父目录也得能走进去

访问一个文件时,路径上的每一级目录都需要相应的执行权限。文件本身有读权限,不代表一定能访问到它。

namei -l /path/to/app/config.ini

如果系统没有 namei,也可以逐层用 ls -ld 检查。目录上的 r 是列出目录内容,x 是进入和访问目录里的条目,含义和普通文件的可执行权限不一样。

只改需要的那一处

确认脚本可信、确实需要直接执行时,可以给属主增加执行权限:

chmod u+x ./deploy.sh

这只对属主生效;如果由别的服务用户执行,还要检查属组及对应权限。网站里的上传、缓存、日志目录可能需要写权限,但代码和配置不应该因此全部开放写入。也不要没检查目录内容就递归 chown,尤其是共享目录或包含敏感文件的路径。

普通权限没问题,再查其他限制

还可能是 ACL、SELinux、只读挂载,或者分区启用了 noexec。可以结合实际环境检查:

getfacl /path/to/app/config.ini
findmnt -T /path/to/app
getenforce

这些工具并非每台机器都安装。getenforce 只适用于启用了 SELinux 的系统;其他系统还可能有 AppArmor 等限制。不要为了验证猜测就直接关闭安全机制,先看拒绝日志和具体策略。

排查权限问题,最重要的是对齐“哪个进程、以哪个用户、访问哪个路径、需要什么权限”。定位到原因以后再改,通常比到处加 777 更省心。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。