Linux密码修改权限怎么设置
- Linux
- 2025-06-24
- 2672
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。
 
  
			