命令说明

  passwd命令用户修改用户密码及其密码过期等设置,常用的命令。普通的用户和root用户都可以使用该命令,但是普通用户只能修改自己的密码,而root用户可以设置所有用户密码的权限。

注意:

  • 1、root用户可以修改所有用户的密码,而普通用户只能修改自己的密码
  • 2、root用户修改密码的时候,如果不符合系统的密码规则,则会给出警告信息,但是密码可以设置成功。但是普通用户设置弱密码,则会给出警告信息,但是密码设置无效。
语法格式

  passwd [option] [username]

常用参数
  • -l:锁定用户,被锁定的用户将不能登录【只有root才能使用】
  • -u:解锁该用户【只有root才能使用】
  • -k:为密码过期的用户更新有效期【只有root才能使用】
  • —stdin:从标准输出读取密码字符串
  • -d:删除用户的密码,使密码为空【只有root才能使用】
  • -e:使用户的密码立即过期,用户下次登录的时候强制要求用户输入密码【只有root才能使用】
  • -n:设置修改密码的最短天数【只有root才能使用】
  • -x:设置密码的最长天数【只有root才能使用】
  • -w:设置用户密码在过期前收到的警告信息天数【只有root才能使用】
  • -i:设置用户密码过期多少天后禁用该用户【只有root才能使用】
  • -S:显示用户密码的相关信息【只有root才能使用】
示例
1、设置root的密码
[root@localhost ~]# passwd 
Changing password for user root.
New password: #这里输入的是123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

2、通过root用户设置普通用户的密码
[root@localhost ~]# passwd skip
Changing password for user skip.
New password:  #这里输入的是123456
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully. #能成功

3、普通用户设置自己的密码
[skip@localhost root]$ su skip 
[skip@localhost root]$ passwd 
Changing password for user skip.
Changing password for skip.
(current) UNIX password: #输入原密码
New password:  #这里输入了67890
BAD PASSWORD: The password is shorter than 8 characters
New password: #123zxc,提示与旧密码太相似
BAD PASSWORD: The password is too similar to the old one
New password: #123456 #与旧密码相同
BAD PASSWORD: The password is the same as the old one
New password: #输入了qweasd123
Retype new password: 
passwd: all authentication tokens updated successfully.#设置成功

所以,系统对普通管理员的密码复杂程度要求很高啊!

4、查看账号密码的信息-S参数的使用
[skip@localhost root]$ passwd -S #普通管理员下查看,报如下信息
Only root can do that.
[root@localhost ~]# passwd -S skip #在root下查看
skip PS 2018-05-11 0 99999 7 -1 (Password set, SHA512 crypt.)

说明下:skip PS 2018-05-11 0 99999 7 -1 (Password set, SHA512 crypt.)
skip:第一个字段显示的用户名
PS:第二个字段显示密码状态(PS = 密码设置,LK = 密码锁定,NP = 无密码)
2018-05-11:第三个字段显示了上次修改密码的时间
0:第四个字段显示密码的最短修改天数
99999:第五个字段显示密码的最长修改天数
7:第六个字段显示密码过期前多少天通知用户
-1:第七个字段表示过期多少天后禁止用户登录

6、一条命令设置密码(常用)
[root@localhost ~]# echo "123456"|passwd --stdin skip
Changing password for user skip.
passwd: all authentication tokens updated successfully.


7、要求skip用户7天内不能修改密码,60天后必须设置密码,过期前10天通知用户,过期后30天禁止该用户登录
[root@localhost ~]# passwd -n 7 -x 60 -w 10 -i 30 skip
Adjusting aging data for user skip.
passwd: Success
[root@localhost ~]# passwd -S skip
skip PS 2018-05-11 7 60 10 30 (Password set, SHA512 crypt.)
[root@localhost ~]# chage -l skip
Last password change                    : May 12, 2018
Password expires                    : Jul 11, 2018
Password inactive                    : Aug 10, 2018
Account expires                        : never
Minimum number of days between password change        : 7
Maximum number of days between password change        : 60
Number of days of warning before password expires    : 10
批量生成用户和设置密码
说明:生成用户user01~user10,并设置10位随机密码,并且不能使用shell循环,只能使用Linux命令和管道

步骤:
1、生成user01~user10用户名
[root@localhost ~]# echo user{01..10}
user01 user02 user03 user04 user05 user06 user07 user08 user09 user10

2、使用tr将用户名竖起显示
[root@localhost ~]# echo user{01..10}|tr " " "\n"
user01
user02
user03
user04
user05
user06
user07
user08
user09
user10

3、每一行前面加上useradd命令
[root@localhost ~]# echo user{01..10}|tr " " "\n"|sed -r "s#(.*)#adduser \1#g"
adduser user01
adduser user02
adduser user03
adduser user04
adduser user05
adduser user06
adduser user07
adduser user08
adduser user09
adduser user10

4、生成随机密码8位数
[root@localhost ~]# pass=$((RANDOM+RANDOM+50000000))
[root@localhost ~]# echo $pass
50030149

5、将1,2两步作为结果使用sed -r "s#(.*)#命令#g"来生成10条语句

[root@localhost ~]# echo user{01..10}|tr " " "\n"|sed -r 's#(.*)#adduser \1;pass=$((RANDOM+RANDOM+50000000));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`" >> /tmp/adduser.log#g'
adduser user01;pass=$((RANDOM+RANDOM+50000000));echo "$pass"|passwd --stdin user01;echo -e "user01 `echo "$pass"`" >> /tmp/adduser.log
...
adduser user10;pass=$((RANDOM+RANDOM+50000000));echo "$pass"|passwd --stdin user10;echo -e "user10 `echo "$pass"`" >> /tmp/adduser.log


6、将得出的10条语句通过管道交给bash命令来执行
[root@localhost ~]# echo user{01..10}|tr " " "\n"|sed -r 's#(.*)#adduser \1;pass=$((RANDOM+RANDOM+50000000));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`" >> /tmp/adduser.log#g'|bash
Changing password for user user01.
passwd: all authentication tokens updated successfully.
...
passwd: all authentication tokens updated successfully.
Changing password for user user10.
passwd: all authentication tokens updated successfully.

#查看用户和密码
[root@localhost ~]# cat /tmp/adduser.log 
user01 50049181
user02 50029960
user03 50038575
user04 50043573
user05 50026665
user06 50021314
user07 50018526
user08 50007682
user09 50052999
user10 50054322