从/etc/passwd和shadow文件入手:深入理解Linux用户管理与安全排查(附账户锁定实战)
从/etc/passwd和shadow文件入手深入理解Linux用户管理与安全排查附账户锁定实战在Linux系统中用户管理是系统安全的第一道防线。作为系统管理员或安全工程师理解用户认证的底层机制不仅能帮助我们更高效地管理账户还能在应急响应时快速识别异常用户活动。本文将带您深入探索Linux用户认证的核心文件——/etc/passwd和/etc/shadow揭示它们如何共同构建起Linux的用户认证体系。1. Linux用户认证的双文件机制Linux采用独特的双文件设计来管理用户认证信息这种分离机制既考虑了历史兼容性又强化了系统安全性。1.1 /etc/passwd用户信息的基础档案这个可读性文件存储了所有用户的基本信息每行记录代表一个用户账户包含7个由冒号分隔的字段root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash各字段的详细含义如下表所示字段位置字段名称说明1username登录用户名区分大小写2password历史遗留字段现代系统固定为x表示密码存储在/etc/shadow3UID用户ID0表示root1-999为系统账户1000为普通用户4GID主组ID决定用户的初始文件权限5User_Info注释字段通常包含用户全名或联系方式6Home_Dir用户主目录路径登录后的默认工作目录7Shell登录shell/bin/bash为可登录账户/sbin/nologin表示禁止交互式登录关键安全提示定期检查/etc/passwd文件中是否存在UID为0的非root账户这是攻击者常用的提权手段。1.2 /etc/shadow密码与安全策略的保险箱这个仅root可读的文件存储了真正的密码哈希和安全策略每行对应一个用户账户包含9个关键字段ubuntu:$6$9mT7FwX2$ZQ4...:19147:0:99999:7:::让我们拆解这些字段的安全含义用户名与/etc/passwd中的对应加密密码采用$id$salt$hash格式存储其中$1$MD5已淘汰$5$SHA-256$6$SHA-512当前主流$y$Yescrypt最新算法特殊标记!或!!账户被锁定*账户禁用空无需密码即可登录高危最后修改日期表示密码最后更改的天数从1970年1月1日开始计算最小密码年龄0表示可随时修改最大密码年龄99999通常表示永不过期安全风险警告期密码到期前多少天开始警告用户宽限期密码过期后仍可登录的天数账户过期日账户失效的绝对日期保留字段目前未使用安全最佳实践建议将最大密码年龄设置为90天并启用7天的警告期强制用户定期更换密码。2. 应急响应中的用户排查技巧当系统遭受入侵时快速识别异常用户账户是应急响应的关键步骤。以下是专业的安全排查流程。2.1 识别可疑用户的四步法对比用户列表# 获取系统所有用户 cut -d: -f1 /etc/passwd | sort # 获取有登录shell的用户 grep -v /nologin\|/false /etc/passwd | cut -d: -f1检查特权账户# 查找所有UID为0的账户 awk -F: ($3 0) {print $1} /etc/passwd # 查找可sudo的用户 grep -Po ^sudo.:\K.*$ /etc/group分析密码哈希强度# 检查使用弱哈希算法的账户 awk -F: ($2 ~ /\$1\$|\$2a\$|\$5\$/) {print $1} /etc/shadow检测空密码账户awk -F: ($2 ) {print $1} /etc/shadow2.2 登录会话分析三板斧结合其他系统命令可以全面掌握用户活动情况当前登录用户w输出示例12:34:56 up 10 days, 2:30, 3 users, load average: 0.08, 0.03, 0.01 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT ubuntu pts/0 192.168.1.100 10:15 5.00s 0.05s 0.00s w历史登录记录last -ai失败的登录尝试grep Failed password /var/log/auth.log3. 账户锁定与安全管理的实战操作掌握账户状态管理是安全运维的基本功下面介绍几种关键操作的实际应用场景。3.1 账户锁定与解锁的两种方式方法一使用passwd命令# 锁定账户 passwd -l username # 解锁账户 passwd -u username方法二使用usermod命令# 锁定账户 usermod -L username # 解锁账户 usermod -U username两种方法的区别在于passwd -l会在密码前添加!!usermod -L会添加单个!两种方法都禁止密码认证但可能允许其他认证方式如SSH密钥3.2 强制用户下线的正确姿势当需要立即终止可疑会话时# 查找用户会话 who # 终止特定终端会话 pkill -9 -t pts/1 # 终止用户所有进程 pkill -9 -u username注意强制下线后应立即锁定账户防止攻击者重新登录。3.3 账户过期策略设置# 设置账户过期日期 usermod -e 2024-12-31 username # 设置密码过期策略 chage -M 90 -W 7 username查看账户过期信息chage -l username4. 高级安全加固技巧4.1 密码策略强化通过编辑/etc/login.defs文件设置全局策略PASS_MAX_DAYS 90 PASS_MIN_DAYS 1 PASS_WARN_AGE 7安装libpam-pwquality模块增强密码复杂度apt install libpam-pwquality配置/etc/security/pwquality.confminlen 12 dcredit -1 ucredit -1 ocredit -1 lcredit -14.2 监控用户变更创建监控脚本记录用户账户变更#!/bin/bash MD5$(md5sum /etc/passwd /etc/shadow | md5sum | cut -d -f1) if [ $MD5 ! $(cat /var/log/userdb.md5) ]; then echo [$(date)] User database changed /var/log/user_changes.log diff -u /var/log/userdb.backup /etc/passwd /var/log/user_changes.log md5sum /etc/passwd /etc/shadow | md5sum /var/log/userdb.md5 cp /etc/passwd /var/log/userdb.backup fi设置cron任务每小时运行0 * * * * root /usr/local/bin/monitor_users.sh4.3 使用SSH限制策略编辑/etc/ssh/sshd_config增加限制AllowUsers ubuntu admin DenyUsers test guest PasswordAuthentication no PermitRootLogin no在应急响应中我曾遇到攻击者通过暴力破解获得了一个普通用户权限但由于我们实施了上述SSH限制策略和强密码策略成功将损失控制在最小范围。