在 Linux 操作系统的安全体系中,文件权限管理是核心基石之一。它通过精细化的权限分配机制,实现了对文件访问、修改、执行等操作的严格管控,保障了系统数据的安全性与完整性。本文将从基础权限原理出发,逐步深入到权限配置、特殊权限应用及默认权限管理,结合实操案例,为你全面拆解 Linux 文件权限管理的核心逻辑与实践技巧。

一、Linux 文件系统权限基础原理

Linux 采用灵活且严谨的权限模型,能够适配绝大多数场景下的权限管控需求。其核心逻辑围绕“权限主体”与“权限类型”展开,通过二者的组合,实现对文件操作的精准限制。

1.三类权限主体

Linux 将文件的访问主体划分为三类,分别对应不同的权限层级,优先级依次递减:

  • 文件属主(User):通常是创建该文件的用户,对文件拥有最高级别的管控权限,权限优先级最高。

  • 文件属组(Group):默认是文件属主所属的主组,组内所有成员共享该组对应的文件权限。

  • 其他用户(Other):除文件属主和属组成员外,系统中所有其他用户,权限优先级最低。

2.权限字符串解析:10位字符的核心含义

通过 ls -l 命令可查看文件的详细权限信息,以示例 -rw-r-----. 1 laoma wheel 2262 Dec 23 08:47 myfile 为例,权限部分 -rw-r-----. 的10位字符可分为四部分,各部分含义如下:

字符位置 代表含义 示例解析(myfile)
第1位 文件类型标识 -:普通文件;d:目录;l:软链接;b/c:块/字符设备
第2-4位 文件属主(User)权限 rw-:属主拥有读、写权限,无执行权限
第5-7位 文件属组(Group)权限 r--:属组成员仅拥有读权限,无写、执行权限
第8-10位 其他用户(Other)权限 ---:其他用户无任何权限

请添加图片描述

3.权限优先级规则

若某用户同时属于文件属主和属组成员(如示例中 laoma 用户既是属主,也是 wheel 组成员),系统将优先匹配**文件属主权限**,属组权限不再生效。这一规则确保了文件创建者的核心管控权,避免权限冲突。

请添加图片描述

4.rwx 权限的核心含义(文件 vs 目录)

需特别注意的是,r(读)w(写)x(执行) 三种基础权限,在普通文件和目录上的含义截然不同,这是权限管理的易错点,也是核心考点。

请添加图片描述

二、文件权限管理实操:chmod、chown、chgrp 命令

掌握权限管理的核心命令,是实现精细化权限配置的关键。Linux 提供 chmod(修改权限)、chown(修改属主)、chgrp(修改属组)三大命令,满足各类权限调整需求。

1.chmod 命令:修改文件/目录权限

chmod 是权限管理最常用的命令,用于调整文件或目录的读、写、执行权限,支持两种语法格式:符号法和数字法,可根据场景灵活选择。

(1)符号法:直观易懂,适合精细化调整

语法格式:chmod WhoHowWhat /path/to/file

参数说明:

  • Who:指定权限主体,u(属主)、g(属组)、o(其他)、a(所有用户)。

  • How:指定权限操作,+(添加权限)、-(移除权限)、=(精确设置权限)。

  • What:指定权限类型,r(读)、w(写)、x(执行)。

实操案例:以 /lab/passwd 文件为例,演示符号法权限调整:

# 1. 查看文件初始权限
[root@centos7 lab]# ls -l passwd 
-rw-r--r--. 1 root root 2312 118 14:17 passwd

# 2. 给属主添加执行权限
[root@centos7 lab]# chmod u+x ./passwd
[root@centos7 lab]# ls -l passwd 
-rwxr--r--. 1 root root 2312 118 14:17 passwd

# 3. 一次性调整多主体权限:属主移除写、执行权限,属组添加写权限,其他用户移除所有权限
[root@centos7 lab]# chmod u-wx,g+w,o=- passwd 
[root@centos7 lab]# ls -l passwd 
-r--rw----. 1 root root 2312 118 14:17 passwd

# 4. 一次性设置所有用户权限为读、写、执行
[root@centos7 lab]# chmod a=rwx passwd
[root@centos7 lab]# ls -l passwd 
-rwxrwxrwx. 1 root root 2312 118 14:17 passwd
(2)数字法:高效便捷,适合批量配置

语法格式:chmod ### /path/to/file

参数说明:三位数字分别对应属主、属组、其他用户的权限,每位数字取值为0-7,对应二进制权限组合(0代表无权限,7代表读、写、执行全权限),二进制与十进制、权限的对应关系如下:

二进制 十进制 对应权限 权限说明
000 0 --- 无任何权限
001 1 --x 仅执行权限
010 2 -w- 仅写权限
011 3 -wx 写+执行权限
100 4 r-- 仅读权限
101 5 r-x 读+执行权限
110 6 rw- 读+写权限
111 7 rwx 读+写+执行权限

实操案例:以 /lab/passwd 文件为例,演示数字法权限调整:

# 1. 设置权限为属主读、写,属组写、执行,其他用户读(对应二进制110 011 100,十进制634)
[root@centos7 lab]# chmod 634 passwd
[root@centos7 lab]# ls -l passwd 
-rw--wxr--. 1 root root 2312 118 14:17 passwd

# 2. 设置权限为属主读、写、执行,属组读、执行,其他用户读、执行(常用的755权限,适合可执行程序)
[root@centos7 lab]# chmod 755 passwd 
[root@centos7 lab]# ls -l passwd 
-rwxr-xr-x. 1 root root 2312 118 14:17 passwd

# 3. 查看文件权限的数字形式和符号形式
[root@centos7 lab]# stat -c %A passwd  # 查看符号权限
-rwxr-xr-x
[root@centos7 lab]# stat -c %a passwd  # 查看数字权限
755

2.chown 与 chgrp 命令:修改属主与属组

在实际运维中,经常需要调整文件的属主和属组,以适配团队协作、权限管控需求。chown用于修改文件属主(可同时修改属组),chgrp 专门用于修改文件属组。

(1)chown 命令:修改属主/同时修改属主和属组

语法格式:

  • 仅修改属主:chown 新属主 /path/to/file

  • 同时修改属主和属组:chown 新属主:新属组 /path/to/file

  • 递归修改目录及内部所有文件权限:chown -R 新属主:新属组 /path/to/dir

实操案例:

# 1. 查看文件初始属主和属组
[root@centos7 lab]# ls -l passwd
-rwxr-xr-x. 1 root root 2312 118 14:17 passwd

# 2. 修改文件属主为 laoma
[root@centos7 lab]# chown laoma passwd
[root@centos7 lab]# ls -l passwd
-rwxr-xr-x. 1 csh root 2312 118 14:17 passwd

# 3. 同时修改属主为 laowang、属组为 wheel
[root@centos7 lab]# chown laowang:wheel passwd
[root@centos7 lab]# ls -l passwd
-rwxr-xr-x. 1 laowang wheel 2312 118 14:17 passwd

# 4. 递归修改目录 dir01 及内部所有文件的属主和属组为 laowang:wheel
[root@centos7 lab]# chown -R laowang:wheel dir01/
[root@centos7 lab]# ls -R -ld dir01 dir01/*
drwxrwx---. 2 laowang wheel 20 118 14:22 dir01
-rwxrwx---. 1 laowang wheel  0 118 14:22 dir01/file01
(2)chgrp 命令:专门修改属组

语法格式:chgrp 新属组 /path/to/file(支持 -R 递归参数,用法与 chown 一致)。

实操案例:将 passwd 文件的属组修改为 wheel:

[root@centos7 lab]# chgrp wheel passwd
[root@centos7 lab]# ls -l passwd
-rwxr-xr-x. 1 csh wheel 2312 118 14:17 passwd

3.文件权限总结

请添加图片描述

三、默认权限管理:umask 命令

在 Linux 中,新建文件或目录时,其默认权限由 umask(权限掩码)决定。umask 的核心作用是“剔除权限”,即从默认最大权限中,剔除 umask 对应的权限,得到实际默认权限。

1.umask 核心规则

  • 新建普通文件的最大默认权限为 666(读、写权限,无执行权限,避免安全风险)。

  • 新建目录的最大默认权限为 777(读、写、执行全权限)。

  • 实际默认权限 = 最大默认权限 - umask 值(数字法计算)。

2.umask 实操案例

# 1. 查看当前 umask 值(默认值为 0022)
[csh@centos7 ~]$ umask 
0022

# 2. 新建文件和目录,查看默认权限(文件:666-022=644;目录:777-022=755)
[csh@centos7 ~]$ mkdir lab && cd lab
[csh@centos7 lab]$ touch f1 && mkdir d1
[csh@centos7 lab]$ ls -l
total 0
drwxr-xr-x. 2 csh csh 6 Nov  8 17:05 d1  # 755权限
-rw-r--r--. 1 csh csh 0 Nov  8 17:05 f1  # 644权限

# 3. 修改 umask 值为 0000(不剔除任何权限),新建文件和目录
[csh@centos7 lab]$ umask 0
[csh@centos7 lab]$ touch f2 && mkdir d2
[csh@centos7 lab]$ ls -ld *2
drwxrwxrwx. 2 csh csh 6 Nov  8 17:07 d2  # 777权限
-rw-rw-rw-. 1 csh csh 0 Nov  8 17:07 f2  # 666权限

# 4. 修改 umask 值为 0077(剔除属组、其他用户所有权限),新建文件和目录
[csh@centos7 lab]$ umask 077
[csh@centos7 lab]$ touch f3 && mkdir d3
[csh@centos7 lab]$ ls -ld *3
drwx------. 2 csh csh 6 Nov  8 17:10 d3  # 700权限
-rw-------. 1 csh csh 0 Nov  8 17:10 f3  # 600权限

3.umask 持久化配置

临时修改的 umask 值仅在当前终端生效,若需永久生效,可将配置写入对应配置文件:

  • 针对单个用户:将 umask 077 写入用户家目录的 ~/.bashrc 文件。

  • 针对所有用户:将 umask 077 写入系统全局配置文件 /etc/bashrc

# 单个用户持久化配置
[csh@centos7 lab]$ echo 'umask 077' >> ~/.bashrc
[csh@centos7 lab]$ source ~/.bashrc  # 使配置立即生效

# 所有用户持久化配置(需 root 权限)
[root@centos7 ~]# echo 'umask 077' >> /etc/bashrc
[root@centos7 ~]# source /etc/bashrc  # 使配置立即生效

四、高级权限管理:特殊权限(SUID、SGID、Sticky)

除基础的 rwx 权限外,Linux 还提供三种特殊权限:SUID、SGID、Sticky,用于解决特殊场景下的权限管控问题,进一步提升系统安全性和协作效率。
请添加图片描述

1.SUID:针对可执行文件,临时获取属主权限

核心作用:普通用户执行带有 SUID 权限的可执行文件时,会临时获取该文件属主的权限,执行结束后权限恢复。最典型的应用是 passwd 命令(普通用户可通过该命令修改自身密码,实际修改的是/etc/shadow 文件,该文件默认仅 root 可修改)。

# 1. 查看 /etc/shadow 文件权限(仅 root 可修改)
[csh@centos7 ~]$ ls -l /etc/shadow
----------. 1 root root 1264 Nov  8 16:38 /etc/shadow

# 2. 查看 passwd 命令权限(带有 SUID 权限,权限位显示为 s)
[csh@centos7 ~]$ ls -l $(which passwd)
-rwsr-xr-x. 1 root root 27856 Apr  1  2020 /usr/bin/passwd

# 3. 给可执行文件添加 SUID 权限(以 vim 为例)
[root@centos7 ~]# chmod u+s /usr/bin/vim
[root@centos7 ~]# ls -l /usr/bin/vim
-rwsr-xr-x. 1 root root 2337216 1014 2020 /usr/bin/vim

# 4. 删除 SUID 权限
[root@centos7 ~]# chmod u-s /usr/bin/vim

2.SGID:针对目录,实现组内文件共享

核心作用:针对目录设置 SGID 权限后,该目录内新建的所有文件和子目录,其属组会继承父目录的属组,而非创建者的主组,适用于团队协作场景(如开发组共享目录)。

# 1. 准备用户和组
[root@centos7 lab]# groupadd devops  # 创建开发组
[root@centos7 lab]# useradd -G devops dev1  # 创建用户 dev1,加入 devops 组
[root@centos7 lab]# useradd -G devops dev2  # 创建用户 dev2,加入 devops 组

# 2. 准备共享目录,修改属组为 devops,添加属组读写执行权限
[root@centos7 lab]# mkdir webapp
[root@centos7 lab]# chgrp devops webapp
[root@centos7 lab]# chmod g=rwx webapp

# 3. 无 SGID 权限:用户 dev1 创建的文件,属组为自身主组
[root@centos7 lab]# su dev1
[dev1@centos7 lab]$ touch webapp/dev-f1
[dev1@centos7 lab]$ ll webapp/dev-f1
-rw-rw-r--. 1 dev1 dev1 0 722 15:12 webapp/dev-f1  # 属组为 dev1

# 4. 添加 SGID 权限:用户 dev1 创建的文件,属组继承父目录的 devops
[root@centos7 lab]# chmod g+s webapp
[root@centos7 lab]# su dev1
[dev1@centos7 lab]$ touch webapp/dev-f2
[dev1@centos7 lab]$ ll webapp/dev-f2
-rw-rw-r--. 1 dev1 devops 0 722 15:13 webapp/dev-f2  # 属组为 devops

# 5. 验证组内共享:用户 dev2 可修改该文件
[root@centos7 lab]# su dev2
[dev2@centos7 lab]$ echo hello world >> webapp/dev-f2
[dev2@centos7 lab]$ cat webapp/dev-f2
hello world

3.Sticky:针对公共目录,防止文件被误删

核心作用:针对公共目录(如 /tmp)设置 Sticky 权限后,目录内的文件仅能被其属主、目录属主或 root 用户删除,其他用户即使拥有目录写权限,也无法删除他人文件,避免公共目录文件被误删。

# 1. 查看 /tmp 目录权限(带有 Sticky 权限,权限位显示为 t,数字权限为 1777)
[root@centos7 lab]# ls -ld /tmp
drwxrwxrwt. 20 root root 4096 118 16:50 /tmp
[root@centos7 lab]# stat -c %a /tmp
1777

# 2. 验证:普通用户无法删除他人文件
[csh@centos7 ~]$ rm /tmp/other-user-file  # 尝试删除他人文件
rm: cannot remove '/tmp/other-user-file': Operation not permitted

# 3. 验证:普通用户可删除自己创建的文件
[csh@centos7 ~]$ touch /tmp/csh-f1
[csh@centos7 ~]$ rm /tmp/csh-f1  # 可正常删除

4.查找系统中的特殊权限文件

可通过 find 命令查找系统中带有特殊权限的文件,便于排查安全隐患:

# 查找系统中所有带有 SUID 权限的文件
[root@centos7 ~]# find / -perm -4000  # 4000 对应 SUID 权限的数字标识
[root@centos7 ~]# find / -perm -u+s  # 符号法查找 SUID 文件

# 查找系统中所有带有 SGID 权限的文件
[root@centos7 ~]# find / -perm -2000
[root@centos7 ~]# find / -perm -g+s

# 查找系统中所有带有 Sticky 权限的目录
[root@centos7 ~]# find / -perm -1000
[root@centos7 ~]# find / -perm -o+t

五、总结

Linux 文件权限管理围绕“主体(u/g/o)”和“权限(r/w/x)”展开,核心要点可概括为:

  • 基础权限:rwx 权限在文件和目录上的含义截然不同,需重点区分。

  • 权限配置:chmod(修改权限)、chown(修改属主/属组)是核心命令,支持符号法和数字法。

  • 默认权限:由 umask 决定,核心规则是“最大权限 - umask 值”。

  • 特殊权限:SUID(临时获取属主权限)、SGID(目录文件属组继承)、Sticky(公共目录防误删),解决特殊场景权限问题。

通过本文的学习与实操,相信你已掌握 Linux 文件权限管理的核心逻辑与实操技巧。在实际运维中,需结合场景合理配置权限,兼顾安全性与便捷性,避免因权限配置不当引发安全风险。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐