Linux下chmod 命令详解
chmod(change mode)是 Linux/Unix 系统中用于修改文件或目录权限的命令。正确设置权限是系统安全的重要基础。本文将详细介绍 chmod 的用法,包括权限的基本概念、符号模式、数字模式以及常见选项。
一、文件权限基础
在 Linux 中,每个文件或目录都有一组权限,分别针对三类用户:
· 所有者(u):文件的拥有者
· 所属组(g):文件所属的用户组
· 其他用户(o):既不是所有者也不属于所属组的其他用户
每类用户的权限又分为三种:
· 读(r):对于文件,表示可以读取内容;对于目录,表示可以列出目录中的内容。
· 写(w):对于文件,表示可以修改内容;对于目录,表示可以在目录中创建、删除或重命名文件。
· 执行(x):对于文件,表示可以运行该文件(如脚本、程序);对于目录,表示可以进入该目录。
使用 ls -l 命令查看文件权限时,会显示类似 -rw-r--r-- 的字符串,共 10 个字符:
· 第 1 个字符:文件类型(- 普通文件,d 目录,l 符号链接等)
· 第 2-4 字符:所有者权限(rwx)
· 第 5-7 字符:所属组权限(rwx)
· 第 8-10 字符:其他用户权限(rwx)
例如:-rw-r--r-- 表示所有者可读写,组和其他用户只读。
二、chmod 命令的基本语法
chmod [选项] 模式 文件/目录
· 模式:指定要修改的权限,可以用符号模式或数字模式表示。
· 选项:常用选项如 -R(递归修改目录及其内容)。
· 文件/目录:要修改权限的目标。
三、符号模式(Symbolic Mode)
符号模式使用字母和操作符组合来表示权限的更改。格式为:
[用户类型][操作符][权限]
用户类型(可组合,省略时表示所有用户):
· u:所有者
· g:所属组
· o:其他用户
· a:所有用户(等同于 ugo)
操作符:
· +:添加权限
· -:移除权限
· =:设置精确权限(覆盖原有权限)
权限:
· r:读
· w:写
· x:执行
· X:特殊执行权限(仅当文件是目录或已有执行权限时才添加执行权限)
· s:setuid/setgid(特殊权限)
· t:sticky bit(粘滞位)
符号模式示例
命令 说明
chmod u+x file 为所有者添加执行权限
chmod go-w file 从所属组和其他用户移除写权限
chmod a=r file 设置所有用户权限为只读(将覆盖原有权限)
chmod u=rwx,g=rx,o=r file 分别设置所有者(rwx)、组 (rx)、其他(r)权限
chmod o+x,g+w file 同时为其他用户添加执行权限,为组添 加写权限
chmod -R u+x dir/ 递归地为目录 dir 及其所有内容的所有者 添加执行权限
四、数字模式(Octal Mode)
数字模式使用八进制数(0-7)来表示权限。每个权限对应一个数字:
· 读(r) = 4
· 写(w) = 2
· 执行(x) = 1
每类用户的权限值是将对应权限的数字相加,得到一个 0-7 的数字。三位数字分别代表所有者、所属组、其他用户的权限。
例如:
· 7 = 4+2+1 = rwx
· 6 = 4+2 = rw-
· 5 = 4+1 = r-x
· 4 = 4 = r--
· 0 = ---
数字模式示例
命令 数字含义说明
chmod 755 file 所有者 rwx (7),组 r-x (5),其他 r-x (5) 常 见文件权限所有者可读写执行,组和其他可读执行
chmod 644 file 所有者 rw- (6),组 r-- (4),其他 r-- (4) 常
见文件权限,所有者可读写,组和其他只读
chmod 700 file 所有者 rwx (7),组 --- (0),其他 --- (0) 仅 所有者有全部权限
chmod 777 file 所有用户 rwx 所有用户可读写执行(不安全, 谨慎使用)
chmod 664 file 所有者 rw- (6),组 rw- (6),其他 r-- (4) 常 用于共享文件,组内可写
五、特殊权限位
除了基本的 rwx 权限,还有三个特殊权限,可以通过数字模式或符号模式设置。
1. setuid(4xxx)
· 当可执行文件设置了 setuid 位,用户运行该文件时,将以文件所有者的身份运行(而不是运行者的身份)。
· 符号模式:u+s
· 数字模式:在所有者权限前加 4,例如 4755(setuid + rwxr-xr-x)
2. setgid(2xxx)
· 对文件:运行时以文件所属组的身份运行。
· 对目录:在该目录下创建的新文件或子目录,将继承该目录的所属组,而不是创建者的主要组。
· 符号模式:g+s
· 数字模式:在所有者权限前加 2,例如 2755(setgid + rwxr-xr-x)
3. sticky bit(1xxx)
· 主要用于目录。设置了 sticky bit 的目录,即使用户有写权限,也不能删除或重命名其他用户创建的文件(仅 root 和文件所有者可以删除)。
· 典型例子:/tmp 目录(权限 1777)。
· 符号模式:o+t
· 数字模式:在所有者权限前加 1,例如 1777(sticky + rwxrwxrwx)
设置特殊权限时,数字模式使用四位数字,第一位是特殊权限值(4/2/1 或组合,如 7=4+2+1)。例如:
chmod 4755 script # 设置 setuid,权限为 rwsr-xr-x
chmod 2755 dir/ # 设置 setgid,权限为 rwxr-sr-x
chmod 1777 tmp/ # 设置 sticky bit,权限为 rwxrwxrwt
六、常用选项
· -R:递归修改,将权限应用于目录及其所有子文件和子目录。
chmod -R 755 /path/to/dir
· -v:显示详细输出,列出每个文件权限的更改。
· -c:类似 -v,但仅在权限实际更改时显示。
· --reference=RFILE:将目标文件的权限设置为与参考文件 RFILE 相同。
chmod --reference=ref_file target_file
七、注意事项
1. 谨慎使用 chmod 777:这会使任何用户都可读写执行文件,存在严重安全风险。除非明确需要,应避免使用。
2. 目录的执行权限:对目录而言,执行权限意味着可以进入目录(cd)。如果目录没有执行权限,即使有读权限也无法列出内容。
3. 递归修改时注意符号链接:默认情况下,chmod -R 不会跟随符号链接,如需更改链接指向的文件,需使用其他方法。
4. 特殊权限的安全影响:setuid/setgid 可能带来安全风险,仅应在必要时使用。
八、总结
chmod 是 Linux 系统管理中必不可少的命令。掌握符号模式和数字模式,能够灵活地设置文件和目录的访问权限,保障系统安全。日常使用中,推荐使用数字模式(如 755、644)快速设置,符号模式更适合微调权限。对于目录,记得考虑执行权限对访问的影响。
通过合理运用权限,可以有效控制用户对资源的访问,避免未经授权的操作。