7.6 passwd:修改用户密码

7.6 passwd:修改用户密码

    passwd命令可以修改用户密码及密码过期时间等内容,是工作中很常用的命令。普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或修改所有用户的密码。
 
-k        为密码已经过期的用户更新有效期
-l        锁定用户,被锁定的用户将不能登录。仅root用户有权使用该选项
-stdin    从标准输入读取密码字符串深
-u        解除对用户的锁定。仅root用户有权使用该选项
-d        删除用户的密码,使密码为空。仅root用户有权使用该选项
-e        使用户密码立即过期,将在用户下次登录时强制要求用户修改密码。仅root用户有权使用该选项
-n        设置修改密码的最短天数。仅root用户有权使用该选项
-x        设置修改密码的最长天数。仅root用户有权使用该选项
-w        设置用户在密码过期前收到警告信息的天数。仅root用户有权使用该选项
-i        设置密码过期多少天后禁用账户。仅root用户有权使用该选项
-S        显示用户密码相关的简单描述。仅root用户有权使用该选项
 
除了上述说明,还要强调以下两点。
    root用户可以修改任何用户的密码,普通用户只能修改自身的密码。
    root用户修改密码时,如果不符合系统密码规则,则给出警告信息,但密码设置仍然生效。普通用户修改密码时,如果使用弱密码,则给出告警信息,且修改无效。
 
修改用户密码的例子。
[root@cs6 ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@cs6 ~]# passwd lewen
Changing password for user lewen.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@cs6 ~]# su lewen
[lewen@cs6 root]$ passwd
Changing password for user lewen.
Changing password for lewen.
(current) UNIX password:
New password:
BAD PASSWORD: it is too simplistic/systematic    #<==如果密码太短则不允许设置(root用户修改密码只是警告)
New password:
BAD PASSWORD: it is too simplistic/systematic
New password:
 
显示账号密码信息的例子。
[root@cs6 ~]# passwd -S root
root PS 2019-05-11 0 99999 7 -1 (Password set, SHA512 crypt.)
 
一条命令设置密码(生产使用技巧)。
[root@cs6 ~]# echo '123456'|passwd --stdin lewen
Changing password for user lewen.
passwd: all authentication tokens updated successfully.
 
要求lewen用户7天内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天后禁止用户登录。
[root@cs6 ~]# passwd -n 7 -x 60 -w 10 -i 30 lewen
Adjusting aging data for user lewen.
passwd: Success
[root@cs6 ~]# passwd -S lewen
lewen PS 2019-05-11 7 60 10 30 (Password set, SHA512 crypt.)
[root@cs6 ~]# chage -l lewen
Last password change                    : May 11, 2019
Password expires                    : Jul 10, 2019
Password inactive                    : Aug 09, 2019
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

生产案例:批量创建10个用户stu01-stu10,并且设置8位随机密码

    范例7-15:批量创建10个用户stu01-stu10,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道来实现。
 
第一步:生成符合题意的10个用户名。
[root@cs6 ~]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10
第二步:使用tr命令将上述10个用户名竖行显示。
[root@cs6 ~]# echo stu{01..10}|tr " " "\n"            #或者用xargs -n 1
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10
第三步:在每一行的前面加上useradd命令,即可拼出添加用户的所有命令。
[root@cs6 ~]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1#g'
useradd stu01
useradd stu02
useradd stu03
useradd stu04
useradd stu05
useradd stu06
useradd stu07
useradd stu08
useradd stu09
useradd stu10
上面三步是完整的命令,第四步开始实际上是不同的命令,因此用分号分隔。
第四步:定义8位随机数变量。
[root@cs6 ~]# pass=$((RANDOM+88888888))
[root@cs6 ~]# echo $pass
88905344
第五步:以第一二步作为结果使用sed -r 's#(.*)#最终命令#g'。
[root@cs6 ~]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`">>/tmp/lewen.log#g'
useradd stu01;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu01;echo -e "stu01 `echo "$pass"`">>/tmp/lewen.log
useradd stu02;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu02;echo -e "stu02 `echo "$pass"`">>/tmp/lewen.log
useradd stu03;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu03;echo -e "stu03 `echo "$pass"`">>/tmp/lewen.log
useradd stu04;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu04;echo -e "stu04 `echo "$pass"`">>/tmp/lewen.log
useradd stu05;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu05;echo -e "stu05 `echo "$pass"`">>/tmp/lewen.log
useradd stu06;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu06;echo -e "stu06 `echo "$pass"`">>/tmp/lewen.log
useradd stu07;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu07;echo -e "stu07 `echo "$pass"`">>/tmp/lewen.log
useradd stu08;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu08;echo -e "stu08 `echo "$pass"`">>/tmp/lewen.log
useradd stu09;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu09;echo -e "stu09 `echo "$pass"`">>/tmp/lewen.log
useradd stu10;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin stu10;echo -e "stu10 `echo "$pass"`">>/tmp/lewen.log
[root@cs6 ~]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`">>/tmp/lewen.log#g'|bash
拼接后的命令拆解解析
 
useradd stu10;                        添加用户
pass=$((RANDOM+10000000));            密码随机数定义
echo "$pass"|passwd --stdin stul0;    非交互式设置密码
echo -e "stu10 `echo "$pass"`" >>/tmp/lewen.log 将密码生成到文件里并记录
第六步:将得出的10条语句通过管道交给bash命令来执行。
[root@cs6 ~]# echo stu{01..10}|tr " " "\n"|sed -r 's#(.*)#useradd \1;pass=$((RANDOM+88888888));echo "$pass"|passwd --stdin \1;echo -e "\1 `echo "$pass"`">>/tmp/lewen.log#g'|bash
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
Changing password for user stu01.
passwd: all authentication tokens updated successfully.
......

 

 
 
 
 
 
 
 
 
 
posted @ 2019-05-13 21:29  Fadewalk  阅读(2750)  评论(0编辑  收藏  举报