在Linux系统中,shadow通常指shadow-utils工具包,它是系统用户认证和密码管理的核心组件,包含了passwd、chage、usermod等关键命令,用于管理用户密码、密码过期策略及账号状态,不同Linux发行版的包管理器不同,安装方法略有差异,以下将详细介绍主流发行版的安装步骤、核心工具使用、配置文件解析及安全注意事项。
不同Linux发行版的安装方法
shadow-utils包在不同发行版中的名称和安装命令存在差异,以下是常见发行版的安装方式:
发行版系列 | 包名 | 安装命令 | 更新命令 | 卸载命令 |
---|---|---|---|---|
Debian/Ubuntu | shadow-utils | sudo apt install shadow-utils |
sudo apt update && sudo apt upgrade |
sudo apt remove shadow-utils |
CentOS/RHEL 7+ | shadow-utils | sudo yum install shadow-utils |
sudo yum update shadow-utils |
sudo yum remove shadow-utils |
CentOS/RHEL 6 | shadow | sudo yum install shadow |
sudo yum update shadow |
sudo yum remove shadow |
Arch Linux | shadow | sudo pacman -S shadow |
sudo pacman -Syu |
sudo pacman -R shadow |
openSUSE | shadow | sudo zypper install shadow |
sudo zypper update shadow |
sudo zypper remove shadow |
安装步骤示例(以Ubuntu为例):
- 更新包列表:
sudo apt update
- 安装shadow-utils:
sudo apt install shadow-utils
- 验证安装:
dpkg -l | grep shadow-utils
(若显示ii shadow-utils
则安装成功)或which passwd
(确认passwd命令路径)。
安装后核心工具使用
shadow-utils安装后,可通过以下工具管理用户密码和认证策略:
passwd:修改用户密码
- 普通用户修改自己的密码:
passwd
(需输入当前密码和新密码)。 - root用户修改其他用户密码:
sudo passwd username
(无需原密码,直接设置新密码)。 - 锁定/解锁用户密码:
- 锁定:
sudo passwd -l username
(密码前加,无法登录)。 - 解锁:
sudo passwd -u username
(移除,恢复登录权限)。
- 锁定:
chage:管理密码过期策略
- 查看用户密码策略:
sudo chage -l username
(显示密码最后修改时间、过期时间、警告天数等)。 - 设置密码有效期:
sudo chage -M 90 username
(密码90天后过期)。 - 设置密码过期警告天数:
sudo chage -W 7 username
(过期前7天开始警告)。 - 强制下次登录修改密码:
sudo chage -d 0 username
(用户下次登录需立即修改密码)。
usermod:修改用户属性
- 修改用户密码过期时间:
sudo usermod -e 2023-12-31 username
(账号于2023年12月31日失效)。 - 添加用户附加组:
sudo usermod -aG sudo username
(将用户加入sudo组,获得管理员权限)。
chpasswd:批量修改密码
通过文件批量设置用户密码(格式:username:password
),
echo "user1:Pass123! user2:Secure456#" | sudo chpasswd
关键配置文件解析
shadow-utils的行为由两个核心配置文件控制:/etc/login.defs
和/etc/shadow
。
/etc/login.defs:全局认证策略
该文件定义了系统默认的密码和账号管理规则,关键参数包括:
PASS_MAX_DAYS 90
:密码最大有效期(90天)。PASS_MIN_LEN 8
:密码最小长度(8位)。PASS_WARN_AGE 7
:密码过期前警告天数(7天)。UID_MIN 1000
:普通用户最小UID(1000,低于此值为系统用户)。
修改示例:sudo vim /etc/login.defs
,修改PASS_MAX_DAYS
为180后保存,新创建的用户将继承180天的密码有效期。
/etc/shadow:用户密码加密信息
该文件存储每个用户的密码哈希及过期策略,仅root可读写,每行格式为:username:password:last_change:min_age:max_age:warn_days:inactive_date:expire_date:flag
- password:加密后的密码(空表示无密码,表示锁定,表示需首次登录设置密码)。
- last_change:密码最后修改时间(自1970年1月1日起的天数)。
- max_age:密码有效期(同
PASS_MAX_DAYS
,-1表示永不过期)。 - inactive_date:密码过期后账号未登录的宽限天数(-1表示禁用宽限)。
- expire_date:账号失效时间(自1970年1月1日起的天数)。
示例行:root:$6$xyz...::0:99999:7:::
(root密码使用SHA-512加密,最大有效期99999天,警告期7天)。
安全注意事项
- 定期更新shadow-utils:通过包管理器安装安全补丁(如
sudo apt upgrade
或sudo yum update
),避免密码加密算法漏洞。 - 设置强密码策略:在
/etc/login.defs
中增加PASS_MIN_LEN
(建议≥12),并配合PAM模块(如pam_pwquality
)检查密码复杂度。 - 审计密码过期情况:定期检查即将过期的用户:
sudo awk -F: '($8 != "" && $8 < (systime()/86400 + 30)) {print $1}' /etc/shadow
。 - 备份关键配置:修改
/etc/shadow
或/etc/login.defs
前,先备份:sudo cp /etc/shadow /etc/shadow.bak
。
常见问题解决
-
安装时提示“依赖不足”
原因:系统未更新包列表或缺少依赖库。
解决:- Debian/Ubuntu:
sudo apt update && sudo apt install -f
(自动修复依赖)。 - CentOS/RHEL:
sudo yum makecache && sudo yum install shadow-utils --setopt=tsflags=test
(临时跳过依赖检查测试)。
- Debian/Ubuntu:
-
普通用户无法使用passwd修改密码
原因:PAM认证模块配置错误或用户账号被锁定。
解决:- 检查
/etc/shadow
中用户密码字段是否为或(锁定状态)。 - 检查PAM配置文件
/etc/pam.d/passwd
,确保包含pam_unix.so
模块:sudo grep "pam_unix.so" /etc/pam.d/passwd
- 检查
FAQs
如何批量查看所有用户的密码过期时间?
答:使用chage
命令结合awk
或for
循环遍历/etc/passwd
中的用户列表。
for user in $(cut -d: -f1 /etc/passwd); do echo "用户: $user"; sudo chage -l $user | grep "密码过期"; done
或使用awk
直接解析/etc/shadow
:
sudo awk -F: '{print $1, "密码过期时间:", ($9 == "" ? "永不过期" : strftime("%Y-%m-%d", $8*86400))}' /etc/shadow
忘记root密码时,能否通过shadow-utils重置?
答:可以,需通过GRUB引导进入单用户模式重置密码(适用于本地物理机或虚拟机):
- 重启系统,在GRUB引导界面按
e
进入编辑模式。 - 找到
linux
或linuxefi
行,在末尾添加init=/bin/bash
(禁用系统初始化进程,直接进入bash)。 - 按Ctrl+X启动,进入root权限的bash环境。
- 挂载根分区为读写模式(若未自动挂载):
mount -o remount,rw /
。 - 修改root密码:
passwd
,输入新密码两次。 - 更新
/etc/shadow
中的最后修改时间(可选):sudo chage -d 0 root
(强制下次登录修改密码)。 - 重启系统:
exec /sbin/init
或reboot
。
注意:云服务器(如AWS、阿里云)需通过控制台重置密码,GRUB修改可能被安全机制阻止。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/25853.html