Linux 权限综合实战:警察土匪游戏完整实操教程

Linux 权限综合实战:警察土匪游戏完整实操教程

场景设定

  1. 两组用户组:police警察组、bandit土匪组
  2. 用户分配
    • 警察:jack、jerry(默认归属 police 组)
    • 土匪:xh、xq(默认归属 bandit 组)
  3. 任务流程
    1. 创建两组、四个用户
    2. jack 创建123.txt,权限:属主读写、同组只读、其他无权限
    3. jack 修改文件权限:同组读写、其他用户可读
    4. xh 投靠警察组,测试读写权限,分析权限失效原因
    5. 修复权限,让 xh 正常读写文件

全程需要 root/sudo 权限执行所有用户、组创建命令。

一、第一步:创建用户组与用户

1. 创建两个用户组

# 创建警察组police sudo groupadd police # 创建土匪组bandit sudo groupadd bandit # 验证组是否创建成功 cat /etc/group | grep -E "police|bandit"

2. 创建 4 个用户并绑定对应主组

useradd -g 组名 用户名-g指定用户主组,用户新建文件默认归属主组

# 警察用户 sudo useradd -m -g police jack sudo useradd -m -g police jerry # 土匪用户 sudo useradd -m -g bandit xh sudo useradd -m -g bandit xq

参数说明:

  • -m:自动创建用户家目录,复制/etc/skel环境文件
  • -g:设置登录默认主组

3. 为所有用户设置登录密码

sudo passwd jack sudo passwd jerry sudo passwd xh sudo passwd xq

4. 验证用户分组信息

# 查看jack的用户ID、主组、附加组 id jack # 查看xh分组 id xh

gid 为主组,groups 为全部所属组。

二、任务 1:jack 创建文件 123.txt,设置权限:属主 rw、组 r、其他无权限

1. 切换 jack 用户

su - jack

输入 jack 密码,进入 jack 家目录。

2. 创建文件

touch 123.txt # 查看默认权限 ls -l 123.txt

3. 设置目标权限

需求拆解:

  • 属主 jack:可读可写rw-→ 4+2=6
  • 同组 police 成员:只读r--→ 4
  • 其他所有人:无权限---→ 0 八进制权限组合:640
# 数字模式设置权限 chmod 640 123.txt # 等价符号模式写法 chmod u=rw,g=r,o=--- 123.txt

4. 验证权限

ls -l 123.txt # 输出示例 -rw-r----- 1 jack police 0 7月 8 10:00 123.txt

权限测试验证

1.同组 jerry 登录:可读取文件,无法修改写入

su - jerry cat /home/jack/123.txt # 可读 echo "test" >> /home/jack/123.txt # 写入报错 Permission denied

2.土匪 xq 登录:完全无法访问文件

su - xq cat /home/jack/123.txt # 权限拒绝

三、任务 2:jack 修改文件权限,本组可读写、其他用户可读

新权限规则:

  • 属主:rw(不变)
  • 同组 police:rw-(读写)
  • 其他用户:r--(只读) 对应八进制:664

执行修改

# 切回jack用户 su - jack # 数字模式 chmod 664 123.txt # 符号模式(推荐,直观) chmod g+w,o+r 123.txt

权限校验

ls -l 123.txt

测试效果

  1. jerry(同组):可读可写
  2. xq/xh(土匪,其他用户):仅能读取,不能修改

四、任务 3:xh 投靠警察组,测试读写权限

1. 将 xh 加入 police 组(附加组)

usermod -G 组名 用户名-G添加附加组,不改变原有主组

sudo usermod -G police xh # 查看xh分组 id xh

注意:修改附加组后必须重新登录 xh,分组才会生效。

2. 登录 xh 测试访问文件

su - xh # 读取文件 cat /home/jack/123.txt # 尝试写入 echo "土匪投靠警察" >> /home/jack/123.txt

现象:读写全部报错 Permission denied

核心原因分析(重点考点)
  1. 文件123.txt权限为rw-rw-r--,police 组拥有读写权限,xh 属于 police 附加组,文件权限本身允许 xh 读写;
  2. 报错根源:jack 家目录 /home/jack 的目录权限限制执行查看目录权限:
ls -ld /home/jack # 默认新建用户家目录权限 drwx------

目录权限drwx------含义:仅 jack 本人拥有进入、读取目录的权限,其他任何用户(包括同组 police 的 xh/jerry)都无法进入 /home/jack 目录,自然无法访问内部文件。 目录权限规则:

  • x执行权限:代表能否进入目录、查看目录内文件;
  • 只有拥有目录x权限,才能操作目录下文件。

五、任务 4:修改权限,让 xh 正常读写文件

两种解决方案,任选其一即可。

方案 1:修改 jack 家目录权限,开放组访问权限(推荐)

  1. 切回 jack 用户修改目录权限
su - jack # 赋予police组进入、读取目录的rx权限 chmod g+rx /home/jack # 查看目录权限 ls -ld /home/jack # 结果 drwxr-x--- 3 jack police ...

目录权限解析:

  • u:rwx(jack 完全控制)
  • g:rx(police 组成员可进入、查看目录文件)
  • o:---(外人无权限)
  1. 重新登录 xh 测试
su - xh cat /home/jack/123.txt echo "xh加入警察组成功" >> /home/jack/123.txt

六、拓展知识点:主组 vs 附加组区别

  1. -g(小写):修改用户主组,用户新建文件默认归属主组;
    sudo usermod -g police xh
  2. 执行后 xh 主组变为 police,新建文件属组自动为 police;
  3. -G(大写):添加附加组,用户同时拥有多组权限,但新建文件主组不变;
  4. 权限生效前提:修改用户组后需要重新登录;
  5. 文件权限判断优先级:先判断是否是文件属主→再判断是否属于文件属组→最后匹配其他用户。

七、完整清理命令

# 删除用户(连带家目录) sudo userdel -r jack sudo userdel -r jerry sudo userdel -r xh sudo userdel -r xq # 删除用户组 sudo groupdel police sudo groupdel bandit

八、实训小结

  1. Linux 文件三层权限:属主 (u)、属组 (g)、其他 (o),用 rwx 与八进制数字控制;
  2. 用户分为主组、附加组,usermod -g改主组,usermod -G增加附加组;
  3. 目录 x 权限是关键:没有目录执行权限,即便文件开放读写也无法访问;
  4. 场景实操逻辑:组用于批量授权,多用户共享文件时统一分配组权限;
  5. 权限报错排查顺序:先看目录权限,再看文件本身权限,最后核对用户所属分组。