找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4431

积分

0

好友

586

主题
发表于 2 小时前 | 查看: 3| 回复: 0

chmod(change mode)是Linux/Unix系统中用于修改文件和目录权限的核心命令。你是否曾在部署脚本或配置Web服务时,被“Permission denied”拦住了去路?理解并掌握chmod,是打通Linux系统管理任督二脉的关键一步。在Linux的安全模型中,每个文件和目录都有三组权限(所有者、所属组、其他用户)和三种基本权限(读、写、执行),chmod正是精确管理这些访问规则的工具。

它既支持直观的符号模式(如u+x),也支持简洁的数字模式(如755),能够满足从快速修改到精细控制的所有场景。正确的权限设置不仅是系统安全的基石,也关乎程序能否正常运行、多用户环境能否高效协作。下面,我们就通过一份详尽的速查表,帮你快速掌握chmod的方方面面。

1. 基本语法

命令 说明
chmod MODE FILE chmod通用语法
chmod 644 file.txt 使用数字模式设置权限
chmod u+x script.sh 为所有者添加执行权限
chmod g-w file.txt 移除组的写权限
chmod o=r file.txt 将其他用户权限设置为只读
chmod a+x script.sh 为所有用户(所有者、组、其他)添加执行权限

2. 数字权限模式

权限 说明
600 所有者读写,组和其他无权限(私密文件)
644 所有者读写,组和其他只读(标准文件)
640 所有者读写,组只读,其他无权限
664 所有者读写,组读写,其他只读(协作文件)
700 所有者完全控制,组和其他无权限
755 所有者完全控制,组和其他读和执行(标准目录、可执行文件)
750 所有者完全控制,组读和执行,其他无权限
775 所有者完全控制,组完全控制,其他读和执行
777 所有用户完全控制(危险,应避免)
444 所有用户只读
555 所有用户读和执行

3. 符号权限模式

命令 说明
chmod u+x file 为所有者添加执行权限
chmod g-w file 移除组的写权限
chmod o-rwx file 移除其他用户的所有权限
chmod ug+rw file 为所有者和组添加读写权限
chmod a+r file 为所有用户添加读权限
chmod a-x file 移除所有用户的执行权限
chmod u=rw,go=r file 所有者读写,组和其他只读(等价于644)
chmod u=rwx,go=rx dir/ 所有者完全控制,组和其他读和执行(等价于755)
chmod go= file 移除组和/or的所有权限

符号模式说明:

  • 用户标识u(所有者)、g(组)、o(其他)、a(所有)
  • 操作符+(添加)、-(移除)、=(精确设置)
  • 权限r(读)、w(写)、x(执行)

4. 文件和目录的典型权限

命令 说明
chmod 644 file.txt 标准文件权限(所有者读写,其他人只读)
chmod 755 script.sh 可执行脚本权限
chmod 755 directory/ 标准目录权限(可进入、列出内容)
chmod u=rw,go=r file.txt 644的符号模式
chmod u=rwx,go=rx directory/ 755的符号模式
chmod +x script.sh 快速使脚本可执行(保留其他权限)
chmod -x file.txt 移除所有用户的执行权限

5. 递归更改权限

命令 说明
chmod -R 755 project/ 递归设置目录及所有内容为755
chmod -R u+rwX project/ 递归添加读写和智能执行权限
find project -type f -exec chmod 644 {} + 只将文件设置为644
find project -type d -exec chmod 755 {} + 只将目录设置为755
chmod -R g-w shared/ 递归移除组的写权限
chmod -R a+r public/ 递归添加所有用户的读权限

智能执行(X)说明:大写的 X 表示仅当目标是目录或已有执行权限时才添加执行权限,对普通文件不会意外添加执行权限。这对于批量处理Shell脚本等运维任务非常安全。

6. 特殊权限位

命令 说明
chmod 4755 /usr/local/bin/tool 设置SUID(4),以文件所有者身份执行
chmod 2755 /srv/shared 设置SGID(2),新文件继承组
chmod 1777 /tmp/mytmp 设置粘滞位(1),仅所有者可删除
chmod u+s file 符号方式添加SUID
chmod g+s directory 符号方式添加SGID
chmod +t directory 符号方式添加粘滞位
chmod -s file 移除SUID/SGID

特殊权限说明:

  • SUID (4):执行时以文件所有者身份运行(如/usr/bin/passwd
  • SGID (2):目录中新建文件继承目录的组
  • Sticky Bit (1):目录中仅文件所有者可删除(如/tmp

7. 安全操作模式

命令 说明
chmod 600 ~/.ssh/id_ed25519 设置SSH私钥安全权限
chmod 700 ~/.ssh 设置SSH目录安全权限
chmod 644 ~/.ssh/id_ed25519.pub 公钥权限(可公开)
chmod 750 /var/www/app 限制Web根目录访问
chmod 755 script.sh 脚本权限(比777安全)
chmod 600 .pgpass 数据库密码文件权限
chmod 400 backup.key 备份密钥只读权限

8. 实用组合模式

命令 说明
chmod -R 755 public_html/ && find public_html -type f -exec chmod 644 {} + 目录755,文件644(标准网站配置)
chmod 600 config.yml && chmod +x deploy.sh 配置文件安全,部署脚本可执行
chmod -R u+rwX,go+rX project/ 保留所有者完全控制,其他人可读和智能执行
chmod 2770 /srv/teamproject && chmod g+s /srv/teamproject 协作目录设置
chmod -R --silent 755 /path 2>/dev/null 静默执行,忽略错误

9. 常用选项速查

选项 完整名称 说明
-R --recursive 递归更改目录及其内容
-v --verbose 显示详细处理信息
-c --changes 仅在发生更改时显示信息
-f --silent, --quiet 静默模式,抑制错误信息
--reference=RFILE - 使用参考文件的权限

10. 权限验证命令

命令 说明
ls -l file.txt 查看文件详细权限
ls -ld directory/ 查看目录权限
stat file.txt 显示文件的完整状态信息
namei -l /path/to/file 查看路径中所有目录的权限
getfacl file.txt 查看文件ACL权限(扩展权限)

11. 故障排查

问题 解决方法
Operation not permitted 检查文件所有权:ls -l;使用sudo或以文件所有者身份执行
Permission still denied after chmod 父目录可能缺少执行权限(需要x才能进入);检查ACL:getfacl
Cannot chmod symlink chmod默认作用于符号链接的目标文件,而非链接本身
递归模式破坏了应用文件 使用find分别处理文件和目录,而非单一的-R
更改在挂载分区上无效 检查挂载选项(如noexecnosuid)和文件系统类型
umask导致新文件权限不符预期 检查umask设置:umask;在脚本中设置适当umask
粘滞位没有生效 确认目录是否有t标志:ls -ld /tmp

温馨提示:权限设置务必遵循最小权限原则——只授予必要的权限。常用模式可以牢记于心:文件644/640,目录755/750,私密文件600,可执行脚本755。使用-R递归选项时要格外谨慎,避免破坏系统文件。对于生产环境,强烈建议先在测试环境验证更改,或者使用find命令分别对文件和目录进行精确的权限控制,这样更能保障Linux系统的稳定与安全。




上一篇:Python自动化小红书发布踩坑实录:从0到1的避坑指南与实战经验
下一篇:CSS contrast-color() 进阶:超越黑白,实现智能品牌配色
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-20 05:51 , Processed in 0.480144 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表