Linux系统的权限管理机制是保障系统安全的重要基础,所有文件和目录都关联了对应的访问权限,控制不同用户对资源的操作范围。权限配置不当可能导致敏感文件被随意修改,或是正常用户无法访问所需资源,因此需要掌握正确的配置方法。

Linux基础权限构成
Linux的基础权限分为三类,分别对应文件所有者、所属组用户、其他用户三种身份,每种身份拥有读、写、执行三种权限,对应权限位如下:
- 读权限(r):对应数值4,可查看文件内容或目录下的文件列表
- 写权限(w):对应数值2,可修改文件内容或在目录下创建、删除文件
- 执行权限(x):对应数值1,可运行可执行文件或进入目录
通过ls -l命令可以查看文件的权限信息,输出结果的第一列就是权限位,例如-rwxr-xr--表示这是一个普通文件,所有者有读写执行权限,所属组有读执行权限,其他用户只有读权限。
使用chmod修改基础权限
chmod是修改文件基础权限的常用命令,支持符号模式和数字模式两种配置方式。
符号模式配置
符号模式的格式为chmod [用户类型][操作符][权限] 文件名,用户类型包括u(所有者)、g(所属组)、o(其他用户)、a(所有用户),操作符包括+(添加权限)、-(移除权限)、=(设置权限)。
示例:给文件test.sh的所有者添加执行权限,给所属组和其他用户移除写权限:
# 给所有者添加执行权限 chmod u+x test.sh # 给所属组和其他用户移除写权限 chmod go-w test.sh # 查看修改后的权限 ls -l test.sh
数字模式配置
数字模式是将三类用户的权限数值相加,组合成三位数字进行配置,格式为chmod [三位数字] 文件名。
示例:设置文件data.txt的权限为所有者读写、所属组读、其他用户读:
# 所有者权限4+2=6,所属组权限4,其他用户权限4,组合为644 chmod 644 data.txt # 设置目录logs的权限为所有者读写执行、所属组读执行、其他用户无权限 chmod 750 logs
使用chown修改所有者和所属组
chown命令用于修改文件或目录的所有者和所属组,基本格式为chown [所有者][:所属组] 文件名,需要root权限执行。
示例:将文件config.ini的所有者改为user1,所属组改为dev:
# 修改所有者和所属组 chown user1:dev config.ini # 递归修改目录/var/www及其下所有文件的所有者为www-data chown -R www-data /var/www
配置ACL扩展权限
当基础权限无法满足需求时,比如需要给单个用户单独设置权限,可以使用ACL(访问控制列表)扩展权限,需要文件系统支持ACL,大部分现代Linux文件系统默认开启该特性。
设置ACL权限
使用setfacl命令设置ACL权限,格式为setfacl -m [规则] 文件名,规则格式为用户类型:名称:权限。
示例:给用户test单独设置文件report.pdf的读写权限,给组temp设置读权限:
# 给用户test设置读写权限 setfacl -m u:test:rw report.pdf # 给组temp设置读权限 setfacl -m g:temp:r report.pdf # 查看文件的ACL权限 getfacl report.pdf
删除ACL权限
如果需要移除某个ACL规则,可以使用setfacl -x命令,移除所有ACL规则使用setfacl -b命令。
# 移除用户test的ACL权限 setfacl -x u:test report.pdf # 移除文件report.pdf的所有ACL规则 setfacl -b report.pdf
权限配置注意事项
- 不要随意给普通文件设置执行权限,避免恶意脚本被运行
- 目录的执行权限代表能否进入目录,若需要让用户可以访问目录下的文件,通常需要同时配置读和执行权限
- 修改系统关键目录(如/etc、/bin)的权限前需要确认操作必要性,错误的权限配置可能导致系统无法正常运行
- 递归修改权限时谨慎使用-R参数,避免误改大量文件的权限