在Linux系统中,设置账户期限是重要的安全管理措施,尤其适用于临时用户、项目成员或需要定期审查访问权限的场景,通过限制账户的有效期,可以避免长期闲置账户带来的安全风险,如未及时撤销的权限被滥用,本文将详细介绍Linux系统中设置账户期限的常用方法、命令参数及注意事项。
使用usermod
命令设置账户过期时间
usermod
是Linux中修改用户账户信息的常用工具,其-e
(或--expiredate
)选项可直接设置账户的过期日期,日期格式需为YYYY-MM-DD
,例如设置账户在2024年12月31日过期:
sudo usermod -e 2024-12-31 username
执行后,系统会更新/etc/shadow
文件中该用户记录的第8个字段(账户过期时间,自1970年1月1日以来的天数),若需查看设置是否生效,可通过以下命令确认:
chage -l username
在输出中,Account expires
字段会显示设置的过期日期,如Dec 31, 2024
,若需取消账户期限限制,可将日期设为空值:
sudo usermod -e "" username
使用chage
命令精细化账户期限管理
chage
(change age)命令专门用于管理用户密码和账户的过期策略,功能比usermod
更全面,除了设置账户过期时间,还可结合其他参数实现更精细的控制,其常用参数如下表所示:
参数 | 说明 | 示例 |
---|---|---|
-E |
设置账户过期日期 | sudo chage -E 2024-12-31 username |
-M |
设置密码有效期(天后) | sudo chage -M 90 username (密码90天后过期) |
-W |
设置密码过期前的警告天数 | sudo chage -W 7 username (密码过期前7天警告) |
-I |
设置密码过期后锁定账户的天数 | sudo chage -I 30 username (密码过期30天后锁定账户) |
-m |
设置密码最小使用天数 | sudo chage -m 1 username (密码至少使用1天后才能修改) |
-l |
列出当前账户的过期策略 | sudo chage -l username |
需设置账户testuser
在2024年12月31日过期,且密码90天后强制更新,过期前7天警告,可执行:
sudo chage -E 2024-12-31 -M 90 -W 7 testuser
通过chage
命令,可实现账户与密码策略的联动管理,例如密码过期后账户自动锁定(结合-I
参数),进一步提升安全性。
直接编辑/etc/shadow
文件(谨慎使用)
/etc/shadow
是存储用户密码和过期信息的核心文件,每行记录对应一个用户,格式为:username:password:last_change:min_age:max_age:warn inactive:expire_flag
,其中第8个字段(expire
)为账户过期时间,值为从1970年1月1日以来的天数,空值表示永不过期。
直接编辑风险较高,需备份文件并确保格式正确,操作步骤如下:
-
备份
/etc/shadow
文件:sudo cp /etc/shadow /etc/shadow.bak
-
使用
vipw
或vi
编辑文件(推荐vipw
,可避免文件锁定问题):sudo vipw
-
找到目标用户行,修改第8个字段的值,设置2024年12月31日过期(需通过
date
命令计算天数):date -d "2024-12-31" +%s # 获取时间戳 date -d "1970-01-01 1234567890 seconds" +%F # 将时间戳转换为日期(示例)
实际操作中,可通过
echo $(($(date -d "2024-12-31" +%s)/86400))
计算天数(86400为一天的秒数),然后将结果填入expire
字段。 -
保存文件后,验证设置是否生效(使用
chage -l
)。
注意事项
- 权限管理:
usermod
和chage
命令需要root权限(或通过sudo
执行),普通用户无法修改他人账户信息。 - 过期后处理:账户过期后,用户无法通过SSH或控制台登录,但root用户仍可登录并修改账户期限(如延长或取消)。
- 数据备份:直接编辑
/etc/shadow
前务必备份,避免格式错误导致用户无法登录。 - 批量操作:若需批量设置账户期限,可结合
for
循环或awk
脚本实现,for user in user1 user2 user3; do sudo chage -E 2024-12-31 $user; done
相关问答FAQs
Q1:账户过期后,用户的数据会被删除吗?
A:不会,账户过期仅限制用户登录权限,用户家目录(/home/username
)和邮件等数据会保留,若需清理数据,需手动删除(如sudo rm -rf /home/username
),建议在账户过期前通知用户备份重要文件。
Q2:如何批量查看系统中所有账户的过期时间?
A:可通过解析/etc/shadow
文件实现,结合awk
和date
命令:
sudo awk -F: '{if ($8 != "" && $8 != "0") print $1 " expires on: " strftime("%Y-%m-%d", $8*86400)}' /etc/shadow
该命令会列出所有设置了过期时间的账户及其过期日期,未设置或永不过期的账户将被忽略。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/22024.html