Unix与Linux系统的文件权限是用来控制不同用户对文件或目录的访问能力的机制,通过权限设置可以避免未授权用户修改、查看或执行重要文件,是系统安全的基础组成部分。

文件权限的基本构成
在Unix和Linux系统中,使用ls -l命令查看文件详情时,第一行会显示文件的权限信息,权限字符串由10个字符组成,结构如下:
- 第一个字符表示文件类型,常见的有
-代表普通文件,d代表目录,l代表符号链接 - 第2到第4个字符代表文件所有者的权限
- 第5到第7个字符代表文件所属组的权限
- 第8到第10个字符代表其他用户的权限
例如权限字符串-rwxr-xr--表示这是一个普通文件,所有者有读、写、执行权限,所属组有读、执行权限,其他用户只有读权限。
三类权限的具体含义
读权限(r)
对于普通文件,读权限允许用户查看文件的内容,比如使用cat、more等命令读取文件。对于目录,读权限允许用户列出目录下的文件名称,比如使用ls命令查看目录内容。
写权限(w)
对于普通文件,写权限允许用户修改文件的内容,比如使用vi、echo等命令编辑或追加内容。对于目录,写权限允许用户在目录下创建、删除、重命名文件或子目录。
执行权限(x)
对于普通文件,执行权限允许用户将该文件作为程序运行,比如脚本文件、二进制可执行文件都需要执行权限才能运行。对于目录,执行权限允许用户进入该目录,或者使用cd命令切换到该目录,同时是访问目录下文件内容的基础权限。
权限的两种表示方式
符号表示法
符号表示法使用r、w、x分别表示读、写、执行权限,使用u表示所有者,g表示所属组,o表示其他用户,a表示所有用户。可以通过chmod命令使用符号表示法修改权限,示例如下:
# 给文件所有者添加执行权限 chmod u+x test.sh # 给所属组和其他用户移除写权限 chmod go-w test.txt # 给所有用户添加读权限 chmod a+r config.conf
数字表示法
数字表示法将每类权限对应一个数字,读权限对应4,写权限对应2,执行权限对应1,每类用户的权限值是对应权限数字的和。例如:
- 读+写权限:4+2=6
- 读+执行权限:4+1=5
- 读+写+执行权限:4+2+1=7
三类用户的权限值依次排列就组成了三位数字权限,比如755表示所有者7(rwx)、所属组5(r-x)、其他用户5(r-x)。使用数字表示法修改权限的示例如下:
# 设置文件权限为755 chmod 755 test.sh # 设置目录权限为644,注意目录通常需要执行权限才能进入,这里仅为示例 chmod 644 docs/
默认权限与umask
新创建的文件或目录的默认权限不是固定的,而是由系统的umask值决定。umask表示默认要移除的权限,普通文件的默认最大权限是666,目录的默认最大权限是777。实际权限等于最大权限减去umask值。
例如系统umask值为022,那么新创建的普通文件权限为666-022=644(rw-r--r--),新创建的目录权限为777-022=755(rwxr-xr-x)。可以通过umask命令查看或修改当前会话的umask值:
# 查看当前umask值 umask # 设置umask值为027 umask 027
特殊权限说明
除了基本的读、写、执行权限外,Unix和Linux还有三个特殊权限:
- SUID(Set User ID):仅对可执行文件有效,执行该文件的用户会临时获得文件所有者的权限,比如
/usr/bin/passwd文件就有SUID权限,普通用户可以修改自己的密码 - SGID(Set Group ID):对可执行文件和目录有效,可执行文件执行时临时获得所属组权限,目录中新建的文件会继承目录的所属组
- Sticky Bit:仅对目录有效,目录设置该权限后,只有文件所有者、目录所有者或root用户才能删除目录下的文件,比如
/tmp目录就设置了Sticky Bit权限
特殊权限在符号表示法中会在对应权限位显示s(SUID/SGID)或t(Sticky Bit),在数字表示法中SUID对应4,SGID对应2,Sticky Bit对应1,放在三位基本权限数字的前面,例如4755表示设置了SUID权限的755权限。