• Linux学习-26-passwd命令:修改用户密码


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

      • -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),密码已使用
    
    • 1
    • 2
    • 3
    • 4

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

    • 为用户指定空口令时,执行下列形式的命令:
    [root@CncLucZK /]# passwd -d zk
    
    • 1
    • 此命令将用户 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 文件简单一些。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这里显示 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.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    为了方便系统管理,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.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 当然,也可以使用 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.     #成功修改用户密码。输错密码有次数限制。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

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

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

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

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

    下一篇:Linux学习-27-usermod、chage、userdel和id等用户信息相关命令
  • 相关阅读:
    for循环遍历的`form表单组件`rules规则校验失效问题——下拉框选择之后还是报红---亲测有效
    汽车零部件行业困境及如何利用MES解决?
    qq录屏快捷键是什么?qq录屏声音设置
    2022-7-5 随机过程之条件期望及其性质 (三)
    html旅游网站设计与实现——绿色古典旅游景区 HTML+CSS+JavaScript
    OpenTracing总结
    阿里云配置https,配置SSL证书
    算法(一)
    docker-compose模板文件、命令的使用
    usb hub芯片GL850G创惟
  • 原文地址:https://blog.csdn.net/weixin_42045639/article/details/127785452