想象你搬进一栋崭新的写字楼:一楼大厅是所有楼层的起点,办公区按部门和工位层层排布,物业有档案室,大厅角落还有临时储物柜。这栋楼的布局,就是 Linux 文件系统——根目录 / 是大厅,/home 是员工宿舍区,/etc 是物业办公室,/tmp 是公共储物间。楼里每一间房都装着一套门禁:谁有钥匙(属主)、谁能进(属组)、谁是陌生人(其他),门禁上的三个动作分别是能不能看(读)、能不能改(写)、能不能进门办事(执行)。而 chmod 是帮你换锁的师傅,chown 是房产过户的窗口,umask 是新装修默认锁具的物业标准,ACL 是门禁白名单,SELinux 则是整栋楼的中央安保系统。把这些看懂,你才算真正握住了 Linux 这座大楼的钥匙。

岗位关联

对 AI 从业者来说,文件权限是守护模型权重、训练数据与线上服务的第一道闸门。理解 chmod/chown,你才能安全部署、合规管控数据、快速排查线上故障——这是后端与运维工作最扎实的基本功。

目录
  1. 可视化演示
  2. 文件系统结构
  3. 权限三要素
  4. chmod修改权限
  5. chown修改归属
  6. umask默认权限
  7. 特殊权限位
  8. ACL与SELinux
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示Linux文件系统与权限ch的核心机制,通过入门/进阶/实战/优化四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Linux文件系统与权限ch:Linu Linux文件系统层次结构标准 读写执行权限三元组模型 核心机制可视化 Linux文件系统与权限ch整体架构与关键组件

文件系统结构

一栋写字楼总要有清晰的布局,才能让每个人快速找到工位。大厅是总入口,每层走廊挂着房间号,越往里走门牌越具体。Linux 文件系统就是这栋楼:根目录 / 是大厅,/home 是员工宿舍区,/etc 是物业档案室,/tmp 是临时储物间,/var/log 是安保监控记录室。拿到一张路径,就相当于拿到一张“楼层-房间”的指引单。

路径怎么走?绝对路径从大厅前台开始数,比如 /home/alice/report.txt,无论你在哪都能按图索骥;相对路径从你当前站立的位置出发,比如你已经在 /home 下,说 alice/report.txt 就能到达。更妙的是,Linux 把磁盘、U 盘等设备也纳入这棵目录树——通过挂载操作,U 盘插入后挂载到 /media/usb,你访问这个目录就等于访问 U 盘。理解了“一切皆文件”的思想,目录是索引、文件是数据、设备也是文件,你就能沿着目录树一步步走到任何数据所在之处。

记住这栋楼的地图,你才知道权限要装在哪个房门上、门禁要管到哪一层。接下来我们就从大厅走向每一扇门,看看门上的锁怎么读。

绝对路径=/⏟根目录+home/⏟一级目录+alice/⏟二级目录+report.txt⏟文件名\text{绝对路径}=\underbrace{/}_{\text{根目录}}+\underbrace{home/}_{\text{一级目录}}+\underbrace{alice/}_{\text{二级目录}}+\underbrace{report.txt}_{\text{文件名}}
路径就是一级一级目录名加上文件名,用斜杠 / 串成一条从大厅走到文件柜的完整走廊指引。
  1. 根目录标记 /_整棵目录树的起点,等价于大楼总入口大厅,所有路径都从这里出发。
    根目录=/\text{根目录} = /
  2. 一级目录 home/路径第一层,通常存放各用户的家目录,相当于大楼的住户楼层区。
    home/⇒住户区楼层home/ \Rightarrow \text{住户区楼层}
  3. 二级目录 alice/路径第二层,某个用户的专属空间,相当于写着你名牌的房间。
    alice/⇒用户专属房间alice/ \Rightarrow \text{用户专属房间}
  4. 文件名 report.txt路径终点,真正的数据文件,相当于房间里的文件柜,读写都发生在它身上。
    report.txt⇒最终数据文件report.txt \Rightarrow \text{最终数据文件}

权限三要素

每扇门上装着一套三合一门禁:刷卡先确认“你是谁”——房主、同楼层员工,还是外来访客;随后写着“你能干什么”——看资料、改资料,还是进房间做事。Linux 把门上的身份分成三类:属主(user) 是文件的主人,属组(group) 是与主人同组的伙伴,其他(others) 是毫不相干的访客。三类身份各配三组权限,就形成了 9 个权限位。

用 ls -l 查看,第一列形如 -rwxr-xr--:第一位表示文件类型(- 普通文件、d 目录、l 符号链接),后九位每三位一组,r 是读、w 是写、x 是执行。注意同名权限在文件和目录上含义不同:目录的 r 能列出里面有什么,w 能新建或删除文件,x 才能“走进”目录——这也是为什么部署时明明有 r 权限,进入目录仍报 Permission denied。

锁具设计好了,谁来配钥匙?chmod 就是那台配钥匙的机器。下面看看怎么用。

−⏟类型rwx⏟属主r−x⏟属组r−−⏟其他\underbrace{-}_{\text{类型}}\underbrace{rwx}_{\text{属主}}\underbrace{r-x}_{\text{属组}}\underbrace{r--}_{\text{其他}}
十位串从左到右分别是:文件类型、属主三位、属组三位、其他三位,每个 - 表示该位没有权限。
  1. 文件类型位 -第一个字符只标记类型,不是权限;- 表示普通文件,d 表示目录,l 表示符号链接。
    −⇒普通文件- \Rightarrow \text{普通文件}
  2. 属主位 rwx文件主人拥有读、写、执行全部权限,相当于房主握着全套钥匙。
    rwx⇒属主可读可写可执行rwx \Rightarrow \text{属主可读可写可执行}
  3. 属组位 r-x同组伙伴能读、能进目录,但不能修改,相当于同事有进门权没有动文件权。
    r−x⇒属组可读可执行不可写r-x \Rightarrow \text{属组可读可执行不可写}
  4. 其他位 r--外人只能读,连执行都别想。
    r−−⇒其他仅可读r-- \Rightarrow \text{其他仅可读}

chmod修改权限

门禁系统出厂后总要按需调整:有人要加门禁卡,有人要收回。管理员有两种做法:一种用数字密码锁,把锁编成“4 读、2 写、1 执行”的加法算式;另一种直接用加减号说“给谁加什么权限”。这就是数字法和符号法。chmod 命令一次改一个文件或目录的权限,数字法用三个 0-7 的数字分别代表属主、属组、其他;符号法则用 u(属主)、g(属组)、o(其他)、a(全部) 搭配 +/-/= 操作。

数字法有个口诀:r=4, w=2, x=1,把想给的权限数值相加。例如 chmod 755 script.sh:属主 7=4+2+1 可读可写可执行,属组 5=4+1 可读可执行,其他 5 同样可读可执行。符号法更直观:chmod u+x script.sh 只给属主加执行位,chmod g-w file 收回组写权限,chmod a=rw file 统一设置为读写。-R 参数可以递归修改整个目录树下所有文件——但也要小心,一杆子打翻一船人。

换好每一扇门的锁,还得确认房本上的名字对不对——因为门禁只认房主和房客名单。这就是 chown 的工作。

755=4+2+1⏟属主=7  4+0+1⏟属组=5  4+0+1⏟其他=5=rwx  r−x  r−x755 = \underbrace{4+2+1}_{\text{属主}=7}\;\underbrace{4+0+1}_{\text{属组}=5}\;\underbrace{4+0+1}_{\text{其他}=5} = rwx\;r-x\;r-x
三个数字分别计算三类身份的权限,各自转成三位符号,拼起来就是完整权限串。
  1. 权重含义 4/2/1r 记 4 分、w 记 2 分、x 记 1 分,这是数字法与符号法之间的翻译表。
    r=4,  w=2,  x=1r=4,\; w=2,\; x=1
  2. 属主位 4+2+1=7三种权限全加得到 7,映射为 rwx。
    7=4+2+1⇒rwx7 = 4+2+1 \Rightarrow rwx
  3. 属组位 4+0+1=5只加读和执行、没有写,得到 5,映射为 r-x。
    5=4+0+1⇒r−x5 = 4+0+1 \Rightarrow r-x
  4. 其他位 4+0+1=5与属组相同,外人只能读和执行。
    5=4+0+1⇒r−x5 = 4+0+1 \Rightarrow r-x

chown修改归属

门禁系统认的是“名单”。如果一间办公室换了个新团队入驻,而门禁里的房主还写着旧部门,新员工会一直被拒之门外。这时需要走一道“过户”手续:把房本上的名字改成新主人。chown 是 change owner 的缩写,用来修改文件的属主和属组。它和 chmod 的分工很清晰:chmod 管“门怎么开”,chown 管“房子是谁的”。改归属通常需要 root 权限。

chown alice file.txt 把属主改成 alice;chown alice:dev file.txt 同时把属主改成 alice、属组改成 dev;只写冒号和组名 chown :dev file.txt 则只改属组;-R 递归处理整个目录。部署时的权限排查常从这里开始:文件属主不是运行服务的用户,服务就读取不了配置,日志里就会刷出一串 Permission denied。

名单对了、锁换了,新房装修时锁厂的默认配置,还会悄悄影响每一扇新装的门——这就是 umask。

chown  alice:dev  report.txt⇒属主=alice,  属组=devchown\;alice:dev\;report.txt \Rightarrow \text{属主}=alice,\; \text{属组}=dev
冒号左边填属主,右边填属组,一条命令完成过户登记。
  1. 命令名 chown把文件的属主/属组改写成指定的新值,相当于房产过户登记。
    chown⇒过户命令chown \Rightarrow \text{过户命令}
  2. 属主名 alice冒号左边的名字,决定文件的新主人是谁。
    alice⇒新属主alice \Rightarrow \text{新属主}
  3. 分隔符 ``:冒号把“属主”和“属组”两个槽位分开,只写冒号左边就只改属主。
    :⇒属主/属组分隔符: \Rightarrow \text{属主/属组分隔符}
  4. 属组名 dev冒号右边的名字,决定文件归属哪个用户组。
    dev⇒新属组dev \Rightarrow \text{新属组}

umask默认权限

物业有条规矩:每间新装修的空房,默认不装最贵的门锁,只留基本防护。你不需要每装一扇门都交代一遍,因为物业有统一的“默认锁配置”。这个配置就是 umask。Linux 创建文件时不会给满全权限,而是套用一个默认模板:普通文件默认全权限是 666(可读可写),目录是 777(可读可写可进入)。umask 的作用就是从中“扣掉”一些权限,得到真正落地的默认权限。

计算规则是:最终权限 = 默认权限 & ~umask。比如 umask=022,文件就是 666 & ~022 = 644(rw-r--r--),目录是 777 & ~022 = 755(rwxr-xr-x)。为什么不是直接“减”而是“按位取反再与”?因为权限位是独立的,只有位运算能精确剔除某些位而保留其他位。临时修改用命令 umask 027,想持久生效可以写入 /etc/profile 或用户的 ~/.bashrc。

锁的默认配置定了,但大楼还有一些“特殊房间”:公共储物柜、深夜值班室。它们需要的不是普通门禁,而是三种特殊权限位。

最终权限=默认权限  &  ∼umask,644=666  &  ∼022\text{最终权限}=\text{默认权限} \;\&\; \sim \text{umask}, \qquad 644=666 \;\&\; \sim 022
默认权限先取反 umask,再按位与,得到最终权限,整个过程像在标准配置上盖掉不需要的格子。
  1. 默认权限 666新建普通文件的初始模板,属主、属组、其他都可读可写。
    666⇒rw−rw−rw−666 \Rightarrow rw-rw-rw-
  2. 取反 ~022把 umask 每一位翻转,022 变为 755,表示“组和其他不许写,其余保留”。
    ∼022⇒755\sim 022 \Rightarrow 755
  3. 按位与 &把默认权限和取反结果逐位比较,两处都是 1 才保留,从而精确剔除不要的权限。
    666  &  755=644666 \;\&\; 755 = 644
  4. 最终权限 644运算结果,组和其他只剩下读权限,对应 rw-r--r--。
    644⇒rw−r−−r−−644 \Rightarrow rw-r--r--

特殊权限位

三种特殊权限,像三张特殊工牌:setuid 是“临时工牌”——普通员工刷它,就能以部门经理身份开门;setgid 是“团队代刷”——在共享会议室里谁开门都算团队活动;粘滞位是“储物柜规则”——谁的东西只有谁能取走,哪怕柜子是公用的。普通权限用 9 个位,特殊权限在它们前面再添最高位:setuid=4、setgid=2、粘滞位=1,所以 chmod 4755 里的最高位 4 就是开启 setuid。

setuid 最典型的例子是 /usr/bin/passwd:普通用户修改密码要写 /etc/shadow,这个文件只有 root 能写,于是 passwd 带上 setuid 位,运行时以 root 身份去写,让改密码成为可能。setgid 用在共享目录上,目录内新建的文件自动继承目录的属组,团队协作不需要手动 chgrp。粘滞位用在 /tmp:任何人都能往里写文件,但只有文件属主、目录属主或 root 能删除别人的文件。权限位上它们显示为小写 s 或 t,没有执行权时则显示大写 S 或 T。

特殊权限解决了共享与提权问题,但它的威力也意味着危险。面对更复杂的需求——比如只给某个具体访客单独开门——普通权限就不够用了,需要 ACL 和 SELinux 登场。

4755=4⏟setuid+755⏟rwxr-xr-x  ⇒  rwsr−xr−x4755 = \underbrace{4}_{\text{setuid}} + \underbrace{755}_{\text{rwxr-xr-x}} \;\Rightarrow\; rwsr-xr-x
在普通三位数前加 4/2/1,分别开启 setuid/setgid/粘滞位,权限显示时执行位会变成 s 或 t。
  1. 最高位 4setuid 标志,文件执行时临时获得属主身份;2 是 setgid,1 是粘滞位。
    4⇒setuid,  2⇒setgid,  1⇒粘滞位4 \Rightarrow \text{setuid}, \; 2 \Rightarrow \text{setgid}, \; 1 \Rightarrow \text{粘滞位}
  2. 普通权限 755与之前的 755 完全一样,特殊位只是额外叠加,不影响九位权限。
    755⇒rwxr−xr−x755 \Rightarrow rwxr-xr-x
  3. 显示变化 s属主的执行位 x 被替换成 s,提醒你“这个程序运行时身份会变化”。
    rwsr−xr−x⇒执行位变为 srwsr-xr-x \Rightarrow \text{执行位变为 }s

ACL与SELinux

门禁的常规规则只有三类人,但你只想让隔壁工位的小张看看文件,他既不在你的组里、也不属于“其他”的待遇范围。这时需要一张“白名单”,在门禁上单独写一条:小张可进门。这白名单就是 ACL(Access Control List,访问控制列表)。而 SELinux 是整栋楼的中央安保:给每个进程和文件都贴标签,一旦行为越界,保安直接拦人——它属于内核级强制访问控制(MAC)。

ACL 在传统九位权限之外,为指定用户/组单独授权:setfacl -m u:alice:rw file.txt 给 alice 单独读写权限;setfacl -x u:alice file.txt 移除;getfacl file.txt 查看所有条目。加了 ACL 后,ls -l 末尾会多一个 +。ACL 里的 mask 是“权限遮罩”,限制所有具名用户和组的最大权限。SELinux 三种模式:enforcing 强制拦截、permissive 只记录不拦截、disabled 关闭;查看上下文用 ls -Z,排查拦截看 /var/log/audit/audit.log,临时调整用 chcon。

有了白名单和中央安保,这栋大楼的出入管理才算完整。从大厅布局到每扇门锁,从默认配置到特殊工牌,你现在已经掌握了 Linux 权限的完整地图。

u:alice:rwx  ⇒  主体类型:用户名:授权权限u:alice:rwx \;\Rightarrow\; \text{主体类型}:\text{用户名}:\text{授权权限}
ACL 条目用三段冒号分隔,告诉系统“谁、被授权、干什么”。
  1. 主体类型 u指明这条 ACL 针对的是用户(u=user),也有 g 表示组。
    u⇒用户主体u \Rightarrow \text{用户主体}
  2. 用户名 alice白名单上具体的名字,即使与文件属主无关也能被单独授权。
    alice⇒被授权用户alice \Rightarrow \text{被授权用户}
  3. 授权权限 rwx为这位用户单独授予的权限,三字母与普通权限含义一致。
    rwx⇒指定权限rwx \Rightarrow \text{指定权限}
  4. 冒号分隔 ``:三段信息用冒号隔开,顺序固定,缺一不可。
    :⇒字段分隔符: \Rightarrow \text{字段分隔符}

AI 应用场景

服务部署上线排障

阶段:应用部署与配置管理

解决的问题:代码上传后,服务进程因权限不足无法读取配置、执行脚本,或者人人可写导致安全风险。传统方式靠手工 ls -l 和 chmod 一个个目录试,效率低且容易漏改。

具体案例:某团队把模型推理服务部署到新服务器,运行 ./deploy.sh 一直报 Permission denied。排查发现 deploy.sh 没有执行权限、config/ 目录属主是 root 而服务用户是 app。执行 chmod 750 deploy.sh、chown -R app:app config/ 后服务正常启动——这正是 chmod 换锁、chown 过户的标准组合拳。

AI训练数据权限管控

阶段:数据安全与合规

解决的问题:训练数据集包含敏感样本,若文件权限过大,任何登录用户都能读取造成隐私泄露;权限过小则训练任务读不了。多人标注团队需要不同粒度的访问控制。

具体案例:数据平台用 ACL 精确授权:数据文件属主是 ml-service,标注团队通过 setfacl -m g:annotators:r 只读访问,模型训练容器通过 setfacl -m u:trainer:rw 读写。再用 chmod 750 阻止无关用户,审计时用 getfacl 快速确认谁有权。

容器挂载卷权限修复

阶段:容器编排与持久化存储

解决的问题:Kubernetes 的 PV/PVC 挂载后,容器内进程以非 root 用户运行时经常出现 Permission denied,本质是宿主机目录权限与容器 UID 不匹配。

具体案例:某算法团队在 K8s 里挂载 NFS 共享卷训练模型,容器内 UID 1000 写不进去。最终在宿主机执行 chown -R 1000:1000 /data,并设置 chmod -R g+rwX /data,配合 securityContext.fsGroup: 1000 解决了写权限问题。

Python 演示

python49 行
class PermissionTool:    """模拟Linux权限计算的工具类"""     WEIGHTS = {'r': 4, 'w': 2, 'x': 1}     @staticmethod    def numeric_to_symbolic(mode):        result = []        for ch in list(str(mode)):            n = int(ch)            part = ''            for op in ('r', 'w', 'x'):                if n >= PermissionTool.WEIGHTS[op]:                    part += op                    n -= PermissionTool.WEIGHTS[op]                else:                    part += '-'            result.append(part)        return ''.join(result)     @staticmethod    def apply_umask(base, umask):        return base & ~umask     @staticmethod    def can_execute(mode, identity):        sym = PermissionTool.numeric_to_symbolic(mode)        table = {'user': (0, 3), 'group': (3, 6), 'other': (6, 9)}        begin, end = table[identity]        return sym[begin:end][2] == 'x'  def main():    tool = PermissionTool()    print('数字权限转符号权限:')    for mode in (755, 644, 600, 4755):        print(f'chmod {mode} -> {tool.numeric_to_symbolic(mode)}')     print('\numask 计算:')    print(f'文件: 666 & ~022 = {tool.apply_umask(0o666, 0o22)}')    print(f'目录: 777 & ~022 = {tool.apply_umask(0o777, 0o22)}')     print('\n执行权限检查:')    print(f'755 下 other 可执行? {tool.can_execute(755, "other")}')    print(f'644 下 group 可执行? {tool.can_execute(644, "group")}')  if __name__ == '__main__':    main()
目的:用 Python 模拟 Linux 权限核心计算——数字权限转符号表示、umask 位运算、按身份判断执行权限。
  1. WEIGHTS = {'r': 4, 'w': 2, 'x': 1}权限权重表,把读/写/执行翻译成数字。
  2. for op in ('r', 'w', 'x'):逐位检查该字符位置有没有对应权限。
  3. if n >= PermissionTool.WEIGHTS[op]:剩余数值够扣当前权重,说明该位开启。
  4. return base & ~umask位运算:取反 umask 后按位与,得到最终默认权限。
  5. table = {'user': (0, 3), 'group': (3, 6), 'other': (6, 9)}三个身份对应的切片位置。
  6. return sym[begin:end][2] == 'x'取该身份第三位,判断能否执行。

常见误区

误区很多朋友一遇到权限报错就“chmod 777 -R 整个目录”,心想反正所有用户都能读写执行,肯定能跑。有的教程甚至直接建议 777,于是成了习惯动作。

正解777 等于把大门钥匙复制给全楼所有人,配合 root 运行的服务、数据库、敏感配置,等于在裸奔。正确做法是“最小权限原则”:只要服务用户能读写/执行就够了。例如先 chown 指定属主,再用 750 或 700 收紧到服务用户自己。

为何常见:因为 777 是权限报错最快的解法,网上随手一搜就看到,忽略了安全后果。

误区认为“我没有写这个文件的权限,所以删不掉它”,于是去 chmod 文件本身。

正解能否删除文件,取决于父目录的写权限,与文件自身权限无关。文件自己的写权限只控制内容修改;/tmp 下任何人都能写,但粘滞位保证只有属主能删别人的文件,就是这个道理。

为何常见:把“改内容”和“增删条目”混为一谈,没理解目录也是一种文件,删除操作改的是目录里的清单。

误区觉得 chown 和 chmod 都能改权限,用法差不多,混着写也不报错就以为没关系。

正解职责完全不同:chmod(change mode)管“谁能怎么操作”(读/写/执行),chown(change owner)管“这份文件归谁所有”(属主/属组)。前者是换锁,后者是过户,两个命令联动才构成完整权限体系。

为何常见:命令名都以 “ch“ 开头,参数格式也像,初学者只记住”改权限”的粗略印象。

误区以为 umask=022 时新文件权限就是 022,完全反了,进而疑惑“022 是啥权限”。

正解umask 是“屏蔽掉”的权限位而非“设置”的权限位。文件默认 666 扣掉 022 得到实际 644,这是减法式逻辑。真正的最终权限 = 默认权限 & ~umask,不是 umask 本身。

为何常见:“默认权限”字面意思容易误导,不理解位运算机制就记反了。

误区给用户加了 ACL,却发现实际生效权限比指定的 rw 小,以为是系统 Bug。

正解这是 mask 遮罩在工作。mask 是所有具名用户/成员组的“权限上限”,指定权限会与 mask 按位与后再生效。例如 ACL 写 rwx 但 mask 是 r-x,实际只有 r-x。调 mask 用 setfacl -m m::rwx。

为何常见:不了解 ACL 的生效链路,把 ACL 条目当成了最终权限。

面试题

Q1. 执行 chmod 644 config.conf 后,属组对该文件的权限是什么?

单选题 · easy

  • A.可读且可写
  • B.可读且可执行
  • C.仅可读文件← 正确答案
  • D.没有任何权限

答案:C。644 对应 rw-r--r--,第二位数字 4 代表属组权限 r--,只可读。这就像门禁上给同层同事发的卡只能看门牌,不能进门也不能改内容。

Q2. 下面哪条命令把 report.txt 的属主改成 alice、属组改成 dev?

单选题 · easy

  • A.chown alice dev report.txt
  • B.chown alice:dev report.txt← 正确答案
  • C.chmod alice:dev report.txt
  • D.chgrp alice:dev report.txt

答案:B。chown 的完整格式是 属主:属组,冒号前是属主、冒号后是属组。A 少了冒号语法错误;C 是 chmod 管权限不管归属;D 的 chgrp 只能改属组。

Q3. 新建普通文件,umask=027,最终权限是什么?

单选题 · mid

  • A.640← 正确答案
  • B.750
  • C.644
  • D.620

答案:A。文件默认 666,按公式 666 & ~027 计算。027 取反后与 666 按位与,结果是 640(rw-r-----)。就像物业默认配置把组写权限和其他所有权限都盖掉了。

Q4. 目录 /data 属主是 root、属组是 staff、权限为 rwxr-x---,staff 组用户能在 /data 下创建新文件吗?

单选题 · mid

  • A.可以,组身份有读进入权限
  • B.不可以,组身份没有写权限← 正确答案
  • C.可以,属主 root 通办
  • D.取决于其他用户的权限设定

答案:B。staff 组对应中间三位 r-x,有读和执行但没有写。创建文件需要目录的写权限,所以不行。这就像同事能进房间翻资料,但不能往房间搬新东西。

Q5. 关于粘滞位(sticky bit),下列说法正确的有?

多选题 · mid

  • A.常用于 /tmp 公共目录← 正确答案
  • B.任何人都能删他人文件
  • C.属主或root才能删文件← 正确答案
  • D.ls -l 显示末尾小写 t← 正确答案

答案:ACD。粘滞位让公共目录里每个人都能写,但删文件只能由文件属主、目录属主或 root 执行,所以 B 错。它显示在权限末尾的 t,/tmp 就是典型应用。

Q6. setuid 位的作用是什么?

单选题 · hard

  • A.程序以属组身份来运行
  • B.程序以属主身份来运行← 正确答案
  • C.程序运行时任何用户可写
  • D.目录内文件继承其属组

答案:B。setuid 让程序运行时临时获得文件属主的身份,典型是 /usr/bin/passwd,普通用户借此以 root 身份改密码。A 和 D 是 setgid 的作用,C 与 setuid 无关。

Q7. 想在 file.txt 上给用户 alice 单独读写权限,以下说法正确的是?

多选题 · hard

  • A.用 setfacl 给 alice 单独授权← 正确答案
  • B.用 chmod 即可实现单独授权
  • C.getfacl 可查看ACL条目← 正确答案
  • D.ACL会把属主改给alice

答案:AC。setfacl -m u:alice:rw file.txt 是正确姿势,getfacl 查看结果。chmod 只能改属主/属组/其他三类,无法给任意单独用户授权;ACL 也不会改动属主。

Q8. 执行一个普通脚本文件需要哪种权限?

单选题 · easy

  • A.读权限
  • B.写权限
  • C.执行权限← 正确答案
  • D.完全控制

答案:C。运行程序要的是 x 执行位。就像进机房办事要门禁卡,光能隔着玻璃看(读)没用,得能刷卡进门(执行)才做得了事。

Q9. 符号法 chmod g-w,o-r file 的作用是?

单选题 · mid

  • A.给属组加写权限及已读权限
  • B.移除属组写和其他读权限← 正确答案
  • C.给属组与其他用户加写权限
  • D.移除属主与其他用户的读

答案:B。逗号分隔多条规则:g-w 移除属组的写权限,o-r 移除其他的读权限。符号法就是精确地“给谁减什么”,不会动属主权限。

Q10. 关于 SELinux,下列说法正确的有?

多选题 · hard

  • A.属于强制访问控制机制← 正确答案
  • B.enforcing阻止违规行为← 正确答案
  • C.排查时必须彻底关闭它
  • D.permissive只记录不拦截← 正确答案

答案:ABD。SELinux 是内核级强制访问控制(MAC),enforcing 模式会拦截违规操作,permissive 只记录告警不拦截,常用来定位问题。排查时优先切 permissive 看审计日志,而不是急着关闭。