当前位置: 首页 > news >正文

【Linux日新月异(二)】CentOS 7用户与用户组管理深度指南:保障系统安全的基石

🌌提供:
1. Kimi K2 Thinking(网站: 大语言模型(Large Language Model, LLM),是当前人工智能领域的重要技术分支,专注于自然语言处理和生成任务。)【开源】「AL」〖✿✿✿✿✿〗
🔔说明: 本文内容由Kimi K2生成。AI创作虽经校对,仍难免疏漏或偏颇之处。若您发现错漏、或有任何建议,恳请不吝赐教。您的每一次指正,都是我改进与成长的重要指引。
📓摘要:
   略...(有好建议的可以留言哦~~~(✿◕‿◕✿))


👥 CentOS 7用户与用户组管理深度指南

Linux是多用户多任务操作系统,用户管理是系统安全的基石!CentOS 7提供了一套完整的用户/组管理命令,配合/etc/passwd/etc/shadow等配置文件,构建起强大的权限隔离体系!


一、👤 用户管理核心命令

1.useradd- 创建用户 ⭐

语法:

useradd [选项] 用户名

核心选项:

  • -u UID:指定用户ID(默认自增)
  • -g GID/组名:指定主组
  • -G 组1,组2:指定附加组
  • -d 家目录:自定义家目录路径
  • -s Shell:指定登录Shell(如/bin/bash, /sbin/nologin
  • -m:自动创建家目录(默认)
  • -M不创建家目录(系统用户常用)
  • -c "描述":添加用户说明
  • -e YYYY-MM-DD:设置账户过期日期

案例1:创建普通用户

# 创建用户testuser,使用默认设置
useradd testuser
# 系统会:
# 1. 创建用户testuser(UID≥1000)
# 2. 创建同名主组testuser(GID=UID)
# 3. 创建家目录/home/testuser
# 4. 从/etc/skel复制默认配置文件
# 5. 在/etc/passwd、/etc/shadow添加记录

案例2:创建系统用户

# 创建无法登录的系统用户(如运行服务)
useradd -r -s /sbin/nologin -M nginx
# -r:系统用户(UID<1000)
# -s /sbin/nologin:禁止登录
# -M:不创建家目录

案例3:指定UID和组

# 先创建组
groupadd -g 1005 developers# 创建用户并指定属性
useradd -u 1050 -g developers -G wheel,devops \-d /home/testuser01 -s /bin/bash \-c "DevOps Engineer" -e 2025-12-31 testuser01# 查看结果
id testuser01
# uid=1050(testuser01) gid=1005(developers) groups=1005(developers),10(wheel),1006(devops)

⚠️ 注意事项:

  • 🔥UID冲突:检查UID是否已存在cat /etc/passwd | cut -d: -f3 | sort -n
  • 组不存在-g指定的组必须存在,否则会报错
  • 家目录权限:自动创建的家目录权限默认700(仅所有者可读写执行)
  • 配置文件:默认从/etc/skel复制,可自定义用户模板
  • 密码未设置:新建用户默认无密码,需用passwd设置

2.passwd- 设置/修改密码

语法:

passwd [选项] [用户名]

核心选项:

  • 无选项:修改当前用户密码
  • 用户名:修改指定用户密码(需root)
  • -l锁定用户(Lock)
  • -u解锁用户(Unlock)
  • -d:删除密码(无密码登录,⚠️危险)
  • -e:强制下次登录修改密码
  • -S:查看密码状态
  • --stdin:从标准输入接收密码(脚本自动化)

案例1:交互式设置密码

# root用户为testuser设置密码
passwd testuser
# 输入:New password: 
# 输入:Retype new password:

案例2:非交互式设置(脚本必备)

# 方法1:使用--stdin(推荐)
echo "Temp@123456" | passwd --stdin testuser# 方法2:chpasswd(批量)
echo "testuser:Temp@123456" | chpasswd# 方法3:批量修改(从文件)
cat users.txt | chpasswd
# users.txt格式:user1:pass1\nuser2:pass2

案例3:密码策略管理

# 查看密码状态
passwd -S testuser
# 输出:testuser PS 2024-11-15 0 99999 7 -1 (Password set, SHA512 crypt.)# 锁定用户(立即禁用)
passwd -l testuser
# 锁定后,/etc/shadow密码前会加!!# 解锁用户
passwd -u testuser

⚠️ 注意事项:

  • 🔥密码复杂度:CentOS 7默认启用pam_pwquality模块,密码需符合复杂度要求
  • 禁用用户:锁定用户用passwd -l不要直接修改/etc/shadow
  • root特权:普通用户只能改自己密码,root可改任何人
  • 密码安全:避免在命令行明文写密码(history可查看),用read -s更安全
  • 加密方式:CentOS 7默认SHA512,可通过authconfig --passalgo修改

3.usermod- 修改用户属性

语法:

usermod [选项] 用户名

核心选项:(大部分与useradd对应)

  • -u UID:修改用户ID
  • -g 组:修改主组
  • -G 组1,组2重置附加组
  • -aG 组1,组2追加附加组(常用!)
  • -d 新家目录:修改家目录路径
  • -m:移动家目录内容到新家
  • -s Shell:修改登录Shell
  • -L锁定用户(类似passwd -l)
  • -U解锁用户
  • -e YYYY-MM-DD:修改账户过期日
  • -c "新描述":修改说明

案例1:追加用户到附加组

# 将testuser添加到wheel组(sudo权限)
usermod -aG wheel testuser# 追加多个组(用逗号分隔,无空格)
usermod -aG devops,docker,kubernetes testuser# 查看结果
id testuser
groups testuser

案例2:修改家目录

# 修改家目录并移动内容
usermod -d /home/newtestuser -m testuser
# -m必须加,否则旧家目录内容不迁移!

案例3:锁定/解锁用户

# 临时禁用用户(离职员工)
usermod -L testuser# 重新启用
usermod -U testuser

⚠️ 注意事项:

  • 🔥 -G vs -aG-G覆盖原有附加组,-aG才是追加!
  • 主组修改-g指定的组必须存在,用户会被移出新组
  • 家目录移动-m只能在-d后使用,确保数据完整迁移
  • 用户登录时:不能修改当前登录用户的属性,需先退出

4.userdel- 删除用户

语法:

userdel [选项] 用户名

核心选项:

  • 无选项:仅删除用户,保留家目录和邮件
  • -r递归删除家目录和邮件池(⚠️危险!)
  • -f:强制删除(即使用户已登录)

案例1:安全删除(保留数据)

# 仅删除用户,家目录保留(后续手动处理)
userdel testuser
# 家目录变成无主之目录,需手动删除或 chown -R 新用户

案例2:彻底删除(⚠️高危)

# 删除用户并清理所有数据
userdel -r testuser
# 删除内容:
# 1. /etc/passwd, /etc/shadow记录
# 2. /home/testuser家目录
# 3. /var/spool/mail/testuser邮件

⚠️ 注意事项:

  • 🔥备份数据:执行-r前,务必备份/home/username重要数据
  • 用户进程:删除前确保用户无运行进程ps -u username
  • 文件归属:删除后,该用户创建的文件会变成数字UID,需手动清理
  • 主组问题:如果用户主组是私有组(同名),组不会被自动删除
  • 生产环境:建议先passwd -l锁定,观察30天后再删除

5.id- 查看用户身份信息

语法:

id [选项] [用户名]

案例:

# 查看当前用户
id
# uid=1000(testuser) gid=1000(testuser) groups=1000(testuser),10(wheel)# 查看指定用户
id root
# uid=0(root) gid=0(root) groups=0(root)# 只显示UID
id -u testuser      # 输出:1000# 只显示所有组(空格分隔)
id -G testuser      # 输出:1000 10

6.whoami/who/ w / last - 用户登录信息

whoami              # 当前用户(简单)
# 输出:testuserwho                 # 当前登录的用户、终端、登录时间
# 输出:
# testuser pts/0        2024-11-15 10:30 (192.168.1.100)
# root     pts/1        2024-11-15 11:00 (192.168.1.101)w                   # 更详细(含负载、进程)
# 输出:
# 11:05:30 up 2 days, 3:20,  2 users,  load average: 0.10, 0.05, 0.01
# USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
# testuser pts/0    192.168.1.100    10:30    0.00s  0.12s  0.00s bash
# root     pts/1    192.168.1.101    11:00    2:30   0.08s  0.08s sshdlast                # 查看登录历史(读取/var/log/wtmp)
# 输出:
# testuser pts/0        192.168.1.100    Fri Nov 15 10:30   still logged in
# root     pts/1        192.168.1.101    Fri Nov 15 11:00 - 11:05  (00:05)lastlog             # 查看所有用户最后登录时间
# 用户           端口     来自             最后登录时间
# root           pts/1    192.168.1.101    五 11月 15 11:00:01 +0800 2024
# testuser       pts/0    192.168.1.100    五 11月 15 10:30:22 +0800 2024
# nginx                                    **从未登录过**

7.su/sudo- 切换用户与提权

su语法:

su [选项] [用户名]

sudo语法

sudo [选项] 命令

案例1:su切换用户

# 切换到root(需输入root密码)
su -
# 或
su - root# 切换到testuser(进入其环境)
su - testuser# 不切换环境变量(当前环境)
su testuser# 执行单条命令
su -c "yum update" root

案例2:sudo提权(推荐!)

# 配置sudo权限(root执行)
visudo
# 或
nano /etc/sudoers
# 添加:
testuser ALL=(ALL) ALL
# 或免密码:
testuser ALL=(ALL) NOPASSWD:ALL# 使用sudo
sudo yum install nginx
sudo systemctl restart nginx# 切换到root shell
sudo -i
# 或
sudo su -# 查看sudo权限
sudo -l

⚠️ 注意事项:

  • 🔥su vs sudo
    • su:知道root密码,完全切换
    • sudo:使用自己密码,可审计,更安全!
  • wheel组:CentOS中wheel组成员默认有sudo权限
  • sudo日志:所有sudo操作记录在/var/log/secure
  • 默认禁止:安装后默认只有root能sudo,需手动配置

二、👥 用户组管理命令

1.groupadd- 创建用户组

语法:

groupadd [选项] 组名

核心选项:

  • -g GID:指定组ID
  • -r:创建系统组(GID<1000)

案例:

# 创建普通组
groupadd developers# 创建指定GID的组
groupadd -g 2000 devops# 创建系统组
groupadd -r docker

2.groupmod- 修改组属性

语法:

groupmod [选项] 组名

核心选项:

  • -g 新GID:修改组ID
  • -n 新组名:修改组名

案例:

# 修改组名(慎用,可能影响权限)
groupmod -n newdev developers# 修改GID
groupmod -g 3000 newdev

⚠️ 注意事项:

  • 🔥组名修改:如果文件系统使用组名授权(如ACL),需同步更新
  • GID修改:已登录用户需重新登录才能获取新GID
  • 主组问题:用户主组改名后,需usermod -g重新指定

3.groupdel- 删除用户组

语法:

groupdel 组名

案例:

# 删除空组
groupdel testgroup# 删除作为用户主组的组(会失败!)
groupdel developers
# 错误:groupdel: cannot remove the primary group of user 'testuser'
# 需先删除用户或修改用户主组

⚠️ 注意事项:

  • 🔥主组保护:不能删除作为任何用户主组的组
  • 附加组:删除组后,用户会失去该附加组权限
  • 无提示:删除成功无输出,静默操作

4.gpasswd- 组密码与管理

语法:

gpasswd [选项] 组名

核心选项:

  • 无选项:设置组密码(极少用)
  • -a 用户添加用户到组
  • -d 用户从组删除用户
  • -A 用户1,用户2:设置组管理员
  • -M 用户1,用户2:批量设置组成员(重置!)

案例1:管理组成员

# 添加用户到组(推荐用这个,比usermod -aG更直观)
gpasswd -a testuser docker# 从组删除用户
gpasswd -d testuser docker# 批量设置组成员(⚠️会覆盖原有成员)
gpasswd -M user1,user2,user3 developers

案例2:查看组成员

# 方法1:getent
getent group docker
# 输出:docker:x:993:user1,user2# 方法2:查看/etc/group
grep docker /etc/group# 方法3:查看用户所属组
groups testuser

⚠️ 注意事项:

  • 🔥 -M是重置 :会清空组内其他成员,慎用!
  • 主组问题gpasswd -d不能删除用户的主组
  • 组管理员:非root用户如被设为组管理员,可管理该组成员

三、📋 核心配置文件解析

1./etc/passwd- 用户账户信息

cat /etc/passwd
# 格式:用户名:密码占位符:UID:GID:描述:家目录:Shell
# 示例:
root:x:0:0:root:/root:/bin/bash
testuser:x:1000:1000:testuser:/home/testuser:/bin/bash
nginx:x:997:995:Nginx web server:/var/lib/nginx:/sbin/nologin

字段解析:

  1. 用户名:登录名
  2. 密码x表示密码在/etc/shadow
  3. UID:用户ID(0=root,1-999=系统,≥1000=普通)
  4. GID:主组ID
  5. 描述:用户全名或说明
  6. 家目录:登录后默认目录
  7. Shell:登录后执行的Shell(/sbin/nologin禁止登录)

2./etc/shadow- 用户密码信息(仅root可读)

sudo cat /etc/shadow
# 格式:用户名:加密密码:最后修改时间:最小天数:最大天数:警告天数:失效天数:过期日期:保留
# 示例:
root:$6$rounds=656000$...:19874:0:99999:7:::
testuser:$6$...:19874:0:99999:7:::

密码字段前缀:

  • $1$ = MD5
  • $5$ = SHA-256
  • $6$ = SHA-512(CentOS 7默认)

3./etc/group- 组账户信息

cat /etc/group
# 格式:组名:密码占位符:GID:组成员列表(逗号分隔)
# 示例:
wheel:x:10:testuser,admin
docker:x:993:

4./etc/gshadow- 组密码信息

sudo cat /etc/gshadow
# 格式:组名:加密密码:组管理员:组成员

四、🎯 综合实战案例

案例1:创建项目协作用户体系

#!/bin/bash
# 为项目ProjectX创建用户体系# 1. 创建项目组
groupadd -g 5000 projectx
groupadd -g 5001 projectx-dev
groupadd -g 5002 projectx-test# 2. 创建项目目录
mkdir -p /opt/projectx/{dev,test,prod}
chown root:projectx /opt/projectx
chmod 775 /opt/projectx# 3. 创建用户并分配
useradd -u 6001 -g projectx-dev -G projectx -c "Dev User" -m devuser01
useradd -u 6002 -g projectx-dev -G projectx -c "Dev User" -m devuser02
useradd -u 6101 -g projectx-test -G projectx -c "Test User" -m testuser01# 4. 设置初始密码
echo "Dev@2024#01" | passwd --stdin devuser01
echo "Dev@2024#02" | passwd --stdin devuser02
echo "Test@2024#01" | passwd --stdin testuser01# 5. 配置sudo权限(dev可重启服务)
echo "devuser01 ALL=(ALL) NOPASSWD:/bin/systemctl restart projectx" >> /etc/sudoers.d/projectx
echo "devuser02 ALL=(ALL) NOPASSWD:/bin/systemctl restart projectx" >> /etc/sudoers.d/projectx# 6. 验证
id devuser01
# 输出:uid=6001(devuser01) gid=5001(projectx-dev) groups=5001(projectx-dev),5000(projectx)

案例2:安全删除离职员工账户

# 步骤1:锁定账户(立即失效)
passwd -l leaveruser# 步骤2:查看进程并终止
ps -u leaveruser
kill -9 <PID># 步骤3:备份家目录
tar -czf /backup/leaveruser_$(date +%Y%m%d).tar.gz /home/leaveruser# 步骤4:备份30天后删除账户
# (添加到crontab每天检查)
# 0 2 * * * find /home -maxdepth 1 -type d -mtime +30 -name "leaveruser*" | xargs -I {} userdel -r {}

案例3:批量创建100个测试用户

#!/bin/bash
# 批量创建用户stressuser01-100GROUP="stress"
groupadd $GROUPfor i in {01..100}; doUSERNAME="stressuser$i"useradd -g $GROUP -M -s /sbin/nologin $USERNAMEecho "${USERNAME}:Password@2024" | chpasswd
done# 验证
getent group $GROUP
# 输出:stress:x:5003:stressuser01,stressuser02,...stressuser100

五、⚠️ 安全最佳实践

1.🔥 密码策略强化

# 查看当前策略
grep -E "PASS|RETRY" /etc/login.defs# 关键参数:
PASS_MAX_DAYS   90      # 密码最长90天
PASS_MIN_DAYS   7       # 最少7天后可改
PASS_WARN_AGE   14      # 提前14天警告

2.🔥 禁用root远程登录

# 编辑SSH配置
nano /etc/ssh/sshd_config
# 修改:
PermitRootLogin no# 重启SSH
systemctl restart sshd# 使用sudo用户登录后su/sudo

3.🔥 wheel组权限控制

# 确保只有wheel组可sudo
nano /etc/sudoers
# 取消注释:
%wheel  ALL=(ALL)       ALL# 严格控制wheel组成员
getent group wheel
# 只保留必要用户

4.🔥 定期审计账户

# 查找90天未登录用户
lastlog -b 90# 查找无密码账户(危险!)
awk -F: '($2=="") {print $1}' /etc/shadow# 查找UID=0的非root账户(后门检测)
awk -F: '($3==0 && $1!="root") {print $1}' /etc/passwd

5.🔥 账户过期管理

# 创建临时账户(30天过期)
useradd -e $(date -d "+30 days" +%Y-%m-%d) contractor01# 查看过期时间
chage -l contractor01

六、📚 快速命令手册

功能命令示例
创建用户useradduseradd -m -s /bin/bash user01
设置密码passwdecho "pass" | passwd --stdin user01
修改用户usermodusermod -aG wheel user01
删除用户userdeluserdel -r user01
创建组groupaddgroupadd devops
管理组gpasswdgpasswd -a user01 docker
查看身份idid user01
切换用户susu - user01
提权执行sudosudo yum install nginx
查看登录ww
登录历史lastlast | grep user01
密码策略chagechage -M 90 user01

🎓 总结 :用户管理是系统安全的第一道防线!牢记:

  1. 最小权限原则:用户只拥有必要权限,禁止777
  2. sudo优于su:全程可追溯,避免root密码泄露
  3. 定期审计:每季度检查/etc/passwd和/etc/shadow
  4. 离职必锁:员工离职当天立即passwd -l
  5. 备份策略:删除用户前务必备份家目录!

安全无小事,用户管理疏忽可能导致整个系统沦陷!



📖原文: 不惧本心,方为自我。不拒本心,是谓自在。-- 荒《完美世界》

⌛怡然: ...


🪁 LuminKu looks forward to seeing you again 🌌

http://www.dtcms.com/a/613212.html

相关文章:

  • 大模型-提示工程
  • ARM编译器深度解析:从Keil到VSCode的STM32开发之
  • 支持CAS身份认证,支持接入Oracle11数据源,SQLBot开源智能问数系统v1.3.0版本发布
  • oracle官网在线免费测试环境 oracle live
  • 网站风格设计描述怎么样可以做网站充值代理
  • MySql的慢查询(慢日志)
  • 建设京东商城网站导航网站教程
  • 【MySQL】深度解析 Redo Log 与灾后恢复
  • 网站都需要续费吗绍兴以往网站招工做
  • 做百度网站接到多少客户电话seo蜘蛛屯
  • 山东省住房城乡建设厅查询网站wordpress 执行顺序
  • 建设银行理财产品网站网站开发人员需要什么技能
  • 电子商务网站开发背景及意义什么网站可以兼职做设计
  • 简约 个人网站如何做好产品网络推广
  • 手机软件开发和网站开发成都百度推广效果
  • 中卫网站推广营销广州在线网页制作
  • 大连爱得科技网站建设公司怎么样孩子学编程的利弊
  • 企业网站需要注意什么专业网站建设软件开发
  • 广州网站建设公司万齐网络科技商丘网红排行榜
  • 做食品网站需要什么条件住房城乡与建设厅网站首页
  • 旅行网站建设方案策划书东莞寮步做网站的有吗
  • 网站建设部门宣言php网站开发报告
  • 哈尔滨自助建站系统长春做电商网站的公司
  • 做网站要不要35类商标网站构建免费
  • 校园网站的系统建设wordpress如和安装
  • 建设银行网站用户注册不了江宁区建设工程局网站
  • 站长推荐跳转广州社交软件app开发
  • c 网站开发案例wordpress模板是什么意思
  • 网站资料上传教程游戏广告联盟平台
  • 排名好的网站关键词优化企业网站如何做优化推广