为什么用户与组如此重要?
想象一下一个没有门禁和权限管理的大厦——任何人都可以进入任何房间,查看任何文件。Linux的用户与组系统就是这个数字大厦的安全门禁系统,它决定了“谁可以做什么”。
核心概念:UID、GID与权限模型
用户标识:UID(User ID)
· 0:超级用户root(拥有至高无上的权力)
· 1-999:系统用户(运行系统服务,如www-data、mysql)
· 1000+:普通用户(人类用户)
组标识:GID(Group ID)
· 每个用户至少属于一个主组
· 可以加入多个附加组
· 组权限决定资源访问级别
用户管理:从创建到删除的全过程
1. 创建用户:不只是useradd
# 基础创建
sudo useradd alice
# 专业创建(完整参数)
sudo useradd -m -d /home/alice -s /bin/bash -c "Alice Developer" -u 1001 alice
参数详解:
· -m:创建家目录
· -d:指定家目录路径
· -s:指定默认shell
· -c:用户描述信息
· -u:指定UID(避免冲突)
· -g:指定主组
· -G:指定附加组
更安全的做法:使用adduser(交互式)
sudo adduser bob
# 会交互式提示设置密码、信息等
2.设置密码:安全第一
# 为自己改密码
passwd
# 为其他用户改密码(需要root)
sudo passwd alice
# 设置密码策略
sudo chage -l alice # 查看密码策略
sudo chage -M 90 -m 7 -W 14 alice # 设置90天有效期,最小7天,提前14天警告
密码安全最佳实践:
# 使用openssl生成随机密码
openssl rand -base64 12
# 检查密码强度
sudo apt install libpam-pwquality # 安装密码质量检查
# 配置/etc/pam.d/common-password
3.用户信息管理:
# 查看用户信息
id alice
# 输出:uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
# 修改用户属性
sudo usermod -aG sudo alice # 添加sudo权限
sudo usermod -s /bin/zsh alice # 修改默认shell
sudo usermod -L alice # 锁定账户(不能登录)
sudo usermod -U alice # 解锁账户
# 查看登录信息
who # 当前登录用户
w # 更详细的登录信息
last # 历史登录记录
4.删除用户:保留还是清理
# 安全删除(保留家目录)
sudo userdel alice
# 彻底删除(包括家目录和邮件)
sudo userdel -r alice
# 推荐做法:先禁用,再删除
sudo usermod -L alice # 先锁定
sudo userdel -r alice # 再删除
组管理:权限分配的艺术
1.创建和管理组
# 创建组
sudo groupadd developers
sudo groupadd -g 2001 admins # 指定GID
# 添加用户到组
sudo usermod -aG developers alice # -aG很重要,保留原有组
sudo gpasswd -a bob developers # 另一种方法
# 从组中移除用户
sudo gpasswd -d bob developers
# 设置组管理员
sudo gpasswd -A alice developers # alice可以管理developers组
# 删除组
sudo groupdel developers
2.特殊权限组
sudo 管理员权限 可以使用sudo命令
www-date Web服务 运行Apache/Nginx等
docker Docker管理 允许非root使用docker
ssh SSH访问 控制SSH登陆权限
users 普通用户 基本用户组
配置文件深度解析
1./etc/passwd:用户数据库
cat /etc/passwd
# 示例行:
# alice:x:1001:1001:Alice Developer:/home/alice:/bin/bash
# 字段详解(冒号分隔):
# 1. 用户名:alice
# 2. 密码:x(实际在/etc/shadow)
# 3. UID:1001
# 4. GID:1001(主组)
# 5. 描述:Alice Developer
# 6. 家目录:/home/alice
# 7. 默认shell:/bin/bash
2./etc/shadow:密码与安全信息
sudo cat /etc/shadow
# 示例行:
# alice:$6$rounds=656000$...:18652:0:99999:7:::
# 字段详解:
# 1. 用户名:alice
# 2. 加密密码:$6$...($6表示SHA512)
# 3. 上次修改密码的天数(从1970-1-1起)
# 4. 最小密码年龄(0=随时可改)
# 5. 最大密码年龄(99999=永不过期)
# 6. 密码过期前的警告天数
# 7. 密码过期后的宽限天数
# 8. 账户过期日期(空=永不过期)
# 9. 保留字段
3./etc/group:组定义文件
cat /etc/group
# 示例行:
# developers:x:1002:alice,bob
# 字段详解:
# 1. 组名:developers
# 2. 组密码:x(实际在/etc/gshadow)
# 3. GID:1002
# 4. 组成员:alice,bob
高级技巧与故障排除
技巧1:恢复root密码
# 方法1:GRUB单用户模式
# 1. 重启系统,在GRUB菜单按'e'
# 2. 找到linux行,在行尾添加 init=/bin/bash
# 3. 按Ctrl+X启动
# 4. 重新挂载根目录:mount -o remount,rw /
# 5. 修改密码:passwd root
# 6. 重启:exec /sbin/init
# 方法2:使用Live CD/USB
# 1. 从Live介质启动
# 2. 挂载原系统分区
# 3. chroot进入原系统
# 4. 修改密码
技巧2:用户家目录迁移
# 将用户家目录迁移到新位置
sudo usermod -m -d /new/home/alice alice
# -m 表示同时移动家目录内容
技巧3:解决UID/GID冲突
# 查找重复的UID
awk -F: '{print $3}' /etc/passwd | sort -n | uniq -d
# 查找重复的GID
awk -F: '{print $3}' /etc/group | sort -n | uniq -d
# 修改用户UID
sudo usermod -u 2001 alice
# 修改文件所有权以匹配新UID
sudo find / -user 1001 -exec chown -h 2001 {} \;
# 修改组GID
sudo groupmod -g 2001 developers
sudo find / -group 1001 -exec chgrp -h 2001 {} \;
总结:用户与组管理的核心要点
- 理解关系:用户属于组,权限通过组分
配 - 遵循原则:最小权限、职责分离
- 记录一切:所有用户操作应有日志可查
- 定期审计:自动检查异常账户活动
- 备份配置:定期备份/etc/passwd、/etc/shadow等
记住:好的用户管理是系统安全的第一道防线。一个配置不当的用户账户可能成为整个系统的入口点。从今天起,开始实施这些最佳实践,让你的Linux系统更加安全可靠。