Linux 权限综合实战:警察土匪游戏完整实操教程
场景设定
- 两组用户组:
police警察组、bandit土匪组 - 用户分配
- 警察:jack、jerry(默认归属 police 组)
- 土匪:xh、xq(默认归属 bandit 组)
- 任务流程
- 创建两组、四个用户
- jack 创建
123.txt,权限:属主读写、同组只读、其他无权限 - jack 修改文件权限:同组读写、其他用户可读
- xh 投靠警察组,测试读写权限,分析权限失效原因
- 修复权限,让 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 xq4. 验证用户分组信息
# 查看jack的用户ID、主组、附加组 id jack # 查看xh分组 id xhgid 为主组,groups 为全部所属组。
二、任务 1:jack 创建文件 123.txt,设置权限:属主 rw、组 r、其他无权限
1. 切换 jack 用户
su - jack输入 jack 密码,进入 jack 家目录。
2. 创建文件
touch 123.txt # 查看默认权限 ls -l 123.txt3. 设置目标权限
需求拆解:
- 属主 jack:可读可写
rw-→ 4+2=6 - 同组 police 成员:只读
r--→ 4 - 其他所有人:无权限
---→ 0 八进制权限组合:640
# 数字模式设置权限 chmod 640 123.txt # 等价符号模式写法 chmod u=rw,g=r,o=--- 123.txt4. 验证权限
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 denied2.土匪 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测试效果
- jerry(同组):可读可写
- 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
核心原因分析(重点考点)
- 文件
123.txt权限为rw-rw-r--,police 组拥有读写权限,xh 属于 police 附加组,文件权限本身允许 xh 读写; - 报错根源:jack 家目录 /home/jack 的目录权限限制执行查看目录权限:
ls -ld /home/jack # 默认新建用户家目录权限 drwx------目录权限drwx------含义:仅 jack 本人拥有进入、读取目录的权限,其他任何用户(包括同组 police 的 xh/jerry)都无法进入 /home/jack 目录,自然无法访问内部文件。 目录权限规则:
x执行权限:代表能否进入目录、查看目录内文件;- 只有拥有目录
x权限,才能操作目录下文件。
五、任务 4:修改权限,让 xh 正常读写文件
两种解决方案,任选其一即可。
方案 1:修改 jack 家目录权限,开放组访问权限(推荐)
- 切回 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:---(外人无权限)
- 重新登录 xh 测试
su - xh cat /home/jack/123.txt echo "xh加入警察组成功" >> /home/jack/123.txt六、拓展知识点:主组 vs 附加组区别
-g(小写):修改用户主组,用户新建文件默认归属主组;sudo usermod -g police xh- 执行后 xh 主组变为 police,新建文件属组自动为 police;
-G(大写):添加附加组,用户同时拥有多组权限,但新建文件主组不变;- 权限生效前提:修改用户组后需要重新登录;
- 文件权限判断优先级:先判断是否是文件属主→再判断是否属于文件属组→最后匹配其他用户。
七、完整清理命令
# 删除用户(连带家目录) sudo userdel -r jack sudo userdel -r jerry sudo userdel -r xh sudo userdel -r xq # 删除用户组 sudo groupdel police sudo groupdel bandit八、实训小结
- Linux 文件三层权限:属主 (u)、属组 (g)、其他 (o),用 rwx 与八进制数字控制;
- 用户分为主组、附加组,
usermod -g改主组,usermod -G增加附加组; - 目录 x 权限是关键:没有目录执行权限,即便文件开放读写也无法访问;
- 场景实操逻辑:组用于批量授权,多用户共享文件时统一分配组权限;
- 权限报错排查顺序:先看目录权限,再看文件本身权限,最后核对用户所属分组。
