Linux修改用户密码的常见方法

发布时间 - 2025-09-03 00:00:00    点击率:
修改Linux用户密码的核心命令是passwd。普通用户执行passwd可修改自身密码,系统会验证原密码并要求输入两次新密码;若密码符合PAM策略要求,则修改成功。root用户可使用passwd [用户名]为其他用户重置密码,无需旧密码。忘记root密码时,可通过GRUB引导时添加init=/bin/bash或rd.break enforcing=0进入救援模式,挂载根文件系统为读写后执行passwd root重置密码,若禁用SELinux需创建/.autorelabel文件以确保安全上下文正确。普通用户应设置强密码,避免使用易猜信息,密码需满足长度、复杂性、非字典词等PAM策略要求。系统管理员可使用chage -d 0 [用户名]强制用户首次登录修改密码,并通过脚本结合passwd --stdin实现批量密码设置,但需注意密码泄露风险。密码策略由/etc/pam.d/system-auth或common-password中的pam_pwquality.so模块控制,可通过调整minlen、lcredit、ucredit、dcredit、ocredit等参数自定义规则,修改前应备份配置文件以防锁定系统。

在Linux系统中,修改用户密码的核心工具是

passwd
命令。无论是普通用户修改自己的密码,还是root用户为其他用户甚至自己重置密码,都离不开它。理解这个命令的用法和背后的机制,能让你在管理Linux用户账户时游刃有余。

passwd
命令是Linux下修改用户密码最直接且常用的方法。

要修改当前登录用户的密码,只需在终端输入:

passwd

系统会提示你输入当前密码,然后两次输入新密码。如果当前密码正确,且新密码符合系统的复杂性要求,密码就会被成功更改。

如果你是root用户,你可以为任何用户修改密码,无需知道该用户的旧密码。只需输入:

passwd [用户名]

例如,要修改用户

john
的密码,作为root用户,你输入
passwd john
,然后系统会直接提示你输入两次新密码。

忘记root密码怎么办?Linux系统救援模式下的重置策略

这大概是每个Linux管理员都可能遇到的“惊魂一刻”。我记得有一次,就是因为手滑输错了几次密码,直接把自己锁在root外面,那种感觉真是又沮丧又刺激。好在Linux提供了救援模式(或单用户模式)来解决这个问题。

大致的思路是:在系统启动时,通过修改GRUB引导参数,让系统以root权限直接进入一个shell环境,这样我们就可以在不验证密码的情况下,重置root密码。

具体步骤通常是这样:

  1. 重启系统:在系统启动时,当GRUB引导菜单出现时,迅速按下
    e
    键(编辑模式)。
  2. 修改内核参数:找到以
    linux
    linuxefi
    开头的那一行,在行的末尾添加
    init=/bin/bash
    (或者对于较新的系统,可能需要添加
    rd.break enforcing=0
    )。
    • init=/bin/bash
      :让系统启动后直接进入bash shell,而不是正常的init进程。
    • rd.break enforcing=0
      :在系统启动的早期阶段中断,并进入一个shell。
      enforcing=0
      是为了临时禁用SELinux,避免后续操作出现权限问题。
  3. 启动系统:按下
    Ctrl+x
    F10
    启动修改后的内核。
  4. 挂载根文件系统:如果使用的是
    rd.break
    ,系统会进入一个
    switch_root
    的shell。此时根文件系统通常是只读的,需要重新挂载为读写模式:
    mount -o remount,rw /sysroot
    chroot /sysroot

    如果使用的是

    init=/bin/bash
    ,根文件系统可能已经是读写模式,直接执行:

    mount -o remount,rw /
  5. 重置密码:现在,你就可以使用
    passwd
    命令来重置root用户的密码了:
    passwd root

    输入两次新密码。

  6. 更新SELinux上下文(如果之前禁用了SELinux):如果你的系统启用了SELinux,并且你修改了root密码,最好创建一个
    /.autorelabel
    文件,让系统在下次启动时自动重新标记文件系统:
    touch /.autorelabel
  7. 退出并重启
    exit
    reboot -f

    系统会正常重启,你就可以使用新密码登录root了。这个过程虽然有点技术性,但只要按部就班,成功率很高。

普通用户如何安全地修改自己的密码?有哪些注意事项?

其实,普通用户改密码这事儿,看似简单,里头也有些小门道。我个人经验是,别图省事儿用生日、电话号码之类的,真不安全。系统对密码强度的要求,往往是通过PAM(Pluggable Authentication Modules)模块来定义的。

当普通用户执行

passwd
命令时,系统会检查新密码是否符合以下要求:

  • 长度要求:通常有最小长度限制,比如8个字符。
  • 复杂性要求:可能要求包含大小写字母、数字和特殊字符。
  • 历史记录检查:有些系统会禁止使用最近用过的密码。
  • 字典检查:避免使用常见的单词或短语。

注意事项:

  1. 选择强密码:这真的是老生常谈,但却是最关键的。一个强密码应该是足够长(至少12-16位),包含多种字符类型,并且是随机的,不易被猜测或字典攻击。
  2. 避免重复使用:不要在不同系统或服务中使用相同的密码。
  3. 定期更换:虽然有些观点认为频繁更换密码会降低安全性(因为用户可能倾向于选择简单、容易记住的密码),但在高安全要求的环境中,定期更换密码仍然是一个好习惯。你可以使用
    chage -l [用户名]
    命令查看自己的密码过期信息。
  4. 私密性:不要将密码告诉任何人,也不要写在容易被发现的地方。

系统会通过提示来引导你设置一个符合要求的密码。如果你的密码不符合要求,系统会给出错误信息,你需要重新输入。

作为系统管理员,批量修改用户密码或强制用户首次登录修改密码的技巧

管着几十上百号用户的系统,挨个儿改密码那简直是噩梦。我以前就写过小脚本,批量给新入职的同事设个临时密码,然后强制他们第一次登录就改掉,省心又安全。

1. 强制用户首次登录修改密码: 这是个非常实用的功能,特别是在创建新用户或重置用户密码后。你可以使用

chage
命令来实现:

chage -d 0 [用户名]

这里的

-d 0
表示将用户的密码最后修改日期设置为
1970年1月1日
,这会使得系统认为该用户的密码已经过期。用户下次登录时,系统就会强制他修改密码。

2. 批量修改用户密码: 如果你需要为多个用户设置相同的临时密码(或者在特定场景下需要批量重置),可以通过脚本配合

passwd --stdin
命令来实现。
passwd --stdin
允许你通过标准输入提供密码,而不是交互式地输入。

例如,为

user1
user2
user3
设置临时密码
TempPass123

echo "TempPass123" | passwd --stdin user1
echo "TempPass123" | passwd --stdin user2
echo "TempPass123" | passwd --stdin user3

为了更安全,你可以结合

chage -d 0
,强制这些用户在第一次登录时修改这个临时密码。

一个简单的批量脚本示例:

#!/bin/bash

USERS=("user1" "user2" "user3")
TEMP_PASS="TempPass123!" # 确保临时密码也足够复杂

for user in "${USERS[@]}"; do
    echo "正在为用户 $user 设置临时密码并强制首次登录修改..."
    echo -e "$TEMP_PASS\n$TEMP_PASS" | passwd --stdin "$user"
    chage -d 0 "$user"
    if [ $? -eq 0 ]; then
        echo "用户 $user 密码设置成功,并已强制首次登录修改。"
    else
        echo "用户 $user 密码设置失败,请检查!"
    fi
done

注意: 使用

passwd --stdin
时,密码会出现在命令历史记录中(如果不是通过脚本执行),这存在安全风险。在实际生产环境中,请谨慎使用,并确保及时清理历史记录或使用更安全的密码管理工具。

为什么我的新密码不符合要求?Linux密码策略(PAM)的常见问题与调整

刚接触Linux那会儿,最头疼的就是密码总是“不合格”。系统老是抱怨我密码太简单,但又不说具体哪里不行,真是让人抓狂。后来才搞明白,是PAM模块在作祟。

Linux系统中的密码策略是由PAM(Pluggable Authentication Modules)框架控制的。具体来说,是PAM配置文件中的

pam_pwquality.so
(或旧版本中的
pam_cracklib.so
)模块在起作用。这些模块定义了密码的最小长度、所需字符类型(大小写字母、数字、特殊字符)的数量、密码历史检查等规则。

常见问题:

  • 密码太短
    minlen
    参数控制最小长度。
  • 缺乏特定字符
    lcredit
    (小写字母)、
    ucredit
    (大写字母)、
    dcredit
    (数字)、
    ocredit
    (其他字符/特殊字符)这些参数控制所需字符的“信用”值。负值表示必须包含,正值表示包含会增加密码强度。
  • 与用户名或旧密码相似
    difok
    reject_username
    等参数会阻止这种行为。

查看和调整密码策略: 密码策略的配置文件通常位于

/etc/pam.d/
目录下,其中
system-auth
passwd
是两个关键文件,它们通常通过软链接指向实际的配置文件(如CentOS/RHEL中的
/etc/pam.d/system-auth
,Debian/Ubuntu中的
/etc/pam.d/common-password
)。

你可以通过查看这些文件来了解当前的密码策略。例如:

grep -E 'minlen|lcredit|ucredit|dcredit|ocredit|difok|reject_username' /etc/pam.d/system-auth

或者在Debian/Ubuntu上:

grep -E 'minlen|lcredit|ucredit|dcredit|ocredit|difok|reject_username' /etc/pam.d/common-password

你会看到类似这样的行(以

pam_pwquality.so
为例):

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1

这表示:

  • minlen=8
    :密码最小长度为8。
  • lcredit=-1
    :必须包含至少一个小写字母。
  • ucredit=-1
    :必须包含至少一个大写字母。
  • dcredit=-1
    :必须包含至少一个数字。
  • ocredit=-1
    :必须包含至少一个特殊字符。

调整策略: 如果你需要修改这些策略(例如,降低复杂性要求以提高用户体验,或提高复杂性以增强安全性),你可以编辑这些PAM配置文件。但请务必小心! 错误的PAM配置可能导致用户无法登录系统,甚至root用户也无法登录。在修改前,务必备份相关文件。

例如,如果你想将最小长度改为6,并移除特殊字符的要求,你可以将

minlen=8
改为
minlen=6
,并将
ocredit=-1
移除或改为
ocredit=0

在调整密码策略时,需要在安全性和可用性之间找到一个平衡点。过于复杂的密码要求会让用户感到沮丧,可能导致他们将密码写下来或使用容易猜测的模式。而过于简单的密码则会带来安全隐患。


# linux  # word  # centos  # ubuntu  # 工具  # switch  # linux系统  # 为什么  # red  # bash  # break  # debian  # 你可以  # 首次  # 新密码  # 普通用户  # 自己的  # 的是  # 两次  # 文件系统  # 配置文件  # 如果你 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  高端建站三要素:定制模板、企业官网与响应式设计优化  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel如何实现数据库事务?(DB Facade示例)  魔毅自助建站系统:模板定制与SEO优化一键生成指南  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  如何快速搭建支持数据库操作的智能建站平台?  Laravel distinct去重查询_Laravel Eloquent去重方法  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  MySQL查询结果复制到新表的方法(更新、插入)  香港服务器部署网站为何提示未备案?  Laravel如何处理和验证JSON类型的数据库字段  php 三元运算符实例详细介绍  Laravel怎么为数据库表字段添加索引以优化查询  googleplay官方入口在哪里_Google Play官方商店快速入口指南  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  如何快速搭建安全的FTP站点?  如何快速搭建自助建站会员专属系统?  轻松掌握MySQL函数中的last_insert_id()  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  如何用好域名打造高点击率的自主建站?  如何快速搭建高效WAP手机网站吸引移动用户?  详解Huffman编码算法之Java实现  Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询  Android Socket接口实现即时通讯实例代码  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何用wdcp快速搭建高效网站?  如何获取PHP WAP自助建站系统源码?  微信小程序 wx.uploadFile无法上传解决办法  青岛网站建设如何选择本地服务器?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  高端建站如何打造兼具美学与转化的品牌官网?  详解Android中Activity的四大启动模式实验简述  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  佛山网站制作系统,佛山企业变更地址网上办理步骤?  海南网站制作公司有哪些,海口网是哪家的?  高防服务器租用首荐平台,企业级优惠套餐快速部署  javascript中对象的定义、使用以及对象和原型链操作小结  C++用Dijkstra(迪杰斯特拉)算法求最短路径  制作旅游网站html,怎样注册旅游网站?  简历在线制作网站免费版,如何创建个人简历?  如何快速登录WAP自助建站平台?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程