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. ......