改权限用chmod,改所有者和所属组用chown;两者功能不同、不可替代——chmod设置读写执行权限,chown修改文件归属(用户和组);查看权限与归属须用ls -l,第一列为权限,第三、四列为所有者和组。

直接说结论:改权限用 chmod,改主人用 chown;两者常一起用,但不能互相替代——chmod 777 解不了“Permission denied: no access to file owner”这类问题,必须先 chown。
怎么看当前文件的权限和所有者
执行 ls -l filename 是唯一可靠入口。输出第一列如 -rw-r--r-- 中,前1位是类型(- 文件 / d 目录),后9位每3个一组,分别对应 user/group/others 的 r/w/x 状态;紧接着的两列是所有者和所属组,例如:-rw-r--r-- 1 alice developers 1024 Apr 28 08:00 config.yaml 表示所有者是 alice,组是 developers。
常见误判点:
- 看到
Permission denied就以为是权限不够,其实可能是当前用户根本不是文件所有者或所属组成员,chmod再怎么调也无效 - 误把目录的
x权限当成“可执行”,其实对目录来说x= “可进入”,没有它连cd都进不去 -
ls -l显示的组名不等于你当前所在组,得用groups命令确认自己是否在目标组里
chmod 数字模式 vs 符号模式怎么选
数字模式(如 644、755)适合批量设固定权限,符号模式(如 u+x、go-w)适合微调、叠加或撤销某类权限。别混用——chmod 644 file && chmod u+x file 最终是 744,但不如一步写成 chmod u+x,go-w file 清晰。
关键规则:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- r=4, w=2, x=1,三位数分别对应 user/group/others,如
755=u=rwx,g=rx,o=rx - 脚本文件通常要
x,但配置文件绝不能有x,否则 nginx/apache 可能拒绝加载 - 目录必须有
x才能ls或cd,所以755或750比644更合理 - 慎用
R递归:对目录用chmod -R 755 dir/会把里面所有.txt文件也设成可执行,应改用find dir/ -type d -exec chmod 755 {} \;和find dir/ -type f -exec chmod 644 {} \;分开处理
chown 修改所有者时为什么总提示 Operation not permitted
普通用户只能修改自己拥有的文件,且目标用户必须是自己所属的组(仅限改组)。想改别人文件的所有者,必须用 sudo;但即使有 sudo,也不能把文件所有者改成任意用户——目标用户必须真实存在(id target_user 能查到),且不能是保留用户(如 root 以外的系统账户,某些发行版会限制)。
典型失败场景:
- 执行
chown nobody:nogroup file失败,因为nobody用户被禁用或 shell 设为/usr/sbin/nologin,但不影响归属设置;真正问题是该用户不存在于/etc/passwd - 只改组不加冒号:错写成
chown :www-data file(正确),而非chown www-data file(这会改所有者) - 递归改目录时漏掉
-R,结果只有目录本身变了,内部文件还是旧归属 - Web 部署常用组合:
sudo chown -R www-data:developers /var/www/app+chmod -R 750 /var/www/app,确保 web 进程可读可进,开发者组可读写,其他人完全隔离
chmod 和 chown 组合使用的最小权限原则
安全配置的核心不是“能不能用”,而是“谁在什么条件下能做什么”。比如部署一个 PHP 应用:
- 源码目录归属设为
deployer:www-data,权限750:部署者可改,web 进程可读+进,其他人无权 - 上传目录(
uploads/)归属同上,但权限需770:web 进程要写入,但仅限组内 - 敏感配置文件(如
.env)归属deployer:deployer,权限600:连 web 进程都不能读,靠环境变量注入 - 千万别用
chmod 777或chown root:root图省事——前者让任何用户都能删库,后者导致 web 进程因权限不足而 500
最易被忽略的一点:权限变更后,SELinux 或 AppArmor 等 MAC 框架可能仍拦截访问,此时 ls -Z 和 ausearch -m avc -ts recent 才是真凶,chmod/chown 解不了这类问题。

















