- 命令格式
我们在上一小节中介绍了添加用户的命令,但是新添加的用户如果不没定密码是不能登录系统的,那么我们来学习一下密码设置命令passwd。
[root@localhost ~]#passwd [选项] 用户名
选项 | 说明 |
---|---|
-s | 查询用户密码状态,也就是/etc/shadow文件中的内容。仅root用户可用 |
-l | 暂时锁定用户,仅 root 用户可用 |
-u | 解锁用户,仅 root 用户可用 |
–stdin | 可以将通过管道符输出的数据作为用户的密码,主要在批量添加用户时使用 |
[root@localhost ~]#passwd
#passwd直接回车代表修改当前用户的密码
- root用户修改密码
下面举几个例子,我们给新用户lamp设定密码,让lamp用户可以登录系统。
[root@localhost ~]# passwd lamp
Changing password for user lamp. ←更改用户lamp的密码。
New password: ←新的密码
BAD PASSWORD: The password is shorter than 8 characters ←无效的密码,密码需要对于8个字符;
Retype new password:
passwd: all authentication tokens updated successfully. ←所有的身份验证令牌已经更新成功。
注意,要想给其他用户设定密码,只有两种用户可行:一种是 root 用户;另一种是root通过sudo命令赋予权限的普通用户。也就是说,普通用户只能修改自己的密码,而不能设定其他用户的密码。
还要注意一件事,设定用户密码时一定要遵守“复杂性、易记忆性、时效性”的密码规范。简单来讲就是密码要大于8位,包含大写字母、小写字母、数字和特殊符号中的3种,并且容易记忆和定期更换。但是root用户在设定密码时却可以不遵守这些规则,比如我刚刚给lamp用户设定的密码是“123”,系统虽然会提示密码过短和过于简单,但是依然可以设置成功。不过普通用户在修改自己的密码时,一定要遵守密码规范。当然,在生产服务器上,就算是root身份,在设定密码时也要严格遵守密码规范,因为只有好的密码规范才是服务器安全的基础。
- 普通用户修改密码
那么我们看看普通用户lamp是如何修改密码的。
[lamp@localhost ~]$ whoami
lamp
#先看看我的身份
[lamp@localhost ~]$ passwd lamp1
passwd: Only root can specify a user name.
#只有跟用户才能指定用户名称
[lamp@localhost ~]$ passwd lamp
passwd: Only root can specify a user name.
#只有跟用户才能指定用户名称
[lamp@localhost ~]$ passwd
Changing password for user lamp.
Changing password for lamp.
(current) UNIX password:
#put用户需要先输入自己的密码进行验证才能修改
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
大家发现了吗?对普通用户来讲,密码设定就要严格得多了。首先,只能使用“passwd”来修改自己的密码,而不能使用“passwd 用户名”的方式。不过,如果你是root用户,则建议用“passwd 用户名”的方式来修改密码,因为这样不容易搞混。其次,在修改密码之前,需要先输入旧密码。
- 查看用户密码状态
[root@localhost ~]# passwd -S lamp
lamp PS 2020-03-18 0 99999 7 -1 (Password set, SHA512 crypt.)
#上面这行代码的意思是:
#用户名 密码设定时间(2020-03-18) 密码修改间隔时间(0) 密码有效期(99999) 警告时间(7) 密码不失效(-1)
“-S”选项会显示出密码状态,这里的密码修改间隔时间、密码有效期、警告时间、密码宽限时间其实分别是/etc/shadow文件的第四、五、六、七个字段的内容。当然,passwd 命令是可以通过命令选项修改这几个字段的值的,不过我个人认为还是直接修改/etc/shadow文件简单一些。再次提醒一下,CentOS 6.3的加密方式已经从MD5加密更新到SHA512加密,我们不用了解具体的加密算法,只要知道这种加密算法更加可靠和先进就足够了。
- 锁定和解锁用户
使用passwd命令可以很方便地锁定和解锁某个用户,我们来试试。
[root@localhost ~]# passwd -l lamp
Locking password for user lamp.
passwd: Success
#锁定用户
[root@localhost ~]# passwd -S lamp
lamp LK 2020-03-18 0 99999 7 -1 (Password locked.)
#用“-S”选项查看状态,很清楚的提示密码已被锁定
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:!!$6$p8pgSL7s$4VlSHi5MlMNqwul8HcCQ05WcYN3AhjWIrto4GHhzA4gYsQH.7OEBjSsH5Po5KOrnU.ligvKxNv8K0oz9Fn0uM/:18339:0:99999:7:::
#其实锁定就是在加密密码之前加入了“!!”,让密码失效而已
可以非常简单的实现用户的暂时锁定,这时lamp用户就不能登录系统了。那么解锁呢?也一样简单,我们来试试。
[root@localhost ~]# passwd -u lamp
Unlocking password for user lamp.
passwd: Success
#解锁用户
[root@localhost ~]# passwd -S lamp
lamp PS 2020-03-18 0 99999 7 -1 (Password set, SHA512 crypt.)
#锁定状态消失
[root@localhost ~]# grep "lamp" /etc/shadow
lamp:$6$p8pgSL7s$4VlSHi5MlMNqwul8HcCQ05WcYN3AhjWIrto4GHhzA4gYsQH.7OEBjSsH5Po5KOrnU.ligvKxNv8K0oz9Fn0uM/:18339:0:99999:7:::
#密码前面的"!!"删除了
- 使用字符串作为用户的密码
这种做法主要是在批量添加用户时,给所有的用户设定个初始密码。但是需要注意的是,这样设定这样设定的密码会把密码明文保存在历史命令中,会有安全隐患。所以,如果使用了这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码(具体方法参考“chage”命令)。
[root@localhost ~]# echo "123" | passwd --stdin lamp
Changing password for user lamp.
passwd: all authentication tokens updated successfully.
命令很简单,调用管道符,让echo的输出作为passwd命令的输入,就可以把lamp 用户的密码设定为“123”了。