8.10 Linux passwd命令:修改用户密码

  • 用户管理的一项重要内容是用户口令的管理。useradd 命令命令创建新用户时,并没有设定用户密码,所以被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。 所以需要使用 passwd 密码配置和修改命令。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。passwd 命令的基本格式如下:
[root@CncLucZK ~]#passwd [选项] 用户名
  • 选项:

    • -S:查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用;
    • -l:暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”,使密码失效。仅 root 用户可用;
    • -u:解锁用户,和 -l 选项相对应,也是只能 root 用户使用;
    • –stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;
    • -f 强迫用户下次登录时修改口令。
    • -n 天数:设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段;
    • -x 天数:设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段;
    • -w 天数:设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段;
    • -d 使账号无口令。
    • -i 日期:设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段。
  • 例如:查看之前zk用户的密码状态

[root@CncLucZK /]# passwd -S zk
zk PS 2022-10-14 0 99999 7 -1 (Password set, SHA512 crypt.)
#上面这行代码的意思依次是:用户名 密码 设定时间(2022-10-14) 密码修改间隔时间(0)
密码有效期(99999) 警告时间(7) 密码不失效(-1),密码已使用

"-S"选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是 /etc/shadow 文件的第四、五、六、七个字段的内容。 当然,passwd 命令是可以通过命令选项修改这几个字段的值的,例如:

  • 为用户指定空口令时,执行下列形式的命令:
[root@CncLucZK /]# passwd -d zk
  • 此命令将用户 zk的口令删除,这样用户zk下一次登录时,系统就不再允许该用户登录了。
#修改  u-dev1的密码,使其具有 365天变更、30 天密码失效
[root@CncLucZK /]# passwd -x365 -i 30 u-dev1
Adjusting aging data for user u-dev1.
passwd: Success
[root@CncLucZK /]# passwd -S  u-dev1
u-dev1 PS 2022-10-14 0 365 7 30 (Password set, SHA512 crypt.)
#直接修改 /etc/shadow 文件简单一些。

这里显示 SHA512 为密码加密方式,CentOS 6.3 加密方式已经从 MD5 加密更新到 SHA512 加密,这种加密算法更加可靠和先进就足够了。

#锁定 u-dev1 用户
[root@CncLucZK /]# passwd -l  u-dev1
Locking password for user u-dev1.
passwd: Success
#用"-S"选项査看状态,很清楚地提示密码已被锁定
[root@CncLucZK /]# passwd -S  u-dev1
u-dev1 LK 2022-10-14 0 99999 7 -1 (Password locked.)
[root@CncLucZK /]# grep 'u-dev1' /etc/shadow
u-dev1:!!$6$hqCK60I/e5joUOx8$Jfeccxf.pi9lWtLHO/.MSZ70FELRYsvEYb1f98I8EYnsigVZ/cvSHUOOubotg/WQ4gVPqnE69ZgSS8vjWxGrv1:19279:0:99999:7:::
#可以看到,锁定其实就是在加密密码之前加入了"!!",让密码失效而已
#暂时锁定 u-dev1 用户后,此用户就不能登录系统了.解锁使用如下命令
#解锁 u-dev1 用户
[root@CncLucZK /]# passwd -u u-dev1
Unlocking password for user u-dev1.
passwd: Success
[root@CncLucZK /]# passwd -S  u-dev1
u-dev1 PS 2022-10-14 0 99999 7 -1 (Password set, SHA512 crypt.)
#可以看到,锁定状态消失
[root@CncLucZK /]# grep 'u-dev1' /etc/shadow
u-dev1:$6$hqCK60I/e5joUOx8$Jfeccxf.pi9lWtLHO/.MSZ70FELRYsvEYb1f98I8EYnsigVZ/cvSHUOOubotg/WQ4gVPqnE69ZgSS8vjWxGrv1:19279:0:99999:7:::
#密码前面的 "!!" 删除了
#调用管道符,给 zk 用户设置密码 "123456"
[root@CncLucZK /]# echo '123456' |passwd --stdin zk
Changing password for user zk.
passwd: all authentication tokens updated successfully.

为了方便系统管理,passwd 命令提供了 --stdin 选项,用于批量给用户设置初始密码。

使用此方式批量给用户设置初始密码,当然好处就是方便快捷,但需要注意的是,这样设定的密码会把密码明文保存在历史命令中,如果系统被攻破,别人可以在 /root/.bash_history 中找到设置密码的这个命令,存在安全隐患。

因此,如果使用这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码(具体方法参考 “chage” 命令)。

注意,并非所有 Linux 发行版都支持使用此选项,使用之前可以使用 man passwd 命令确认当前系统是否支持。

  • 我们使用 root 账户修改 u-dev1普通用户的密码,可以使用如下命令:
[root@CncLucZK ~]# passwd u-dev1
Changing password for user u-dev1.
New password:           #直接输入新的口令,但屏幕不会有任何反应1234abcd
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
#口令太简单或过短的错误!这里只是警告信息,输入的密码依旧能用
Retype new password:    #再次验证输入的密码,再输入一次即可1234abcd
passwd: all authentication tokens updated successfully. #提示修改密码成功#正确设置后密码后显示结果:密码要大于8位
[root@CncLucZK /]# passwd u-dev1
Changing password for user u-dev1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
  • 当然,也可以使用 passwd 命令修改当前系统已登录用户的密码,但要注意的是,需省略掉 “选项” 和 “用户名”。例如,我们登陆 u-dev1用户,并使用 passwd 命令修改 u-dev1 的登陆密码,执行过程如下:

  • 登陆 u-dev1用户是用Xshell远程连接工具新建会话,输入之前新建的用户账户密码进行登陆,而非用命令su - u-dev1切换,因为这样切换过去的账户,它的登陆信息还是切换之前的账户。

  • 输入用户名点击确定

  • 接下来输入密码即可进行登陆
[u-dev1@CncLucZK ~]$ passwd
Changing password for user u-dev1.
Current password:                                           #这里输入原有的密码
New password:                                               #这里输入新口令
BAD PASSWORD: it is WAY too short                           #口令检验不通过,请再想个新口令
BAD PASSWORD: The password is the same as the old one       #密码相同不通过
New password:                                               #这里输入新口令
Retype new password:                                        #初次通过口令验证再重复这个口令的输入
passwd: all authentication tokens updated successfully.     #成功修改用户密码。输错密码有次数限制。

普通用户只能使用 passwd 命令修改自己的密码,而不能修改其他用户的密码。

可以看到,与使用 root 账户修改普通用户的密码不同,普通用户passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。不仅如此,此种修改方式对密码的复杂度有严格的要求,新密码太短(最好8位长的口令)、太简单,新旧密码相同都会被系统检测出来并禁止用户使用。

很多Linux 发行版为了系统安装,都使用了 PAM 模块进行密码的检验,设置密码太短、与用户名相同、是常见字符串等,都会被 PAM 模块检查出来,从而禁止用户使用此类密码。

而使用 root 用户,无论是修改普通用户的密码,还是修改自己的密码,都可以不遵守 PAM 模块设定的规则,就比如我刚刚给 u-dev1用户设定的密码是 “123456”,系统虽然会提示密码过于简单,但依然可以设置成功。当然,在实际应用中,就算是 root 身份,在设定密码时也要严格遵守密码规范,因为只有好的密码规范才是服务器安全的基础。

参考文献:
Linux passwd命令:修改用户密码
Linux 用户和用户组管理

下一篇:Linux学习-27-usermod、chage、userdel和id等用户信息相关命令

Linux学习-26-passwd命令:修改用户密码相关推荐

  1. linux下passwd命令修改用户密码

    passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码:请看下面的例子: [root@localhost ~]# passwd 注:没有加任何用户,我是用root用户来执行的passwd ...

  2. 【Linux】通过 Shell 脚本修改用户密码

    1. Linux 中修改用户密码   Linux 中要修改一个用户的密码通常是使用 passwd 命令来完成,命令格式如下. #一般使用格式 passwd [username] [注]:若其后不加任何 ...

  3. linux修改密码最短生存时间,Linux基础命令---修改用户密码

    passwd 更改用户密码,超级用户可以修改所有用户密码,普通用户只能修改自己的密码.这个任务是通过调用LinuxPAM和LibuserAPI来完成的.本质上,它使用LinuxPAM将自己初始化为一个 ...

  4. passwd命令修改密码_Linux passwd命令–更改用户密码

    passwd命令修改密码 介绍 (Introduction) Linux passwd command changes a user's password. A user can only chang ...

  5. linux用usermod修改密码,Linux笔记(usermod命令,用户密码管理,mkpasswd)

    一.usermod命令 usermod 更改用户属性的命令 -u  +号码  +用户名        更改uid -g  +号码/组名  +用户名      更改gid -d  +/路径   +用户名 ...

  6. Linux学习:shell 命令(用户管理)

    (1)创建用户:useradd 语法:sudo useradd -s /bin/bash -g itcast -d /home/itcast -m itcast 参数: -s :指定 shell -g ...

  7. linux下执行shell修改用户密码,[转] 关于linux下通过shell命令(自动)修改用户密码...

    本文章总结了如何手动.自动修改本地用户密码及远程机器的用户密码.对做自动化测试提供了自动修改用户密码的原理及方法. 修改本地用户密码: 1.交互配置本地用户: 以root用户: passwd Chan ...

  8. 在linux下修改用户密码

    修改本地用户密码: 1.交互配置本地用户: 以root用户: passwd <username> Changing password for user dewang. New UNIX p ...

  9. linux 修改超级权限密码,linux 修改用户密码

    本文章总结了如何手动.自动修改本地用户密码及远程机器的用户密码.对做自动化测试提供了自动修改用户密码的原理及方法. 修改本地用户密码: 1.交互配置本地用户: 以root用户: passwd Chan ...

  10. linux下修改组的密码,Linux用户和组的操作(八) 修改用户密码 passwd

    使用passwd(password简写)命令修改用户密码. passwd命令行选项: 选项 含义 -l 锁住用户的密码,在/etc/shadow第2字段前增加! -u 解锁用户的密码,去掉/etc/s ...

最新文章

  1. The Elements of C# Style -Naming
  2. MySQL Replication--多线程复制MTS
  3. 20155303 2016-2017-2 《Java程序设计》第四周学习总结
  4. 2017.9.4 黑白棋 失败总结
  5. java编写计算器实现cancel_用Java编写的简易计算器
  6. 嵌入式软件可靠性设计
  7. 计算机三级网络技术-----DHCP报文分析
  8. 记一篇IT培训日记050-嗯嗯,差距不大
  9. 2020年如何运营抖音、快手、视频号3个短视频平台
  10. 钉钉申请发起后台提现接口
  11. 磁盘满了,却找不到大文件
  12. Taylor公式和插值多项式
  13. 系统非功能需求(质量属性)
  14. 学习类APP如何正确激发孩子的学习兴趣和提升数学思维能力?
  15. 【R语言科研绘图】--- 柱状图
  16. MongoDB 分片总结
  17. Arduino使用水位传感器
  18. python是否高送转预测股票_什么样条件股票具备高送转呢一般什么时候送转
  19. PHP笔记:Cookie和Session应用
  20. 5个理由,你值得拥有电子实验记录本(ELN)

热门文章

  1. 在notepad++中运行scala程序
  2. matlab图像增强实验总结,MatLab图像增强实验
  3. 「轮子」是什么东西?创造它有什么意义?
  4. Java垃圾回收的安全点和安全区域
  5. Ubuntu16.04下双显卡电脑安装显卡驱动
  6. 电脑语音设置修复计算机,win10系统麦克风正确设置的恢复办法
  7. 流利阅读12.30 The 20 best Marvel films – ranked!
  8. HTML导航条的制作
  9. 0点睡觉很会养生”苏宁高管的这话让程序员很憋屈
  10. 使用属性的setter方法注入