LabHub
学习 学习路径 课程

Linux 基础

操作权限、用户与组

在 LabHub 中继续学习

目标

创建用户和组,为共享目录设置所需的特殊位,并编写脚本自行检查权限是否符合预期。

为什么重要

多数权限事故都是因为只关注‘文件权限’,却忘记‘目录权限’。删除文件所需的不是对该文件的写权限,而是对容纳该文件的目录拥有写权限。因此,即使是只读文件,也可能被其他人删除;Unix 为了堵住这个漏洞,专门提供了 sticky 位。出于同样的原因,多人共用的目录需要设置 setgid——如果不设置,每个人都会用自己的默认组创建文件,导致彼此无法读取的情况反复发生。

步骤

  1. 创建 /root/secret.txt,并将权限设为 600
  2. 创建用户 student1
  3. 创建组 devs,并把 student1 加入该组(保留现有组)。
  4. 创建 /root/shared/report.txt,并把所有者:组改为 student1:devs
  5. /root/shared 目录的组设为 devs,权限设为 2770
  6. 创建 /root/shared/incoming 目录,并将权限设为 1777
  7. 创建 /root/shared/run.sh,并将权限设为 750
  8. 创建 /root/shared/checkmode.sh <파일경로> <기대권한>。脚本必须具有执行权限;权限匹配时以退出码 0 结束,不匹配时输出当前权限并以非 0 退出码结束。文件不存在时也必须返回非 0 退出码。

提示

锁定机密文件权限

创建 /root/secret.txt,并将权限设为 600

三位八进制数依次表示所有者、组、其他用户。怎样设置才能只让所有者读写?

创建用户

创建用户 student1

使用 useradd 创建,再用 id 命令确认。

创建组并添加用户

创建组 devs,并把 student1 加入该组(保留现有组)。

使用 groupadd 创建组,再通过 usermod 添加到附加组。省略 -a 会丢失现有组。

更改所有者和组

创建 /root/shared/report.txt,并把所有者:组改为 student1:devs

chown 可以一次接收所有者:组这种格式。必须先创建文件。

为共享目录设置 setgid

/root/shared 目录的组设为 devs,权限设为 2770

四位八进制数的第一位是特殊位。请找出负责组继承的数值。

为上传目录设置 sticky 位

创建 /root/shared/incoming 目录,并将权限设为 1777

用 ls -ld 查看 /tmp 的权限,设置成相同形式即可。

设置可执行脚本权限

创建 /root/shared/run.sh,并将权限设为 750

这是所有者可读、写、执行,组可读、执行,其他用户无任何权限的组合。

创建权限检查脚本

创建 /root/shared/checkmode.sh <파일경로> <기대권한>。脚本必须具有执行权限;权限匹配时以退出码 0 结束,不匹配时输出当前权限并以非 0 退出码结束。文件不存在时也必须返回非 0 退出码。

使用 stat -c %a 读取当前权限,并与预期值比较。通过退出码报告结果;不匹配时还要同时输出当前权限。