L42.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- groupdel和passwd

7.5 groupdel:删除用户组

7.5.1 命令详解

【命令星级】 ★★☆☆☆

【功能说明】

​ groupdel命令用户删除指定的用户组,此命令的使用频率极低,了解一下即可。

【语法格式】

groupdel [group]
groupdel [用户组]

说明:

​ 1)在groupdel命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

​ 2)groupdel不能删除还有用户归属的主用户组。

7.5.2 使用范例

​ **范例7-10:**删除用户组的例子。

[root@centos7 ~]# groupdel root	#删除root用户组失败,因为root用户还存在。
groupdel: cannot remove the primary group of user 'root'
[root@centos7 ~]# groupdel test1	#删除test1用户组成功。
[root@centos7 ~]# grep -w test1 /etc/group

7.6 passwd:修改用户密码

7.6.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ passwd命令可以修改用户密码及密码过期时间等内容,是工作中很常用的命令。普通用户和超级用户都可以运行passwd命令,但普通用户只能更改自身的用户密码,超级用户root则可以设置或修改所有用户的密码。

【语法格式】

passwd [options] [username]
passwd [选项] [用户名]

​ **说明:**在passwd命令以及后面的选项和用户名里,每个元素直接都至少要有一个空格。

【选项说明】

​ 表7-7针对该命令的参数选项进行了说明。

​ 表7-7 passwd命令的参数选项及说明

在这里插入图片描述
​ 除了上述说明,还要强调以下两点。

  • root用户可以修改任何用户的密码,普通用户只能修改自身的密码。
  • root用户修改密码时,如果不符合系统密码规则,则会给出警告信息,但密码设置仍然有效。而普通用户修改密码时,如果使用的时弱密码,则会给出告警信息,且修改无效。

7.6.2 使用范例

7.6.2.1 基础范例

​ **范例7-11:**修改用户密码的示例。

​ (1)修改自身用户密码

​ 当执行passwd不带任何参数和内容时,表示修改当前执行命令用户自身的密码。具体代码如下:

[root@centos7 ~]# passwd	#修改当前用户,root自身的密码。
Changing password for user root.
New password: 	#输入密码123456,系统不会输出用户输入的密码。
BAD PASSWORD: The password is shorter than 8 characters	#如果密码比较简单,则会给出警告信息,但不会阻止。
Retype new password: 	#再次输入密码123456。
passwd: all authentication tokens updated successfully.		#但还是设置成功了。

​ (2)设置及修改普通用户的密码

[root@centos7 ~]# useradd younggirl	#添加用户younggirl。
[root@centos7 ~]# passwd younggirl	#为younggirl用户添加密码。
Changing password for user younggirl.
New password: 	#输入密码123456。
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 	#再次输入密码123456。
passwd: all authentication tokens updated successfully.		#设置成功。
[younggirl@centos7 ~]$ passwd	#修改用户自身密码。
Changing password for user younggirl.
Changing password for younggirl.
(current) UNIX password: 	#先输入用户当前密码。
New password: 	#输入新密码。
BAD PASSWORD: The password is too similar to the old one	#如果密码太短则不允许设置(root用户修改密码只是警告)。
New password: 	#必须设置足够复杂的密码。
Retype new password: 	#重复设置。
passwd: all authentication tokens updated successfully.

​ **范例7-12:**显示账户密码信息的比例。

[younggirl@centos7 ~]$ passwd -S younggirl
Only root can do that.	#提示这个参数只能root执行。
[younggirl@centos7 ~]$ logout
[root@centos7 ~]# passwd -S younggirl
younggirl PS 2020-10-18 0 99999 7 -1 (Password set, SHA512 crypt.)

​ **范例7-13:**一条命令非人工交互设置密码(生产使用技巧)。

[root@centos7 ~]# echo "123456" | passwd --stdin younggirl	#--stdin参数能从标准输入中获取密码。
Changing password for user younggirl.
passwd: all authentication tokens updated successfully.

​ 提示:这个命令在工作中批量设置密码时很有用。

​ **范例7-14:**要求younggirl用户7天之内不能更改密码,60天以后必须修改密码。过期前10天通知用户,过期后30天禁止用户登录。

​ **解答:**这道题的目的是测试passwd多个参数的用法,读者了解一下即可。

[root@centos7 ~]# passwd -n 7 -x 60 -w 10 -i 30 younggirl	#参数的含义详见前文表14-13。
Adjusting aging data for user younggirl.
passwd: Success
[root@centos7 ~]# chage -l younggirl	#-i参数用于查看账户的信息。
Last password change					: Oct 18, 2020	#最后一次密码变化时间为2020-10-18。
Password expires					: Dec 17, 2020	#密码过期时间为60天,即从2020-10-18到2020-12-17.
Password inactive					: Jan 16, 2021	#密码停权时间,即密码过期30天之后停权,-i选项可控制该行。
Account expires						: never	#账号过期时间。
Minimum number of days between password change		: 7	#-n选项可控制该行。
Maximum number of days between password change		: 60	#-x选项可控制该行。
Number of days of warning before password expires	: 10	#-w选项可控制该行。

7.6.2.2 生产案例

​ **范例7-15:**批量创建10个用户stu01-stu10,并且设置8位随机密码,要求不能使用Shell的循环(例如:for、while等),只能用Linux命令及管道来实现。

​ 实现命令如下:

echo stu{
    
    01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g'
#注意是一行。

​ 命令解析

​ 第一步:生成符合题意的10个用户名。

[root@centos7 ~]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

​ 第二步:使用tr命令将上述10个用户名竖行显示。

[root@centos7 ~]# echo stu{01..10} |tr " " "\n"		#tr将管道输出中的空格替换为换行符。
stu01
stu02
stu03
stu04
stu05
stu06
stu07
stu08
stu09
stu10

​ 第三步:在每一行的前面加上useradd命令,即可拼出添加用户的所有命令。

[root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1#g'	#利用sed的后向引用知识,见第4章的sed命令。
useradd stu01
useradd stu02
useradd stu03
useradd stu04
useradd stu05
useradd stu06
useradd stu07
useradd stu08
useradd stu09
useradd stu10

​ 上面三步是完整的命令,第四步开始实际上是不同的命令,因为此用分号分割。

​ 第四步:定义8位随机数变量。

[root@centos7 ~]# pass=$((RANDOM+88888888))
[root@centos7 ~]# echo $pass
88891565

​ 第五步:以第一二步作为结果使用sed -r ‘s #(.*)#最终命令#g’。

[root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g'		#拼凑出10条命令语句。
useradd stu01;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu01; echo -e "stu01 `echo "$pass"`">>/tmp/neteagle.log
useradd stu02;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu02; echo -e "stu02 `echo "$pass"`">>/tmp/neteagle.log
useradd stu03;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu03; echo -e "stu03 `echo "$pass"`">>/tmp/neteagle.log
useradd stu04;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu04; echo -e "stu04 `echo "$pass"`">>/tmp/neteagle.log
useradd stu05;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu05; echo -e "stu05 `echo "$pass"`">>/tmp/neteagle.log
useradd stu06;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu06; echo -e "stu06 `echo "$pass"`">>/tmp/neteagle.log
useradd stu07;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu07; echo -e "stu07 `echo "$pass"`">>/tmp/neteagle.log
useradd stu08;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu08; echo -e "stu08 `echo "$pass"`">>/tmp/neteagle.log
useradd stu09;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu09; echo -e "stu09 `echo "$pass"`">>/tmp/neteagle.log
useradd stu10;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin stu10; echo -e "stu10 `echo "$pass"`">>/tmp/neteagle.log

​ 表7-8 拼接后的命令拆解解析

在这里插入图片描述
​ **提示:**表7-8里的所有命令其实就是创建用户、设置密码,并记录密码。

​ 第六步:将得出10条语句通过管道交给bash命令来执行。

[root@centos7 ~]# echo stu{01..10} |tr " " "\n" |sed -r 's#(.*)#useradd \1;pass=$((RADDOM+10000000)); echo "$pass" |passwd --stdin \1; echo -e "\1 `echo "$pass"`">>/tmp/neteagle.log#g' |bash
Changing password for user stu01.
passwd: all authentication tokens updated successfully.
Changing password for user stu02.
passwd: all authentication tokens updated successfully.
Changing password for user stu03.
passwd: all authentication tokens updated successfully.
Changing password for user stu04.
passwd: all authentication tokens updated successfully.
Changing password for user stu05.
passwd: all authentication tokens updated successfully.
Changing password for user stu06.
passwd: all authentication tokens updated successfully.
Changing password for user stu07.
passwd: all authentication tokens updated successfully.
Changing password for user stu08.
passwd: all authentication tokens updated successfully.
Changing password for user stu09.
passwd: all authentication tokens updated successfully.
Changing password for user stu10.
passwd: all authentication tokens updated successfully.

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125686759