passwd -l
锁定账户或修改/etc/passwd
权限限制普通用户操作。在Linux系统中,合理设置账户密码修改权限是系统安全的核心环节,不当的权限配置可能导致未授权用户篡改他人密码、提升权限或引发安全漏洞,以下从原理到实践详细解析权限设置方法,遵循最小权限原则(Principle of Least Privilege),确保系统安全可靠。
密码修改的核心机制
Linux密码管理依赖两个关键文件和命令:
-
/etc/shadow
文件
存储加密后的密码及有效期,权限默认为-rw-r----- root shadow
(仅root和shadow组可读)。
关键权限:- 用户修改自身密码时,需通过
passwd
命令间接写入此文件。 - 直接修改此文件需root权限。
- 用户修改自身密码时,需通过
-
passwd
命令
位于/usr/bin/passwd
,默认权限为-rwsr-xr-x root root
(s
表示SetUID权限)。- SetUID作用:普通用户执行时临时获得root权限,从而更新
/etc/shadow
。
- SetUID作用:普通用户执行时临时获得root权限,从而更新
权限设置场景与操作
场景1:允许普通用户修改自身密码(默认配置)
- 原理:
passwd
命令的SetUID权限(chmod u+s /usr/bin/passwd
)让用户临时以root身份写/etc/shadow
。 - 验证命令:
ls -l /usr/bin/passwd # 输出应含"-rwsr-xr-x"
场景2:禁止特定用户修改密码
方法1:撤销passwd命令执行权
chmod u-s /usr/bin/passwd # 移除SetUID(谨慎操作!将导致所有用户无法改密码)
方法2:限制单个用户
通过PAM(Pluggable Authentication Modules)控制:
- 编辑
/etc/pam.d/passwd
,添加:auth required pam_listfile.so item=user sense=deny file=/etc/nopasswdusers onerr=succeed
- 创建
/etc/nopasswdusers
,写入要禁止的用户名(如testuser
)。
场景3:允许管理员修改任意用户密码
- 使用
passwd
命令:
root用户可直接执行passwd username
修改任意密码。 - 通过sudo授权普通用户:
- 编辑sudoers文件:
visudo
- 添加以下配置之一:
%admin ALL=(ALL) /usr/bin/passwd # 允许admin组用户修改任意密码 user1 ALL=(ALL) /usr/bin/passwd # 允许user1修改任意密码 user2 ALL=(root) /usr/bin/passwd user3 # 仅允许user2修改user3的密码
- 编辑sudoers文件:
场景4:密码策略强化(高级)
-
设置密码强度:
编辑/etc/pam.d/common-password
,password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1
minlen=12
:最小长度12位ucredit=-1
:至少1个大写字母
-
密码有效期:
修改/etc/login.defs
:PASS_MAX_DAYS 90 # 密码最长有效期 PASS_MIN_DAYS 7 # 两次修改间隔 PASS_WARN_AGE 14 # 过期前提醒天数
安全最佳实践
- 最小权限原则:
- 仅必要用户拥有
sudo
密码修改权。 - 避免直接编辑
/etc/shadow
,使用passwd
或chage
命令。
- 仅必要用户拥有
- 定期审计权限:
# 检查SetUID程序: find / -perm -4000 -type f -exec ls -ld {} ; # 检查sudo权限分配: sudo -l
- 日志监控:
通过auditd
或syslog
跟踪passwd
命令使用情况:auditctl -w /usr/bin/passwd -p x -k password_change
常见问题解决
-
问题1:用户执行
passwd
提示”Authentication token manipulation error”
原因:/etc/shadow
权限错误或磁盘满。
解决:chmod 640 /etc/shadow # 恢复默认权限 chown root:shadow /etc/shadow
-
问题2:移除SetUID后普通用户无法改密码
恢复命令:chmod u+s /usr/bin/passwd # 重新添加SetUID位
权限场景 | 关键命令/配置 | 安全等级 |
---|---|---|
用户改自身密码 | 保持passwd 的SetUID位 |
高(默认) |
禁止用户改密码 | PAM限制或撤销SetUID | 按需配置 |
管理员改任意密码 | sudo 授权passwd 命令 |
必要 |
精细化控制 | sudoers指定用户+命令参数 | 推荐 |
权限配置需在安全与可用性间平衡,生产环境中,结合sudo授权与PAM策略是最佳方案,既满足操作需求,又避免过度赋权,定期审查权限分配和日志,是防御内部威胁的关键步骤。
引用说明基于Linux手册页(
man 5 shadow
、man 8 passwd
)、Linux PAM官方文档及Red Hat企业安全指南,具体实施前请参考发行版文档:Linux man-pages project | Red Hat Security Hardening。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/38319.html