【Linux】 权限管理(知识梳理 + 面试题)


Linux 权限管理完整详解

一、Linux 权限的概念

1.1 权限诞生背景

Linux 是多用户分时操作系统,允许多个用户同时登录、操作系统资源。为了防止用户随意修改、删除他人文件,隔离资源、保障系统安全,内核引入权限访问控制机制。

Windows 采用 ACL 访问控制列表;

Linux 基础模型采用经典UGO(User/Group/Other)权限模型。

1.2 UGO 三类身份

使用ls -l查看文件时,每一个文件 / 目录都会绑定三类访问者身份:

-rw-r--r-- 1 ubuntu ubuntu 120 Jul 22 10:00 test.txt
  1. u (user,属主 / 所有者):文件创建者、拥有者,权限优先级最高;
  2. g (group,属组):归属用户组内的所有成员;
  3. o (other,其他用户):既不是属主、也不在属组内的所有人;
  4. a(all):简写,代表 u+g+o 全部三类人。

1.3 三种基础权限 r w x

权限字符含义八进制值
r(read)读权限4
w(write)写权限2
x(execute)执行权限1

⚠️ 重中之重:rwx 对【文件】和【目录】含义完全不同!很多初学者踩坑就在这里,后文单独讲解目录权限。

1.4 ⽂件类型和访问权限(事物属性)

  1. d:⽂件夹
  2. -:普通⽂件
  3. l:软链接(类似Windows的快捷⽅式)
  4. b:块设备⽂件(例如硬盘、光驱等)
  5. p:管道⽂件
  6. c:字符设备⽂件

二、文件权限值的两种表示方法

执行ls -l看到-rwxr-xr--,权限分为字符表示法、数字(八进制)表示法。

2.1 字符符号表示法

权限串一共 9 位,分为三段,每 3 位对应一类身份u g o- rwx r-x r--

  • 第 1 段(1~3 位):属主 u 权限rwx
  • 第 2 段(4~6 位):属组 g 权限r-x
  • 第 3 段(7~9 位):其他人 o 权限r---代表没有该权限

2.2 八进制数字表示法(最常用)

规则:r=4,w=2,x=1,同一段内权限数值相加。 示例拆解:rwxr-xr--

  • u:rwx = 4+2+1 = 7
  • g:r-x = 4+0+1 = 5
  • o:r-- = 4+0+0 = 4 最终权限数字:754

常见标准权限(生产通用规范)

权限数字字符权限使用场景
644rw-r--r--普通文本文件、配置文件(默认文件权限)
755rwxr-xr-x可执行程序、普通目录(默认目录权限)
600rw-------密钥、隐私配置文件(仅属主读写)
700rwx------私人目录,禁止任何人访问
777rwxrwxrwx不推荐!所有人完全控制,极度不安全

补充:数字权限本质是二进制掩码 rwx = 111 (2) =7;rw-=110=6;r--=100=4


三、文件访问权限的相关设置方法

核心两条命令:chmod(修改权限)、chown(修改属主、属组)

3.1 chmod:修改文件 / 目录权限两种语法:符号模式、数字模式

① 符号模式(直观,增量修改)
chmod [身份][操作][权限] 文件 身份:u/g/o/a 操作:+ 添加权限 - 移除权限 = 直接设置权限 权限:r/w/x
chmod u+x test.sh # 给属主增加执行权限 chmod g-w test.txt # 删除属组写权限 chmod o=r test.txt # 强制设置其他人只有读权限 chmod a+w test.txt # 所有人添加写权限
② 数字模式(简洁,直接覆盖所有权限)
chmod 644 test.txt chmod 755 test_dir
递归修改目录权限-R

⚠️慎用-R,会递归修改目录内部所有文件、子目录权限!

chmod -R 755 /home/work

3.2 chown:修改文件【属主、属组】

普通用户只能修改自己文件的属组;修改属主必须 root 权限 语法:

# 修改所有者 chown 用户名 文件名 # 修改所有者+所属组 chown 用户:组 文件名 # 仅修改属组 chown :组名 文件名
chown ubuntu test.txt chown ubuntu:ubuntu test.txt # 递归修改目录归属 chown -R ubuntu:ubuntu /home/work

3.3 chgrp:仅修改属组(语义清晰,适合只改组的场景)

chgrp [选项] 组名 文件名/目录

3.4 umask:新建文件 / 目录时,用来 “屏蔽扣除” 默认权限的掩码

umask 称为权限掩码,作用是控制系统中新创建文件与目录的默认访问权限。 系统拥有默认最大基准权限,umask 指定需要屏蔽去除的权限; 新建对象最终权限等于基准权限掩码清除 umask 对应的权限位。 umask 设置仅对之后新建文件生效,不会改变已有文件权限

四、file 指令

file命令不是修改权限命令,作用:探测文件真实类型,区分文本、二进制程序、目录、脚本、压缩包等。

ls 只能看文件名后缀,Linux不依赖后缀识别文件类型,后缀只是方便人类阅读。

基础用法

file test.txt file /bin/ls file test.sh
test.txt: ASCII text /bin/ls: ELF 64-bit LSB shared object, x86-64 test.sh: Bourne-Again shell script, ASCII text executable

常用参数

  • -b:精简输出,不打印文件名
  • -i:输出 MIME 类型

五、sudo 基础概念

5.1 什么是 sudo

sudo = superuser do

作用:普通用户临时以其他用户身份(默认 root)执行命令。

核心优势:

  1. 不用共享 root 密码;
  2. 可以精准控制:允许哪些用户、执行哪些命令;
  3. 所有 sudo 操作会记录日志(/var/log/secure/var/log/auth.log),可审计;
  4. 有密码超时机制,短时间内重复 sudo 无需重复输密码。

5.2 区分 su 和 sudo

命令特点风险
su - root切换完整 root 环境,需要 root 密码,拿到完整 root 权限极高,拿到密码就能操作所有内容
sudo command临时提权,使用自己用户的密码,权限受配置文件限制可控,可以只开

六、目录的权限【重难点】

❗ 千万不要把文件权限规则套用到目录!rwx 含义完全不一样

假设目录名为mydir

权限对目录的作用
r(读)

可以使用ls mydir列出目录内文件名;

但是无法进入目录、无法查看文件属性(缺少 x 权限)

w(写)

可以在目录内:新建文件、删除文件、重命名文件、移动文件

⚠️关键点:能否删除文件,不由文件自身权限决定,由【文件所在目录】的 w 权限控制!

x(执行 / 进入)

允许cd mydir切换进入目录;允许访问目录内部文件的 inode 元数据;

目录想要正常使用,几乎必须具备 x 权限

经典踩坑案例

场景:一个文件权限444(所有人只读),但是文件所在目录权限777

结论:任何用户依然可以删除这个只读文件。

原因:删除操作修改的是目录条目,受目录 w 权限控制,和文件本身读写权限无关。

目录权限搭配经验

  1. 只有 r、没有 x:能看到文件名,不能 cd 进去,不能访问文件;基本无实用价值
  2. 只有 x、没有 r:可以直接访问已知完整路径的文件,但是不能 ls 列出目录内容
  3. 正常对外开放目录:755(rwxr-xr-x)
  4. 私人目录:700

七、关于权限的整体总结

核心原则汇总

  1. Linux 基础权限模型 UGO:三类身份 u g o,基础权限 r w x;
  2. rwx 语义区分文件和目录,目录 x 权限是进入目录的前提;
  3. 文件能否删除 → 看父目录 w 权限,不是文件自身权限;
  4. chmod改权限,chown改归属;
  5. 数字权限是八进制掩码,r=4 w=2 x=1;
  6. 遵循最小权限原则:不给多余权限,避免 777。

容易混淆命令区分

  • ls -l:查看权限、属主、属组
  • chmod:修改 rwx 权限
  • chown:修改文件所有者、用户组
  • file:识别文件真实类型

八、粘滞位 Sticky Bit

Linux 除基础 rwx 权限外,还有 3 个高级特殊权限:SUID、SGID、Sticky 粘滞位,粘滞位是面试高频考点。

8.1 粘滞位作用

粘滞位只对【目录】生效,对文件无效!

当目录设置粘滞位之后: 目录内的文件,只有两个角色可以删除 / 重命名

  1. 文件自身的属主
  2. root 超级用户 即使其他用户拥有该目录的 w 权限,也不能删除别人创建的文件。

8.2 典型场景:系统临时目录/tmp

ls -ld /tmp drwxrwxrwt 1 root root ... /tmp

末尾权限是t,代表开启粘滞位。/tmp 目录权限 777,所有人都能创建临时文件,但是有粘滞位保护:用户只能删除自己创建的临时文件,不能删别人的。

8.3 粘滞位设置与取消

粘滞位八进制前缀:1000

# 数字方式添加粘滞位 chmod 1777 share_dir # 符号方式添加 chmod o+t share_dir # 移除粘滞位 chmod o-t share_dir

8.4 权限标识说明

  • 目录其他位原本有 x 权限:显示小写t
  • 目录其他位没有 x 权限:显示大写T(粘滞位设置失效,无实际作用)

拓展补充(拓展阅读)

另外两个特殊权限简单了解:

  1. SUID (4000):二进制程序运行时,临时拥有程序属主权限(如 passwd 命令)
  2. SGID (2000):目录下新建文件自动继承目录的属组;二进制程序运行继承属组

Linux 权限专题【高频常见面试题】

一、简答基础题(最常问)

1. Linux 中 UGO 分别代表什么?

答:

u (user) 文件属主(所有者)

g(group) 文件所属用户组(属组)

o (other) 其他用户

a (all) 全部三类用户


2.r、w、x 权限,对文件和目录作用分别是什么?

答:

✅ 文件 r:读取文件内容 w:修改、覆盖文件内容 x:执行脚本 / 二进制程序

✅ 目录 r:ls 列出目录内文件名 w:在目录内新建、删除、重命名、移动文件 x:允许 cd 进入目录、访问目录内文件;目录正常使用必须具备 x 权限


3.chmodchownchgrp三者区别?

答:

chmod:修改文件 r/w/x 访问权限

chown:修改文件属主,也可以同时修改属组chown user:group file

chgrp:只修改文件的属组,等价chown :group file


4.umask 的作用是什么?已经存在的文件,修改 umask 会改变权限吗?

答:

umask 是权限掩码,用来控制新创建文件、目录的默认权限;

umask 只会影响后续新建的资源,不会改变已经存在的文件权限。


5.新建文件、新建目录的权限计算基准值是多少?

答:

目录基准权限:777

普通文件基准权限:666

原因:系统不会自动给普通文件赋予执行权限,出于安全考虑。


6.什么是粘滞位?作用是什么,典型应用目录?

答:

粘滞位仅对目录生效; 目录开启粘滞位后,就算目录拥有 w 权限,用户只能删除自己创建的文件,不能删除别人的文件。 典型目录:/tmp设置:chmod 1777 dirchmod o+t dir


7.susudo的区别?

答:

su:需要 root 密码,完整切换 root 身份,权限无限制;

sudo:使用自己账号密码,管理员可以限制能执行哪些 root 命令,无需泄露 root 密码,并且操作会记录日志。


8.修改/etc/sudoers为什么推荐使用visudo

答:

visudo 会自动检查配置语法;如果配置写错,阻止保存,防止 sudo 整体失效;

直接 vim 编辑出错会导致 sudo 瘫痪。


9.file 命令的功能?Linux 文件后缀名是否决定文件类型?

答:

file 命令:识别文件真实类型(文本、可执行程序、脚本等);

Linux不靠后缀识别文件类型,后缀只是方便人阅读。


二、计算题(笔试必考)

  1. 权限字符串rw-r--r--转换成八进制权限? 答:644

  2. umask=022,新建目录和新建文件默认权限? 答:目录 755,文件 644

  3. 命令:给脚本 test.sh 的属主添加执行权限(不改动其他权限) 答:chmod u+x test.sh

  4. 创建共享目录 share,所有人读写,但只能删除自己的文件,写出命令

mkdir share chmod 1777 share

三、经典陷阱高频题(面试最爱追问)

1.文件 test.txt 权限444(所有人只读),所在目录权限 777,普通用户能不能删除该文件?为什么?

答:

可以删除。 能否删除文件,由文件所在目录的 w 权限控制,和文件自身读写权限无关。 目录开启粘滞位之后,则无法删除别人创建的这个文件。


2.一个目录只有 r 权限、没有 x 权限,会发生什么?

答:

可以 ls 看到目录内文件名,但是无法 cd 进入目录,不能读取内部文件内容。


3.sudo -isudo -s简单区别?

答:

sudo -i:模拟登录 root,完整加载 root 环境变量,切换到 root 家目录;sudo -s:打开 root shell,沿用当前用户环境变量,不切换工作目录。


4.如何查看当前账号拥有哪些 sudo 权限?

答:

sudo -l


四、命令实操问答题(口头提问)

  1. 递归修改 /www 目录下所有文件属组为 www 答:chgrp -R www /www

  2. 授权用户 lisi 免密执行systemctl restart nginx,写出 sudoers 一行配置 答:lisi ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx


五、判断题(常见选择题考点)

  1. chgrp 可以修改文件属主。(×)
  2. 目录权限 777,代表目录里面所有文件自动拥有 777 权限。(×)
  3. umask 修改后,旧文件权限会同步变化。(×)
  4. sudo 配置中,命令尽量写绝对路径,防止安全风险。(√)