第3章用户和组管理 Linux操作系统是一种多用户、多任务的分时操作系统。本章将介绍Linux操作系统的用户和组管理命令。主要包括三方面的内容: Linux用户账户的添加、删除与修改,用户组账户的添加、删除与修改,用户和用户组密码的管理。 视频讲解 3.1用户和组管理概述 Linux系统对用户与组的账户登录通过ID(Identity)号实现,在登录系统时,输入的用户名与密码将会自动将用户名转换为ID号判断其是否存在,然后与存储的加密后的密码进行比对。 在Linux中,用户ID称为UID,组ID号称为GID。UID为0时表示超级用户,取值范围为1~999的UID,系统会预留给系统的虚拟用户。使用超级用户权限创建普通用户的UID从1000开始编号,取值大于或等于1000,例如,本书安装Ubuntu操作系统时创建的ubuntu用户的UID为1000。 Linux中的组分为基本组(私有组)和附加组(公共组)。一个用户同一时刻只能属于一个基本组,但可以同时加入多个附加组; 创建用户时,默认会自动创建同名的组。 3.1.1Linux用户角色划分 Linux系统是分角色管理用户的。角色的不同,用户权限和所完成的任务也不同。另外,需要注意的是,用户和组的角色是可以分别通过UID和GID识别的。 1. 超级用户 超级用户(super user),也称为根用户(root user),其UID值为0。超级用户是Linux系统中唯一拥有最高权限的用户,可以操作任何文件,执行任何命令。超级用户在安装操作系统时创建,默认情况下,超级用户只能在本地登录,而不能远程登录。在Ubuntu操作系统中,一般不使用超级用户直接登录系统。 2. 虚拟用户 虚拟用户也称为程序用户,其UID的取值范围是1~999。与真实用户区分开来,这类用户的最大特点是安装系统后默认就会存在,并且默认情况下是不能登录系统的。它们的存在是为了方便Linux系统管理,与系统进程密切相关,是系统正常运行必不可少的一部分。例如,系统默认创建的daemon、bin、sys、mail、ftp用户等都是虚拟用户,其中,daemon用户由系统的守护进程创建。 3. 普通用户 普通用户是在系统安装完成后由系统管理员创建的,其UID的取值范围是大于或等于1000。普通用户能够管理自身的文件并拥有超级用户赋予的权限,可以直接登录或者远程登录Linux系统。安装Ubuntu操作系统时,可以设置一个被称为Ubuntu系统管理员的普通用户,例如,本书中的ubuntu用户。Ubuntu系统管理员属于sudos,即超级用户组,可以临时使用超级用户权限。 3.1.2id命令查看用户账户ID 命令功能: 查看Linux系统各个用户的UID和GID。 命令语法: id[用户名]。 【例31】id命令查看用户账户ID。 输入以下命令: idroot idubuntu id iddaemon idbin idsys idmail idftp 以上命令的执行效果如图31所示。从图31中可以发现,root用户的用户ID(UID)、组ID(GID)和组序号都为0。本书安装Ubuntu操作系统时创建的ubuntu的用户ID(UID)、组ID(GID)和组编号都为1000。直接输入无参数的id命令会显示当前登录用户,即ubuntu用户的ID信息。接着,使用id命令继续显示虚拟用户,包括daemon、bin、sys、mail、ftp用户的ID信息。可以发现,虚拟用户的UID的取值范围是1~999。 图31id命令查看用户账户ID信息 3.1.3用户和组配置文件 Linux系统的用户配置文件包括/etc/passwd文件和/etc/shadow文件,用户组配置文件包括/etc/group文件和/etc/gshadow文件。/etc/passwd文件存储的是用户账户信息,/etc/shadow文件存储的是用户密码设置信息,/etc/group文件存储的是的组账户信息,/etc/gshadow文件存储的是组密码设置信息。 1. /etc/passwd用户账户信息文件 /etc/passwd文件的每行保存一位用户账户的信息,包括七个字段,每个字段使用冒号“:”隔开,具体格式为: 用户账户名:密码域:UID:GID:注释信息:主目录:命令解释器。/etc/passwd文件各字段具体含义如表31所示。 表31/etc/passwd文件各字段含义 字 段 名含义 用户账户名用户登录系统时使用的用户名。用户名在系统中是唯一的 密码域用x表示,密码已经被映射到/etc/shadow影子文件中 UID用户ID,整数表示。每个用户ID在系统中是唯一的。超级用户的UID是0,虚拟用户的UID取值范围是1~999,普通用户的UID取值范围是大于或等于1000 GID组ID,整数表示。每个组ID在系统中是唯一的 备注用户账户的一些注释信息,如用户全名 主目录用户登录系统后的默认目录 命令解释器用户使用的Shell,默认为/bin/bash 2. /etc/shadow用户密码影子文件 /etc/shadow文件的每行保存一位用户账户的密码设置信息,包括九个字段,每个字段使用冒号“:”隔开,具体格式为:用户账户名:加密后的密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:保留字段。/etc/shadow文件各字段的具体含义如表32所示。 表32/etc/shadow文件各字段含义 字 段 名含义 用户账户名用户登录系统时使用的用户名,与/etc/passwd文件中的用户账户名字段含义一样 加密后的密码加密后的密码由三个部分组成,由$分隔,具体格式为: $加密算法序号$加盐值$加密后的密码。加密算法序号表示为: 0: DES对称加密算法,1: MD5哈希算法,2: Blowfish加密算法,5: SHA256哈希算法,6: SHA512哈希算法。如果密码是“!”,则表示还没有设置密码; 如果密码是“*”,则表示不会使用这个用户账户登录,通常是后台进程 最后一次修改时间上次修改密码的天数(从1970年1月1日开始计算,到修改密码时的天数) 最小时间间隔两次修改密码之间所需的最小天数,在这段时间内不允许修改密码,如果是0,表示可以随时修改密码 最大时间间隔密码保持有效的最大天数,超过这个天数后密码将失效,系统将强制用户修改密码; 如果是99999,表示密码不需要重新输入 续表 字 段 名含义 警告时间密码失效前的警告天数,即用户账户的密码失效前多少天警告用户需要修改密码。普通用户默认为7天 不活动时间密码过期的天数,用户账户的密码过期后多少天会被禁用 失效时间密码失效的天数,从1970年1月1日开始计算,超过这个天数,用户账户的密码将无法使用 保留字段保留、暂未使用 3./etc/group组账户信息文件 /etc/group文件的每行保存一个组的账户信息,包括四个字段,每个字段使用冒号“:”隔开,具体格式为:组名:组密码域:GID:组成员清单。/etc/group文件各字段的具体含义如表33所示。 表33/etc/group文件各字段含义 字 段 名含义 组名用户组登录系统时使用的用户组名,在系统中是唯一的 组密码域用x表示,组密码已经被映射到/etc/gshadow影子文件中 GID用户组ID 组成员清单以逗号分隔的组成员清单 4. /etc/gshadow组密码影子文件 /etc/gshadow文件的每行保存一个组的账户密码设置信息,包括四个字段,每个字段使用冒号“:”隔开,具体格式为:组名:组密码:GID:组成员清单。/etc/gshadow文件各字段的具体含义如表34所示。 表34/etc/gshadow文件各字段含义 字 段 名含义 组名用户组登录系统时使用的用户组名,在系统中是唯一的 组密码加密后的组密码,如果密码是“!”,则表示还没有设置密码,通常不需要设置组密码; 如果密码是“*”,则表示不会使用这个用户账户登录 GID用户组ID 组成员清单以逗号分隔的组成员清单 3.1.4sudo命令 命令功能: 使用超级用户权限。 命令语法: sudo命令名。 【例32】sudo命令查看用户账户和密码信息。 本例将查看Linux系统的用户账户信息文件/etc/passwd和密码影子文件/etc/shadow中root用户和ubuntu用户的信息。查看用户账户信息文件不需要超级用户权限,而查看密码影子文件则需要,因此,需要使用sudo命令,即使用超级用户权限。输入以下命令: head-n1/etc/passwd cat/etc/passwd| grep ubuntu sudohead-n1/etc/shadow sudocat/etc/shadow| grep ubuntu 以上命令的执行效果如图32所示。因为etc/passwd和/etc/shadow文件的内容较多,如果只是想查看某个用户的信息,如root用户,可以使用head命令显示第一行的内容,如果想查看其他用户,如ubuntu,那么,需要结合管道和grep命令进行过滤。查看/etc/shadow文件时,需要使用sudo命令 图32sudo命令查看用户账户和密码信息 【例33】sudo命令查看组账户和密码信息。 与查看用户账户信息和影子文件一样,查看/etc/group组账户信息文件不需要超级用户权限,而查看/etc/gshadow组密码影子文件则需要。输入以下命令: head-n4/etc/group sudocat/etc/gshadow | grep root sudocat/etc/gshadow | grep sudo 以上命令的执行效果如图33所示。从图33中可以看出,使用head命令显示/etc/group文件前4行的内容,即显示了root组、daemon组、bin组和sys组的账户信息,并使用sudo命令查看了/etc/shadow文件,结合管道和grep命令过滤出root组和sudo组密码设置信息。可以发现,这两个组的密码都显示为*,表示没有设置密码。图33最后一行显示查看sudo组的密码设置信息,可以发现,目前sudo组的组成员只有ubuntu用户。 图33sudo命令查看组账户和密码信息 需要注意的是,sudo组是一个比较特殊的组,它是一个超级用户组,如果要临时使用超级用户权限,即使用sudo命令,需要将该用户加入sudo组。本书在后续的实例中将会运用这个知识点 3.2用户管理命令 3.2.1su切换用户和exit回退命令 su命令功能: 切换用户。 su命令语法: su用户名。 exit命令功能: 回退原用户。 exit命令语法: exit。 【例34】su命令切换用户和exit命令回退原用户。 输入以下命令: suroot exit 以上命令的执行效果如图34所示。从图34中可以看出,使用su命令切换到root用户,输入密码,提示符从$变成了#,用户名也变成了root。当输入exit命令后,回到原来的用户ubuntu,提示符恢复$。 图34su命令切换用户和exit命令回退原用户 3.2.2useradd添加用户命令 命令功能: useradd命令可以添加一个新用户,或者添加一个新用户并更新其配置信息。 命令语法: useradd[选项]用户名。 常用参数: useradd命令的常用参数及其含义如表35所示。 表35useradd命令参数含义 参数含义 m如果用户主目录不存在,则创建该主目录 s指定用户登录的Shell环境,默认是/bin/sh d指定用户登录的主目录 u指定用户账户的UID,但必须唯一 r创建一个系统账户 p指定用户密码,不推荐使用该参数,因为使用该参数对其他用户可见 c指定备注信息,将保存在/etc/passwd文件的备注栏上 e指定失效时间,默认永久有效 续表 参数含义 f指定不活动时间,即密码过期后,账户被彻底禁用之前的天数。0表示立即禁用,-1表示禁用这个功能 G指定用户所属的基本组或者GID,但该组必须存在 g指定用户所属的附属组 【例35】添加“你的姓名1”普通用户,并创建默认主目录。 本例使用“你的姓名1”作为用户名,使用超级用户权限和useradd-m命令创建该普通用户,并创建默认主目录,以及查看用户账户信息文件和用户密码影子文件。输入以下命令: sudouseradd-m你的姓名1 id你的姓名1 cat/etc/passwd | grep你的姓名1 sudocat/etc/shadow | grep你的姓名1 ls/home 以上命令的执行效果如图35所示。从图35中可以看出,使用超级用户权限和useradd m命令添加一个yujian1的用户账户,并创建默认主目录。通过id命令查看到该用户的UID、GID和组编号均为1001,组名为yujian1(与用户名同名); 其在/etc/passwd文件中的信息显示该用户的默认主目录为/home/yujian1,使用ls/home命令验证了这一点; 默认Shell环境为/bin/sh; 其在/etc/shadow影子文件中的加密密码是“!”,说明该用户还没有设置密码; 另外,显示最后一次修改时间为19 004天,最小时间间隔为0天,最大时间间隔为99 999天,警告时间为7天。 图35添加“你的姓名1”普通用户,并创建默认主目录 【例36】添加“你的姓名2”普通用户,并将其加入超级用户组。 本例使用“你的姓名2”作为用户名,使用超级用户权限和useradd g命令创建该普通用户,并加入sudo超级用户组,最后查看用户账户信息文件和用户密码影子文件。输入以下命令: sudouseradd-gsudo你的姓名2 id你的姓名2 cat/etc/passwd|grep你的姓名2 sudocat/etc/shadow|grep你的姓名2 以上命令的执行效果如图36所示。从图36中可以看出,使用超级用户权限和useradd g命令添加一个yujian2的用户账户,并将该用户加入超级用户组,通过id命令查看到该用户的UID为1002、GID和组编号均为27,组名为sudo; 其在/etc/passwd文件中的信息显示该用户的默认主目录为/home/yujian2,但由于没有使用m参数,因此实际上并没有创建该默认目录,使用ls/home命令验证了这一点; 查看该用户在/etc/shadow文件的信息除用户账户名外,其他内容与例35相同,因此此处不再赘述。 图36添加“你的姓名2”普通用户,并加入超级用户组 【例37】添加“你的姓名3”普通用户,并指定登录主目录。 假设系统管理员打算添加一位远程登录的普通用户,并限制他只能登录到某个指定的主目录。为解决这一问题,本例使用“你的姓名3”作为用户名,使用超级用户权限和useradd d命令创建该普通用户,并指定登录主目录为已经创建好的目录/ftp,最后查看用户账户信息文件和用户密码影子文件。输入以下命令: sudomkdir-p/ftp sudouseradd-d/ftp你的姓名3 id你的姓名3 cat/etc/passwd | grep你的姓名3 sudocat/etc/shadow | grep你的姓名3 以上命令的执行效果如图37所示。从图37中可以看出,首先创建目录/ftp,使用超级用户权限和useradd d命令添加一个yujian3的用户账户,并指定登录主目录为/ftp,通过id命令查看到该用户的UID、GID和组编号均为1003,组名为yujian3(与用户名同名); 其在/etc/passwd文件中的信息显示该用户的默认主目录为/ftp,这与默认创建的在/home下的主目录不同; 查看该用户在/etc/shadow文件的信息除用户账户名外,其他内容与例35相同,因此此处不再赘述。 图37添加“你的姓名3”普通用户,并指定登录主目录 【例38】添加“你的姓名4”普通用户并创建默认主目录,指定备注和失效时间。 本例使用“你的姓名4”作为用户名,使用超级用户权限和useradd m命令创建该普通用户,并使用c和e参数分别指定备注信息和失效时间,最后查看用户账户信息文件和用户密码影子文件。输入以下命令: sudouseradd-m-c"expired in 30 days" -e 30 你的姓名4 id你的姓名4 cat/etc/passwd| grep你的姓名4 sudocat/etc/shadow| grep你的姓名4 ls/home 以上命令的执行效果如图38所示。从图38中可以看出,使用超级用户权限和useradd m命令添加一个yujian4的用户账户,并创建默认主目录,使用c参数指定备注信息为expired in 30 days,即30天后过期; 通过id命令查看到该用户的ID、组ID和组编号均为1004,组名为yujian4(与用户名同名); 使用cat命令显示该用户在/etc/passwd文件中的备注和默认主目录信息,查看该用户在/etc/shadow文件的信息除用户账户名外,其他内容与例35相同,因此,此处不再赘述; 使用ls/home命令验证了该命令创建了默认主目录。 图38添加“你的姓名4”普通用户,创建默认主目录,指定备注和失效时间 【例39】添加“你的姓名5”虚拟用户。 本例使用“你的姓名5”作为用户名,使用超级用户权限和useradd r命令创建该虚拟用户,并查看用户账户信息文件和用户密码影子文件。输入以下命令: sudouseradd-r你的姓名5 id你的姓名5 cat/etc/passwd | grep你的姓名5 sudocat/etc/shadow | grep你的姓名5 以上命令的执行效果如图39所示。从图39中可以看出,使用超级用户权限和useradd r命令添加一个用户名为yujian5的虚拟用户; 需要注意的是,与例35至例38不同,本例创建的是虚拟用户,其UID的取值范围是1~999; 通过id命令查看到该用户的UID、GID和组编号均为998,UID属于虚拟用户取值范围; 使用超级用户权限和cat命令查看/etc/shadow文件发现,该虚拟用户的最后一次修改时间与前面创建的普通用户一样,但与普通用户不同的是: 最小时间间隔、最大时间间隔和警告时间都没有设置。 图39添加“你的姓名5”虚拟用户 【例310】添加“你的姓名6”普通用户,并指定UID。 在日常工作中,为了方便管理,企事业单位通常使用员工的工号作为员工ID,而学校通常使用学号作为学号ID。本例使用“你的姓名6”作为用户名,使用超级用户权限和useradd u命令将你的学号(本书中以2019119101为例)设置为用户UID,这样,当用户登录Linux系统时,可以很方便地通过其学号和姓名进行识别和管理。最后,查看用户账户信息文件和用户密码影子文件。输入以下命令: sudouseradd-u你的学号你的姓名6 id你的姓名6 cat/etc/passwd|grep你的姓名6 sudocat/etc/shadow|grep你的姓名6 以上命令的执行效果如图310所示,添加了用户名为yujian6的普通用户。需要注意的是,与例35至例39不同,本例中用户的UID直接通过命令指定,而不是由系统自动分配。 图310添加“你的姓名6”普通用户,并指定UID 3.2.3passwd设置用户密码命令 命令功能: 设置指定用户账户名密码。 命令语法: passwd用户账户名。 常用参数: passwd命令的常用参数及其含义如表36所示。 表36passwd命令参数含义 参数含义 d即delete,删除指定用户的密码 e即expire,强制指定用户的密码过期 l即lock,锁定指定用户账户 u即unlock,解锁指定用户账户 【例311】passwd命令设置用户密码。 本例使用超级用户权限和passwd命令设置用户密码。为了配合例326破解系统用户密码,本例将“你的姓名1”用户的密码设置为弱口令: 654321,将“你的姓名2”用户的密码设置为弱口令: a12345。输入以下命令: sudopasswd你的姓名1 sudopasswd你的姓名2 su你的姓名2 sudocat/etc/shadow|grep你的姓名2 exit 以上命令的执行效果如图311所示。从图311中可以看出,使用超级用户权限和passwd命令分别设置了yujian1和yujian2的弱口令密码,并使用su命令切换到yujian2用户,由于该用户属于sudo超级用户组,因此,该用户能够使用超级用户权限查看/etc/shadow文件的信息。 图311设置用户密码 【例312】passwd命令删除用户密码。 本例为删除“你的姓名3”和“你的姓名6”两个用户的密码。输入以下命令: sudocat/etc/shadow|grep你的姓名3 sudopasswd-d你的姓名3 sudocat/etc/shadow|grep你的姓名3 sudopasswd-d你的姓名6 以上命令的执行效果如图312所示。从图312中可以看出,首先使用超级用户权限和cat命令查看yujian3用户没有设置密码之前,在/etc/shadow密码影子文件中的信息。可以发现,其加密后的密码是“!”,表示还没有设置密码; 当使用sudo passwd d删除该用户密码后,其加密后的密码显示为空。 图312删除用户密码 3.2.4usermod修改用户命令 命令功能: 修改用户属性信息,包括锁定和解锁用户、添加到附加组和修改UID。 命令语法: usermod[选项]用户名。 常用参数: usermod命令的常用参数及其含义如表37所示。 表37usermod命令参数含义 参数含义 l即lock,锁定用户 U即unlock,解锁用户 G附加组名称 a即append,也就是将用户附加到附加组中,而不必离开基本组; 需要与G参数一起配合使用 u修改指定用户UID d修改用户登录的主目录 l修改用户名,注意语法为: usermodl新用户名原用户名 【例313】usermod命令锁定和解锁用户。 本例使用超级用户权限和usermod命令锁定和解锁用户,并使用su切换用户命令进行验证,成功切换到该用户账户后,尝试使用超级用户权限显示密码影子文件的内容。输入以下命令: sudousermod-L 你的姓名1 su你的姓名1 sudousermod-U 你的姓名1 su你的姓名1 sudocat/etc/shadow | grep 你的姓名1 exit 以上命令的执行效果如图313所示。从图313中可以看出,使用超级用户权限和usermod L锁定yujian1用户后,使用su命令切换到该用户,显示“su:认证失败”; 在使用usermod U解锁后,再次切换,提示符变成“$”,切换成功。切换到该用户后,尝试使用sudo命令显示密码影子文件,提示“yujian1不在sudoers文件中。此事将被报告。”,意思是提示yujian1用户不在sudo超级用户组中,无法使用sudo命令。这个问题将在下一个例子中解决。 图313usermod命令锁定和解锁用户 【例314】usermod命令将已有用户附加到sudo组,并修改UID。 例313中,由于yujian1用户不属于超级用户组,因此无法使用超级用户权限。本例解决了这一问题: 使用usermod命令将该用户加入sudo组。这需要使用a参数将用户附加到某个附加组和G参数指定组名。需要注意的是,aG参数通常是配合使用的。最后使用u参数修改该用户的UID。输入以下命令: sudousermod-aGsudo你的姓名1 su你的姓名1 sudocat/etc/shadow | grep你的姓名1 exit id你的姓名1 sudousermod-u9999你的姓名1 id你的姓名1 以上命令的执行效果如图314所示。从图314中可以看出,使用usermod aG命令将yujian1添加到sudo超级用户组后,yujian1用户能够使用超级用户权限查看密码影子文件了。因为,不能在已经登录的yujian1用户上直接修改其UID,因此,使用exit命令回到原ubuntu用户后,使用id命令查看yujian1用户的UID为1001,接着使用usermod u命令将其改为9999,再次使用id命令查看,验证了UID已经修改成功。 图314usermod命令将用户附加到sudo组,并修改UID 3.2.5chage更改用户密码有效期命令 命令功能: 更改用户密码有效期信息。 命令语法: chage[选项]用户名。 常用参数: chage命令的常用参数及其含义如表38所示。 表38chage命令参数含义 参数含义 l列出密码的有效期 m两次修改密码相距的最小天数,如果为0,则表示随时可以修改 M密码有效的最大天数 E指定密码过期时间,0表示立刻过期,-1表示永不过期 【例315】chage命令直接修改用户密码的有效期。 本例使用chage命令和m、M参数直接将用户账户的有效期修改为两次修改密码相距的最小天数为7天,密码有效的最大天数为30天。输入以下命令: sudochage-1你的姓名3 sudochage-m7-M30你的姓名3 sudochage-1你的姓名3 以上命令的执行效果如图315所示。使用chage命令修改yujian3用户密码有效期: 两次修改密码相距的最小天数从0天修改为7天,密码有效的最大天数从99999天修改为30天。 图315chage命令直接修改用户密码的有效期 【例316】chage命令交互式修改用户账户的有效期。 本例使用chage命令交互式修改用户账户的有效期,不需要任何参数。对不需要修改的选项,直接输入后按Enter键跳过即可。输入以下命令: sudochage-1你的姓名4 sudochage你的姓名4 sudochage-1你的姓名4 以上命令的执行效果如图316所示。从图316中可以看出,使用chage命令交互式修改yujian4用户密码有效期: 两次修改密码相距的最小天数从0天修改为7天,密码有效的最大天数从99 999天修改为30天。需要注意的是,在交互式选项中,最小密码年龄表示两次修改密码相距的最小天数,最大密码年龄密码有效的最大天数。 图316chage命令交互式修改用户账户的有效期 3.2.6userdel删除用户命令 命令功能: 删除指定用户。 命令语法: userdel[选项]用户名。 常用参数: userdel命令的常用参数及其含义如表39所示。 表39userdel命令参数含义 参数含义 r删除指定用户,并递归删除其主目录下的所有文件和文件夹 f强制删除用户,即使该用户已经登录系统 【例317】userdel命令删除用户及其主目录。 本例使用userdel命令分别删除三个用户及其主目录。输入以下命令: sudouserdel你的姓名5 sudouserdel-r你的姓名4 ls/home 打开一个新终端,输入以下命令: su你的姓名3 sudouserdel-r你的姓名3 sudouserdel-rf你的姓名3 以上命令的执行效果如图317所示。从图317中可以看出,使用userdel命令删除yujian5用户,由于该用户是虚拟用户,没有创建主目录,因此不需要使用任何参数直接删除即可。对于yujian4普通用户,在例31中已经创建了主目录,需要使用r参数删除其对应的主目录。对于yujian3普通用户,特意打开一个新终端,切换到该用户上,使该用户登录系统,再使用r参数删除时,显示userdel:user yujian3 is currently used by process 6441,意思是yujian3用户正在由进程6441使用。因此,需要使用rf参数强制删除。 图317userdel命令删除用户及其主目录 3.3用户组管理命令 3.3.1groupadd添加用户组命令 命令功能: 添加用户组。 命令语法: groupadd用户组名。 常用参数: groupadd命令的常用参数及其含义如表310所示。 表310groupadd命令参数含义 参数含义 g指定新建用户组的GID f如果组已存在,则此参数失效; 如果GID已被使用,则取消 r创建系统组账户,GID小于1000 【例318】groupadd命令添加用户组。 本例使用groupadd命令分别添加两个用户组,并指定GID。输入以下命令: sudogroupadd-g6666student cat/etc/group | grep student sudogroupadd-g8888teacher cat/etc/group | grep teacher 以上命令的执行效果如图318所示。从图318中可以看出,使用groupadd命令添加了student用户组,并指定GID为6666; 添加了teacher用户组,并指定GID为8888,并使用cat命令查看/etc/group文件中的组信息。 图318groupadd命令添加用户组 3.3.2groupmod修改用户组命令 命令功能: 修改用户组属性信息,包括用户组的GID和用户组名。 命令语法: groupmod[选项]组名。 常用参数: groupmod命令的常用参数及其含义如表311所示。 表311groupmod命令参数含义 参数含义 g修改用户组的GID n修改用户组名 【例319】groupmod命令修改组名和GID。 本例使用groupmod命令修改用户组名和GID。输入以下命令: sudogroupmod -nstustudent sudogroupmod-g你的班级号stu cat/etc/group|grep stu 以上命令的执行效果如图319所示。从图319中可以看出,使用groupmod命令修改了student用户组名为stu,并修改了GID为你的班级号(本书以20191191为例),最后查看/etc/group文件验证了用户组信息已经成功修改。 图319groupmod命令修改组名和GID 3.3.3gpasswd管理用户组命令 命令功能: 管理用户组,包括添加或删除用户,设置和删除组密码,以及指定管理员。 命令语法: gpasswd[选项]用户组名。 常用参数: gpasswd命令的常用参数及其含义如表312所示。 表312gpasswd命令参数含义 参数含义 a添加用户到组 d从组中删除用户 r删除组密码 A指定组管理员,不一定是组内成员,组管理员可以增删成员,修改组密码等操作 M指定组成员 【例320】gpasswd命令添加和删除用户。 本例使用gpasswd命令添加两个用户并分别添加到用户组,并从用户组中删除一个用户,最后通过id命令查看用户所属的组名是否修改成功。输入以下命令: sudogpasswd-a你的姓名1teacher id你的姓名1 sudogpasswd-a你的姓名6teacher sudogpasswd-a你的姓名6stu id你的姓名6 sudogpasswd-d你的姓名6teacher id你的姓名6 以上命令的执行效果如图320所示。从图320中可以看出,首先使用gpasswd a命令将yujian1添加到了teacher组,将yujian6添加到了teacher组和stu组。yujian6同时属于教师组和学生组,这有些不合理。接着,使用gpasswd d命令将yujian6用户从teacher组中删除。最后使用id命令验证了修改结果是否正确。可以发现,yujian1用户属于yujian1基本组、sudo附加组和teacher附加组,yujian6用户属于yujian6基本组、stu附加组。 图320gpasswd命令添加和删除用户 【例321】gpasswd命令设置和删除组密码。 本例设置stu组的密码,将teacher组密码删除,并通过/etc/gshadow密码影子文件查看设置情况。输入以下命令: sudogpasswdstu sudocat/etc/gshadow|grep stu sudogpasswd-rteacher sudocat/etc/gshadow|grep teacher 以上命令的执行效果如图321所示。从图321中可以看出,使用gpasswd命令设置了stu用户组的密码(可设置为弱口令123456),目的在于方便课后习题(实操题)使用john软件破解; 使用gpasswd r命令删除了teacher组密码。通过/etc/gshadow文件,读者可以发现stu组记录末尾显示组成员有用户yujian6,teacher组记录末尾显示组成员有用户yujian1,并且teacher组密码为空。 图321gpasswd命令设置和删除组密码 3.3.4groupdel删除用户组命令 命令功能: 删除用户组。 命令语法: groupdel用户组名。 【例322】groupdel命令删除用户组。 本例首先添加了一个用户组testgroup,并使用tail n1命令查看/etc/group文件的最后一行; 然后在确认创建了该用户组后,使用groupdel命令删除,并查看/etc/group文件。输入以下命令: sudogroupaddtestgroup tail-n1/etc/group sudogroupdeltestgroup cat/etc/group | grep testgroup 以上命令的执行效果如图322所示。删除testgroup用户组后,在/etc/group组账户信息文件中查找testgroup,显示结果为空,表明该用户组已经成功删除。 图322groupdel命令删除用户组 视频讲解 3.4用户和组的运行维护 3.4.1chpasswd批量修改用户密码命令 命令功能: 从系统的标准输入读入用户名和密码,对已存在的用户修改密码,达到批量修改用户密码的目的。 命令语法: echo用户名: 密码|chpasswd。 【例323】chpasswd命令批量修改用户密码。 本例通过一个Shell脚本文件批量添加用户user01~user10,共10个用户,并使用useradd g命令指定用户所属的组为stu; 通过chpasswd命令批量修改用户密码为123456。最后使用tail命令查看/etc/passwd文件信息,观察用户是否批量添加成功。输入以下命令: geditadduser.sh 打开gedit窗口后,输入以下Shell脚本内容: #!/bin/bash foriin{01..10} do useradduser$i-gstu echouser$i: 123456 | chpasswd done 保存并关闭窗口。该脚本中,$i表示获取变量i的值,{01..10}表示01~10的数字序列。输入以下命令: sudobashadduser.sh tail/etc/passwd iduser01 suuser01 exit 以上命令的执行效果如图323所示。从图323中可以看出,使用tail命令查看到这10个用户已经批量添加成功,并加入了stu组(GID为20191191)。选择第一个用户user01进行验证,使用id命令查看其用户组,使用su命令输入密码123456,如果密码输入正确,就会跳转到下一行,在提示符$后可以继续输入命令,表示切换成功; 否则会提示用户“su: 认证失败”。 图323chpasswd命令批量修改用户密码 需要注意的是,本例首先批量添加了用户,如果完成后需要批量删除用户,可以输入以下命令: geditdeluser.sh 打开gedit窗口后,输入以下Shell脚本内容: #!/bin/bash foriin{01..10} do userdeluser$i done 保存并关闭窗口。然后输入以下命令: sudobashdeluser.sh 此时即可删除以上创建的10个用户。 3.4.2awk命令列出系统用户 /etc/passwd文件和/etc/group文件中,各字段采用冒号作为分隔符。可以使用awk命令,并使用F参数指定冒号作为分隔符,列出系统中的所有用户名,或者某些用户名。 【例324】awk命令列出当前系统的某些用户名。 输入以下命令: awk-F': ''{print $1}'/etc/passwd|grep你的姓名 awk-F': ''{print $1}'/etc/group|tail-n4 以上命令的执行效果如图324所示。使用awk F命令结合grep命令显示了包括yujian关键字的用户名,结合tail n4命令显示了用户组账户信息文件最后4行的内容。 图324awk命令列出当前系统的某些用户名 3.4.3修改用户名和主目录的方法和命令 当不满意安装时设定的用户名时,由于已经在该用户上做了很多配置并安装了很多软件,不希望再新建用户,这时最好在原来的基础上直接修改用户名。一个修改用户名和主目录的简单粗暴的方法是修改三个配置文件: /etc/passwd、/etc/shadow和/etc/group,将这三个文件中的原用户名修改为现在需要设置的用户名,同时修改/etc/passwd中的主目录。也可以综合使用多个命令来修改用户名和主目录。 【例325】修改用户名和主目录之简单粗暴法。 首先切换到root用户,然后创建用户testuser,分别编辑以上三个配置文件,定位到文件内容的最后一行,将用户名testuser修改为“你的姓名7”,其他内容不要修改,保存并关闭窗口。用户配置即可生效。输入以下命令: suroot useradd-mtestuser passwdtestuser 为了方便例326中的john软件破解,设置密码为弱口令: 123456。 gedit/etc/passwd 定位到最后一行,将testuser修改为“你的姓名7”,保存并关闭窗口。 gedit/etc/shadow 定位到最后一行,将testuser修改为你的姓名7,保存并关闭窗口。 gedit/etc/group 定位到最后一行,将testuser修改为你的姓名7,保存并关闭窗口。 exit su你的姓名7 exit 以上命令的执行效果如图325所示。将以上三个配置文件对应的用户名信息修改后,输入su命令切换到yujian7,输入创建testuser用户时设置的密码123456,即可成功切换。 图325修改用户名 【例326】修改用户名和主目录之命令法。 本例综合使用多个命令修改用户名和主目录。输入以下命令: sudouseradd-mtemp sudopasswdtemp sudousermod-l你的姓名8temp sudomv/home/temp/home/你的姓名8 sudousermod-d/home/你的姓名8你的姓名8 sudocat/etc/passwd|grep你的姓名8 以上命令的执行效果如图326所示。从326中可以看出,首先,创建temp用户,使用m参数创建对应的主目录/home/temp,并设置较复杂和难以破解的密码,例如,本书设置为hstc; 然后,使用usermod-l命令将temp用户名改为yujian8,将主目录/home/temp重命名为主目录/home/yujian8,使用usermod d命令将yujian8用户的主目录设为/home/yujian8; 最后,通过查看/etc/passwd文件,可以发现yujian8的用户名和主目录都已经修改成功了。 图326修改用户名和主目录 3.5综合实例: 使用john软件破解系统用户密码 /etc/passwd存放的是用户账户信息,而/etc/shadow存放的是用户的加密后密码信息。Linux操作系统采用安全哈希算法(MD5、SHA1)等加密用户密码,使加密后的用户密码不可逆向破解,即黑客无法从密文直接推导出明文。那么,如果想要破解Linux操作系统用户密码,只能采用字典攻击等蛮力破解方式了。 本综合实例中,首先编译john破解软件,生成其可执行文件,然后将用户名信息和用户密码信息重定向为一个新的文件,最后john软件通过字典模式破解。需要注意的是,编译john软件,需要安装GCC和make。如果系统没有安装,可以输入以下命令进行安装: sudo apt update sudo apt install gcc sudo apt install make 读者可以从本书的配套资源中下载john 1.9.0.tar.gz,并复制至Ubuntu操作系统的Downloads目录下,然后输入以下命令: cdDownloads tar-xzvfjohn-1.9.0.tar.gz cdjohn-1.9.0/src makecleanlinux-x86-64 cd.. cdrun sudo./unshadow/etc/passwd/etc/shadow>myshadow 以上命令的执行效果如图327所示。从图327中可以看出,将john软件使用make命令编译成功后,在其run目录下,使用超级用户权限和./执行unshadow程序,将/etc/passwd和/etc/shadow合成文件myshadow。 图327编译john破解软件 接着,可以使用./执行john破解程序,采用字典模式去破解myshadow文件,最后显示破解结果。输入以下命令: sudo./john-w: password.lstmyshadow sudo./john-showmyshadow 以上命令的执行效果如图328所示。从图328中可以发现,由于在前面章节中是将各用户密码设置为弱口令,因此,使用john软件能够在比较短的时间内破解出大部分用户的密码: yujian1用户的密码为654321,yujian2用户的密码为a12345,yujian6用户没有密码(密码被删除),yujian7用户和user01~user10用户的密码为123456。这个实例说明,如果将用户的密码设置为弱口令,是很容易被破解的。在日常工作中,设置密码最好包含字母、数字和特殊字符,这样安全性比较高,难以被破解。 图328破解用户密码结果 3.6课后习题 一、 填空题 1. 使用超级用户权限,添加一个名为testuser的用户,并为该用户创建用户主目录和登录bash shell的命令是。 2. 使用超级用户权限,设置用户yy的密码的命令是。 3. 使用超级用户权限,锁定用户yy的命令是。 4. 使用超级用户权限,解锁用户yy的命令是。 5. 使用超级用户权限,强制删除用户yy,并且删除该用户文件夹的命令是。 6. 使用超级用户权限,添加用户yy,并将其加入sudo超级用户组的命令是。 7. 使用超级用户权限,将已有用户yy附加到sudo组的命令是。 8. 使用超级用户权限,修改teach用户组名为teacher的命令是。 9. 使用超级用户权限,将8888作为用户组ID,创建用户组teach的命令是。 10. 使用超级用户权限,修改teacher用户组ID为6666的命令是。 11. 使用超级用户权限,设定teach用户组的密码的命令是。 12. 使用超级用户权限,删除teach用户组的密码的命令是。 13. 使用超级用户权限,删除用户组名为teacher的命令是。 14. 在主目录上,分析并只提取出所有系统用户名的命令是。 15. 使用超级用户权限,直接修改用户yy的密码有效期为两次密码修改最小天数为7天,密码有效的最大天数为30天的命令是。 16. 用cat命令查看用户组名信息的命令是。 17. 使用超级用户权限和cat命令查看用户组影子文件的命令是。 18. 使用超级用户权限、john软件和字典模式破解系统用户密码的命令是。提示: 已经合成了用户信息和密码信息文件xx,字典文件为password.lst。 19. 修改已经创建用户的用户名,需要修改的三个配置文件分别是、和。 20. 使用超级用户权限,将用户名xx改为yy的命令是。 二、 实操题 1. 批量删除例323所创建的user01~user10用户后,再批量添加stu01~stu10用户,同样指定所属的用户组为stu。 2. 借鉴例326中的方法,使用john软件破解用户组密码。