大家好,欢迎回到RHCE9学习笔记系列。在前三篇文章中,我们学习了Linux基础命令、文件操作以及重定向与正则表达式。今天,我们将进入Linux安全体系的核心:用户管理与权限控制。理解用户和权限是如何工作的,是保障系统安全、实现多人协作运维的基础。
1. Linux用户管理概述
Linux是一个多用户、多任务的操作系统。用户管理主要包括三个方面:用户账号管理、用户组管理、密码管理。所有用户相关信息都存储在几个关键文件中:
| |
|---|
/etc/passwd | |
/etc/shadow | |
/etc/group | |
/etc/gshadow | |
1.1 /etc/passwd 文件结构
每一行代表一个用户,由7个字段组成,以冒号分隔:
root:x:0:0:root:/root:/bin/bash
1.2 /etc/shadow 文件结构
密码信息更详细,用于密码管理:
root:$6$...:19680:0:99999:7:::
1.3 /etc/group 文件结构
2. 用户管理命令
2.1 创建用户 – useradd
# 创建用户(系统会自动创建同名私有组、家目录、邮箱)useradd zhangsan# 查看用户信息grep zhangsan /etc/passwd# 输出:zhangsan:x:1001:1001::/home/zhangsan:/bin/bash
常用选项:
| |
|---|
-u UID | |
-d 家目录 | |
-s shell | |
-g 主要组 | |
-G 附加组 | |
-c 描述 | |
# 指定UID、家目录和Shell创建用户useradd lisi -u 2000 -d /home/some -s /bin/sh# 创建用户并指定附加组useradd wangwu -G root,wheel
2.2 修改用户 – usermod
# 修改用户的UIDusermod zhangsan -u 1500# 修改用户的家目录usermod zhangsan -d /home/newhome# 添加附加组(-a 表示追加,否则会覆盖原有附加组)usermod zhangsan -aG wheel
2.3 删除用户 – userdel
# 仅删除用户,保留家目录和邮箱userdel zhangsan# 连同家目录和邮箱一起删除userdel -r zhangsan
2.4 查看用户信息 – id 和 whoami
id zhangsan # 查看用户的UID、GID和所属组whoami# 显示当前用户名
3. 用户组管理
3.1 组的概念
私有组(Private Group):创建用户时,系统自动创建的同名组,该用户是唯一成员。
主要组(Primary Group):用户登录后默认所属的组,记录在 /etc/passwd 的GID字段。
附加组(Attached Group):用户额外所属的组,记录在 /etc/group 的成员列表中。
3.2 组管理命令
# 创建组groupadd developers# 指定GID创建组groupadd -g 3000 admins# 修改组GIDgroupmod admins -g 3500# 删除组(组内不能有用户作为主要组)groupdel developers
3.3 临时切换主要组 – newgrp
# 临时切换到其他组(需要密码或成员身份)newgrp wheel# 此时创建的文件所属组变为 wheeltouch testexit# 退出新Shell,回到原主要组
4. 密码管理
4.1 设置密码 – passwd
# root用户为他人设置密码passwd zhangsan# 普通用户修改自己的密码passwd# 删除用户密码(禁用密码登录)passwd -d zhangsan# 强制用户下次登录修改密码passwd -e zhangsan
小技巧:使用 --stdin 可以从标准输入设置密码(常用于脚本):
echo "MyPassword123" | passwd --stdin zhangsan
4.2 密码策略 – chage
chage 用于精细管理密码过期策略:
# 设置用户密码策略chage -d 0 -m 2 -M 30 -W 7 -I 5 -E 2025-12-31 zhangsan4
| |
|---|
-d 天数 | |
-m 天数 | |
-M 天数 | |
-W 天数 | |
-I 天数 | |
-E 日期 | |
# 查看用户密码信息chage -l zhangsan
5. Root密码破解(应急)
忘记root密码时,可以通过单用户模式或rd.break恢复:
重启系统,在GRUB菜单按 e 编辑启动项。
在以 linux 开头的行末尾添加 rd.break,按 Ctrl+x 启动。
进入紧急救援模式,重新挂载根文件系统为读写:
mount -o remount,rw /sysroot
4.修改root密码:
5.创建重置SELinux上下文的文件:
6. 退出并重启:
注意:RHEL 9 中单用户模式可能被保护,需在GRUB中添加 single 或 systemd.unit=rescue.target。
6. 文件权限详解
6.1 查看权限 – ls -l
-rw-r--r--. 1 root root 1234 Mar 20 10:00 file.txt
第一列共10个字符:
| |
|---|
| 文件类型(-普通文件,d目录,l软链接,b块设备,c字符设备) |
| |
| |
| |
权限字符含义:
6.2 权限对文件与目录的不同影响
重要结论:
6.3 修改权限 – chmod
符号模式
# 为所有者添加执行权限chmod u+x file.sh# 移除所属组的写权限chmod g-w file.txt# 设置所有者为读写执行,组为读写,其他人为只读chmod u=rwx,g=rw,o=r file.txt# 为所有用户添加执行权限chmod a+x script.sh
数字模式(八进制)
每个权限组合对应一个数字:
rwx =4+2+1 =7rw- =4+2+0 =6r-- =4+0+0 =4
三个权限位组合成三位数字:
# 设置权限为 rwxr-xr-- (755)chmod 755 file.sh# 设置权限为 rw-r--r-- (644)chmod 644 file.txt
6.4 修改所有者和所属组 – chown 和 chgrp
# 修改文件所有者chown zhangsan file.txt# 同时修改所有者和所属组chown zhangsan:wheel file.txt# 仅修改所属组chgrp developers file.txt# 递归修改目录下所有文件chown -R zhangsan:users /data
7. 特殊权限
Linux有三种特殊权限,用于突破普通权限限制。
7.1 SUID(Set User ID)
作用:当可执行文件设置了SUID位,任何用户执行该文件时,进程将获得文件所有者的权限。
典型应用:/usr/bin/passwd(所有者为root,普通用户可修改自己的密码)。
表示:所有者权限中的 x 变为 s(小写表示有执行权限,大写表示无执行权限)。
设置:
chmod u+s /path/to/file # 符号方式chmod 4755 /path/to/file # 数字方式(4代表SUID)
7.2 SGID(Set Group ID)
chmod g+s /path/to/dir # 符号方式chmod 2755 /path/to/dir # 数字方式(2代表SGID)
7.3 SBIT(Sticky Bit)
chmod o+t /tmp/testdir # 符号方式chmod 1755 /tmp/testdir # 数字方式(1代表SBIT)
7.4 查看特殊权限示例
ls -l /usr/bin/passwd# 输出:-rwsr-xr-x. 1 root root 32648 ...ls -ld /tmp# 输出:drwxrwxrwt. 11 root root 4096 ...
8. 默认权限掩码 – umask
umask 决定了新建文件和目录的默认权限。它实际上是权限的减法。
# 查看当前 umaskumask# 输出:0022 (通常只关注后三位)
默认规则:
文件:666 减去 umask
目录:777 减去 umask
示例:
修改 umask(临时):
umask 027 # 设置文件默认640,目录750
永久修改:编辑 /etc/profile 或 /etc/bashrc,找到 umask 设置并修改。
9. 访问控制列表 – ACL
当传统权限(所有者、组、其他人)无法满足复杂权限需求时,可以使用ACL为特定用户或组设置权限。
9.1 查看ACL
输出示例:
# file: file.txt# owner: root# group: rootuser::rw-user:zhangsan:rw-group::r--mask::rw-other::r--
9.2 设置ACL
# 为特定用户添加权限setfacl -m u:zhangsan:rw file.txt# 为特定组添加权限setfacl -m g:developers:r-x /data# 删除某个用户的ACLsetfacl -x u:zhangsan file.txt# 删除所有ACLsetfacl - file.txt
9.3 默认ACL(针对目录)
设置默认ACL后,在目录下新创建的文件会自动继承权限。
# 设置目录默认ACLsetfacl -m d:u:zhangsan:rwx /shared# 查看默认ACLgetfacl /shared
注意:默认ACL会与mask权限进行与运算,实际生效权限不会超过mask。
9.4 ACL与权限优先级
ACL规则按顺序匹配,一旦匹配即停止:
如果用户是所有者,使用所有者权限。
否则,如果用户有具体的ACL条目,使用该条目。
否则,如果用户属于某个有ACL条目的组,使用该条目。
否则,使用其他用户权限。
10. 权限委派 – sudo
sudo 允许普通用户以其他用户(通常是root)的身份执行命令,而无需知道root密码。
10.1 配置 /etc/sudoers
使用 visudo 命令编辑(自动检查语法):
常见配置格式:
# 允许用户zhangsan在任何地方执行任何命令zhangsan ALL=(ALL) ALL# 允许用户lisi执行特定命令,且无需密码lisi ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/reboot# 允许组wheel的所有成员执行任何命令%wheel ALL=(ALL) ALL
语法说明:
10.2 使用 sudo
sudo useradd newuser # 输入当前用户密码(根据配置)sudo -l# 列出当前用户可执行的sudo命令
生产实践:建议为所有运维人员创建普通用户,并赋予 sudo 权限,避免直接使用root。
总结
本篇系统学习了Linux用户管理与权限控制的方方面面:
用户管理:useradd、usermod、userdel,以及密码策略 chage。
组管理:groupadd、groupmod、groupdel,主要组与附加组的区别。
文件权限:rwx对文件与目录的不同意义,chmod、chown 的用法。
特殊权限:SUID、SGID、SBIT 的应用场景与设置。
默认权限:umask 控制新建文件/目录的初始权限。
ACL:为特定用户或组设置额外权限。
权限委派:通过 sudo 赋予普通用户管理权限。
掌握这些知识,你就能在Linux系统中灵活控制用户访问,保障数据安全,并为团队协作提供坚实的安全基础。
下一篇,我们将进入进程管理与服务控制,学习如何管理系统中的运行程序和服务。敬请期待!
练习建议:
创建两个用户,分别测试文件权限和ACL的效果。
在 /tmp 下创建一个目录,设置SGID位,验证新创建文件的所属组。
配置 sudo,让一个普通用户可以重启网络服务(systemctl restart network)而无需密码。
尝试用 chage 设置一个用户密码策略:最小使用3天,最大使用60天,提前7天警告。