当前位置:首页 > Linux > 正文

Linux密码修改权限怎么设置

Linux中root用户可修改任意账户密码,普通用户仅能修改自身密码,管理员可通过passwd命令配置特定用户或组的密码修改权限,如使用 passwd -l锁定账户或修改 /etc/passwd权限限制普通用户操作。

在Linux系统中,合理设置账户密码修改权限是系统安全的核心环节,不当的权限配置可能导致未授权用户改动他人密码、提升权限或引发安全破绽,以下从原理到实践详细解析权限设置方法,遵循最小权限原则(Principle of Least Privilege),确保系统安全可靠。


密码修改的核心机制

Linux密码管理依赖两个关键文件和命令:

  1. /etc/shadow文件
    存储加密后的密码及有效期,权限默认为-rw-r----- root shadow(仅root和shadow组可读)。
    关键权限

    • 用户修改自身密码时,需通过passwd命令间接写入此文件。
    • 直接修改此文件需root权限。
  2. passwd命令
    位于/usr/bin/passwd,默认权限为-rwsr-xr-x root roots表示SetUID权限)。

    Linux密码修改权限怎么设置  第1张

    • SetUID作用:普通用户执行时临时获得root权限,从而更新/etc/shadow

权限设置场景与操作

场景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)控制:

  1. 编辑/etc/pam.d/passwd,添加:
    auth required pam_listfile.so item=user sense=deny file=/etc/nopasswdusers onerr=succeed
  2. 创建/etc/nopasswdusers,写入要禁止的用户名(如testuser)。

场景3:允许管理员修改任意用户密码

  • 使用passwd命令
    root用户可直接执行passwd username修改任意密码。
  • 通过sudo授权普通用户
    1. 编辑sudoers文件:visudo
    2. 添加以下配置之一:
      %admin ALL=(ALL) /usr/bin/passwd  # 允许admin组用户修改任意密码
      user1 ALL=(ALL) /usr/bin/passwd   # 允许user1修改任意密码
      user2 ALL=(root) /usr/bin/passwd user3  # 仅允许user2修改user3的密码

场景4:密码策略强化(高级)

  1. 设置密码强度
    编辑/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个大写字母
  2. 密码有效期
    修改/etc/login.defs

    PASS_MAX_DAYS 90   # 密码最长有效期
    PASS_MIN_DAYS 7    # 两次修改间隔
    PASS_WARN_AGE 14   # 过期前提醒天数

安全最佳实践

  1. 最小权限原则
    • 仅必要用户拥有sudo密码修改权。
    • 避免直接编辑/etc/shadow,使用passwdchage命令。
  2. 定期审计权限
    # 检查SetUID程序:
    find / -perm -4000 -type f -exec ls -ld {} ;
    # 检查sudo权限分配:
    sudo -l
  3. 日志监控
    通过auditdsyslog跟踪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 shadowman 8 passwd)、Linux PAM官方文档及Red Hat企业安全指南,具体实施前请参考发行版文档:Linux man-pages project | Red Hat Security Hardening。

0