阅读:0

Linux passwd命令:修改用户密码

前面章节中介绍了添加用户的命令,但是新添加的用户如果不设定密码是不能够登录系统的,本节就来学习一下密码设置命令 passwd。

[root@localhost ~]#passwd [选项] 用户名

选项:
  • -S:査询用户密码的状态,也就是 /etc/shadow 文件中的内容。仅 root 用户可用;
  • -l:暂时锁定用户。仅 root 用户可用;
  • -u:解锁用户。仅 root 用户可用;
  • --stdin:可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用;

[root@localhost ~]#passwd
#passwd直接回车代表修改当前用户的密码

root用户修改密码

下面举几个例子,我们给新用户 lamp 设定密码,让 lamp 用户可以登录系统。

【例 1】

[root@localhost ~]# passwd lamp
更改用户lamp的密码。
新的密码:
<-输入新密码
无效的密码:WAY过短
<-有报错提示
无效的密码:过于简单
重新输入新的密码:
<-第二次输入密码
passwd:所有的身份证验证令牌已经成功更新。

注意,要想给其他用户设定密码,只有两种用户可行:一种是 root 用户;另一种是 root 通过 sudo 命令赋予权限的普通用户。也就是说,普通用户只能修改自己的密码,而不能设定其他用户的密码。

还要注意一件事,设定用户密码时一定要遵守"复杂性、易记忆性、时效性"的密码规范。简单来讲就是密码要大于 8 位,包含大写字母、小写字母、数字和特殊符号中的 3 种,并且容易记忆和定期更换。但是 root 用户在设定密码时却可以不遵守这些规则,比如我刚刚给 lamp 用户设定的密码是"123",系统虽然会提示密码过短和过于简单,但是依然可以设置成功。不过普通用户在修改自己的密码时,一定要遵守密码规范。当然,在生产服务器上,就算是 root 身份,在设定密码时也要严格遵守密码规范,因为只有好的密码规范才是服务器安全的基础。

普通用户修改密码

那么我们看看普通用户 lamp 是如何修改密码的。

【例 2】

[lamp@localhost ~]$ whoami
lamp
#先看看我的身份
[lamp@localhost ~]$ passwd lamp1
passwd:只有根用户才能指定用户名称
#尝试修改lamp用户的密码,系统提示普通用户不能修改其他用户的密码
[lamp@localhost ~]$ passwd lamp
passwd:只有根用户才能指定用户名称。

怎么修改自己的密码也报错呢?这里其实说得很清楚,要想指定用户名修改密码,只有管理员可以,哪怕 # 是修改自己的密码。那么修改自己的密码就只能像下面这样了:

[lamp@localhost ~]$ passwd
#使用passwd直接回车,就是修改自己的密码
更改用户lamp的密码。
为lamp更改STRESS密码。
(当前)UNIX密码:
#注意,普通用户需要先输入自己的密码
新的密码:
无效的密码:它基于字典单词 。
#好吧,又报错了,因为我输入的密码在字典中能够找到
新的密码:
#密码必须符合密码规范
重新输入新的密码:
passwd:所有的身份验证令牌已经成功更新。

大家发现了吗?对普通用户来讲,密码设定就要严格得多了。首先,只能使用"passwd"来修改自己的密码,而不能使用"passwd 用户名"的方式。不过,如果你是 root 用户,则建议用"passwd 用户名"的方式来修改密码,因为这样不容易搞混。其次,在修改密码之前,需要先输入旧密码。最后,设定密码一定要严格遵守密码规范。

查看用户密码状态

【例 3】

[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1 (密码已设置,使 用SHA512加密。)
#上面这行代码的意思依次是:用户名 密码 设定时间(2013*01-06) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1)

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

再次提醒一下,CentOS 6.3 加密方式已经从 MD5 加密更新到 SHA512 加密,我们不用了解具体的加密算法,只要知道这种加密算法更加可靠和先进就足够了。

锁定和解锁用户

使用 passwd 命令可以很方便地锁定和解锁某个用户,我们来试试。

【例 4】

[root@localhost ~]# passwd -I lamp
#锁定用户lamp的密码。
passwd:操作成功
#锁定用户
[root@localhost ~]# passwd -S lamp
lamp LK 2013-01-06 0 99999 7 -1 (密码已被锁定。)
#用"-S"选项査看状态,很清楚地提示密码已被锁定
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!! $6$ZTq7o/9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.i Yzh9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#其实锁定就是在加密密码之前加入了"!!"让密码失效而已

可以非常简单地实现用户的暂时锁定,这时 lamp 用户就不能登录系统了。那么解锁呢?也一样简单,我们来试试。

[root@localhost ~]# passwd -u lamp
解锁用户lamp的密码。
passwd:操作成功
#解锁用户
[root@localhost ~]# passwd -S lamp
lamp PS 2013-01-06 0 99999 7 -1 (密码已设置,使用SHA512加密。)
#锁定状态消失
[root@localhost ~]# grep "lamp" /etc/shadow
lamp: $6$ZTq7cV9o $lj07iZ0bzW.D1zBa9CsY43d04onskUCzjwiFMNt8PX4GXJoHX9zA1S C9.iYz h9LZA4fEM2lg92hM9w/p6NS50.:15711:0:99999:7:::
#密码前面的"!!"删除了

使用字符串作为用户的密码

这种做法主要是批量添加用户时,给所有的用户设定一个初始密码。但是需要注意的是,这样设定的密码会把密码明文保存在历史命令中,会有安全隐患。所以,如果使用了这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码(具体方法参考"chage"命令)。

【例 5】

[root@localhost ~]# echo "123" | passwd -stdin lamp
更改用户lamp的密码。
passwd:所有的身份验证令牌已成功更新。

命令很简单,调用管道符,让 echo 的输出作为 passwd 命令的输入,就可以把 lamp 用户的密码设定为"123"了。