源自 Unix 的经典设计理念深刻影响了 Linux,其最核心的思想便是 “一切皆文件”。在这套体系下,文本文件、磁盘设备、系统进程等各类软硬件资源,都会被统一封装成文件对象。Linux 的安全管控逻辑围绕文件权限展开,吃透文件权限,就能理解系统安全的底层逻辑。
一、用户与权限
Linux文件权限必须和用户身份绑定,以此区分不同使用者的操作权限,这三类身份分别是文件所有者、所属用户组、其他用户。
第一类是文件所有者,标识为 u,一般是最初创建文件的账号,拥有对这份文件最高的自主管控权,可修改文件归属、调整权限;
第二类是文件所属组,标识为 g,一个用户组能容纳多名用户,多用于多人协同场景,同组成员共享一套统一权限,方便批量管控团队访问资源;
第三类是其他用户,标识为 o,指代既不是文件拥有者、也未加入文件所属组的系统全部剩余账号,对应系统外部普通访问者权限。
下面结合一个案例具体说明用户与权限的关系。
公司共用一台 Linux 开发服务器,多名员工分配独立账号:
开发负责人账号:dev01团队开发成员:dev02、dev03、fe01无关人员账号:运维 ops01、财务 finance
为统一管理项目代码,管理员创建用户组 dev_team,把所有开发人员加入该组。
负责人 dev01 新建项目目录 /data/demo_project,存放业务源码,需要控制不同人的访问权限。Linux 会自动把目录绑定三类身份:所有者 (u)、所属组 (g)、其他人 (o),分别管控权限。
一、所有者 u:dev01(目录创建人)
目录是谁创建,默认谁就是所有者。
拥有的特殊权限:
二、所属组 g:dev_team(开发团队)
所有开发账号统一归入 dev_team,并把目录归属组设置为 dev_team。
设计目的:批量授权,简化管理
如果没有用户组,想要给 dev02、dev03、fe01 三人开放访问权限,需要单独给每个账号配置规则;使用用户组后,只需给组设置一次权限,组内所有人同步生效。
当前权限效果(g=r-x)
团队成员可以进入目录、查看代码、读取配置文件,但没有写入权限,不能修改、删除项目文件,避免多人误删源码。
三、其他人 o:系统所有陌生账号
既不是目录所有者,也不在 dev_team 组内的账号,全部归类为 other,例如财务 finance、运维 ops01。
企业源码属于保密资源,因此给 other 设置无任何权限。
二、三种基础权限
Linux只包含三种基础权限,但对目录和文件的权限设定完全不同,这一点初学Linux尤其要注意。
1、无论是文件还是目录,底层权限就三类:
不存在第四种基础权限,所有权限控制都是这三者组合而来。
2.同一权限字符,作用在文件、目录上含义天差地别
(1)作用于普通文件
(2)作用于目录(文件夹)
三、权限的两种标识方式
1.字符标识
执行ls -l 可查看文件权限,输出结果中后9位为权限标识,分为三组,每组3位,依次对应【所有者、所属组、其他用户】权限。
2.数字标识(八进制权限)
通过 r(4)、w(2)、x(1) 的权重相加,快速生成权限数值,是运维中最常用的授权方式。每组权限对应一个数字,三个数字依次对应u、g、o权限。
常见权限组合:
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
--- = 0+0+0 = 0
四、核心权限操作命令
1.修改文件或目录的权限
chmod命令用于修改三类用户的读、写、执行权限,仅文件所有者和root用户可执行该命令,支持字符模式和数字模式两种用法。
基础语法
chmod [选项] 权限描述 文件/目录
语法说明
[选项]:命令参数,可选。
权限描述:分为符号权限法和数字权限法两种描述方法。
表 chmod命令常用参数表
参数 | 功能说明 |
-R | 递归修改,目录下所有子文件、子目录同步变更权限(修改文件夹必用) |
-v | 显示每一个文件的权限修改过程,方便排查 |
-c | 仅显示权限真正发生变化的文件,无变化不输出 |
数字权限法
权限描述为3位数字,r/w/x 分别对应固定数值:
每一类身份(u/g/o)权限数值相加,组成三位数字:u g o
例:750 = 所有者 7,组 5,其他人 0
常用数字组合对照表
数字 | 权限组合 | 含义 |
0 | --- | 无任何权限 |
4 | r-- | 仅可读 |
5 | r-x | 读 + 执行 |
6 | rw- | 读 + 写 |
7 | rwx | 读写执行全部权限 |
示例:
所有者读写执行,组和其他用户读+执行
所有者读写,组和其他用户只读
所有用户最高权限
递归授权目录及目录内所有文件、子目录(-R 递归参数)
符号权限法
用户标识:u(所有者)、g(所属组)、o(其他)、a(所有用户)
操作符号:+(添加权限)、-(移除权限)、=(设置唯一权限)
示例:
给所有者添加执行权限
移除所属组用户的写权限
移除所有用户的读权限
chmod u=rwx,g=rx,o=rx test
精准设置755权限
2、修改文件所有者和所属组
chown命令用于更改文件/目录的归属用户和用户组,仅root用户可修改所有者,普通用户仅可修改自己文件的所属组。
基础语法
chown [选项] 归属描述 目标文件/目录
语法说明
[选项]:命令参数,可选。
归属描述:用来指定新所有者、新所属组。
表 chown命令常用参数表
参数 | 功能说明 |
-R | 递归修改,目录及内部所有文件、子目录同步变更归属(修改项目文件夹必备) |
-v | 显示每一个文件的修改详情,调试排查用 |
-c | 仅打印归属真正发生变化的文件,无变化不输出 |
归属描述三种写法:
1. 只改所有者
格式:用户名
示例:
# 将 test.txt 所有者改为 dev01chown dev01 test.txt
2、同时改所有者 + 所属组(冒号分隔)
格式:用户名:组名
示例:
# 所有者dev01,所属组dev_teamchown dev01:dev_team /data/demo_project
3、 只改所属组,所有者不变
示例:
# 仅修改文件所属组为 dev_team,所有者保留原样chown :dev_team test.txt
五、特殊权限
除基础9位权限外,Linux还有3种特殊权限,用于实现特殊场景的权限控制,优先级高于基础权限,常用于系统文件、服务程序授权。
1. SUID(用户特殊权限,数字4xxx)
作用:普通用户执行带有SUID权限的文件时,会临时拥有文件所有者的权限(多用于root所属的系统命令)。
特点:仅对二进制可执行文件生效,对目录、普通文件无效。
典型案例:passwd 命令拥有SUID权限,普通用户可临时以root权限修改自己的密码(无需root登录)。
授权命令:chmod 4755 /usr/bin/passwd
2. SGID(组特殊权限,数字2xxx)
作用:分为文件和目录两种场景:
授权命令:chmod 2755 /home/share
3. Sticky Bit(粘滞位,数字1xxx)
作用:仅对目录生效,设置后目录内的文件仅文件所有者和root可删除、修改,其他用户即使拥有目录w权限,也无法删除他人文件。
典型场景:系统临时目录 /tmp,所有用户可写入文件,但只能删除自己的文件。
授权命令:chmod 1777 /tmp
六、文件权限小结
Linux文件、目录权限基于所有者(u)、所属组(g)、其他人(o)三类身份管控。u为文件创建者,拥有最高权限;g为用户组;o为无关用户。
系统仅有r、w、x三种基础权限,且对文件和目录作用不同:文件权限对应读取、修改、执行,目录权限对应查看列表、改动文件、进入目录。
权限可通过ls -l按字符标识或八进制数字标识查看。日常通过chmod修改读写执行权限、chown修改文件归属,搭配-R参数可递归操作目录及内部文件。