第5章 用户和组管理
5.1 用户和组的分类
5.1.1 用户分类
在 Linux 中,用于分为以下三类:
-
超级用户:它是用于管理操作系统,它的权限非常高,一般在创建用户等条件下才会使用,它的编号为 0。简单来说,编号为 0 的用户就是超级用户。
-
系统用户:它是用于系统能够正常运行时所需要的用户,这类用户不是用来登录的,它的编号在 1~999 之间。
-
普通用户:它是用于能够让使用者使用 Linux 系统功能所创建的用户,大多数情况下都是使用这类用户,它的编号在 1000~60000 之间。
对 Linux 中用户的类型,我们可以查看 /etc/login.defs
文件。
MAIL_DIR /var/spool/mail 创建用户时给用户所建立的邮箱地址的位置 UMASK 022 用户的权限掩码 HOME_MODE 0700 用户的家目录权限 PASS_MAX_DAYS 99999 用户密码的最大有效期 PASS_MIN_DAYS 0 用户密码的最小有效期,如果值为0,表示一直有效 PASS_WARN_AGE 7 用户密码过期时的警告期限,即提前多少天发出警告信息 UID_MIN 1000 普通用户的 uid 最小值,即第一个普通用户 uid 值 UID_MAX 60000 普通用户的 uid 最大值,即最后一个用户的 uid 值 SYS_UID_MIN 201 系统用户的 uid 最小值 SYS_UID_MAX 999 系统用户的 uid 最大值 GID_MIN 1000 普通用户组的 gid 最小值 GID_MAX 60000 普通用户组的 gid 最大值 SYS_GID_MIN 201 系统用户组的 gid 最小值 SYS_GID_MAX 999 系统用户组的 gid 最大值 ENCRYPT_METHOD SHA512 用户密码的加密算法 USERGROUPS_ENAB yes 删除用户时,如果对应的组中还有其他成员,则不能删除,否则可以删除 CREATE_HOME yes 默认在创建用户时,需要创建用户的家目录
5.1.2 用户组分类
在 Linux 中用户组也分为以下两类:
-
基本组,也叫私有组,它是建立用户时,如果没有指定用户所属组,则系统自动建立一个与用户名相同名称的组名,这个组就是基本组。
-
附加组,也叫公有组,它可以容纳多个用户,组中的用户都具有所有组织拥有的权限。
注意:一个用户只能有一个基本组,但是可以有零到多个附加组。
5.2 用户和组的配置文件
在 Linux 中,用户名、密码、用户组和用户组密码都是在保存在不同的文件配置文件中。
-
/etc/passwd:用于保存用户账号文件
-
/etc/shadow:用户保存用户的密码文件
-
/etc/group:用于保存用户组的文件
-
/etc/gshadow:用于保存用户组密码的文件
-
/etc/skel:用户保存用户家目录文件
-
/etc/default/useradd:用户定义添加用户的信息文件
5.2.1 /etc/passwd
passwd 是一个文本文件,用于定义系统的用户账号,由于这个文件是所有用户都对需要读取的权限,所以文件中只定义用户的账号,而不保存用户密码。
[root@bogon ~]# head -n 3 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
在这个文件中,每一行记录了一个用户信息,而用户信息是以 : 英文冒号来进行分隔的 7 个部分组成,这 7 个部分的意义说明如下:
root : x : 0 : 0 : root : /root : /bin/bash redhat : x : 1000 : 1000 : redhat : /home/redhat : /bin/bash 1 2 3 4 5 6 7 1 用户名 2 用户登录密码的占位符,如果为 x 表示有密码,如果为空或 * 表示没有密码 3 用户的 ID,即 uid 4 用户所属组 ID,即 gid 5 用户的个人次数,如果用户的完整名称、地址、办公电话、家庭住址等个人信息 6 用户的家目录 7 用户的默认登录所能使用的 shell 脚本
5.2.2 /etc/shadow
这个文件是用户保存用户密码的文件,我们可以通过如下的命令来查看这个文件:
# 查看这个文件的权限 [root@bogon ~]# ll /etc/shadow ----------. 1 root root 1176 Oct 15 19:52 /etc/shadow # 查看文件的内容 [root@bogon ~]# tail -2 /etc/shadow tcpdump:!!:19645:::::: redhat:$6$mPvxn$yHk9Lqu5DdB/30WmRM272dY6GxzFPSmfeUZz/DikNVfYO8tPPTalLnksxcj7KjU2.4SGMG5HLIWwqK6GqLYwu.:19645:0:99999:7:::
这个文件每一行记录了一个用户的密码信息,它们共有 9 个字段,分别表示如下:
redhat : $6$mPvxn$yHk9Lqu5DdB/30WmRM272dY6GxzFPSmfeUZz/DikNVfYO8tPPTalLnksxcj7KjU2.4SGMG5HLIWwqK6GqLYwu. : 19645 : 0 : 99999 : 7 : : : 1 2 3 4 5 6 7 8 9 1 用户名,它与 /etc/passwd 文件中第一个字段相同 2 用户的密码,它包括算法、盐和密文。在这个字段中 $id$ 表示的就是算法(id为1表示 md5加密,id为5表示sha256加密,id为6表示sha512加密)。如果这个字段的值为 !! 则表示账号已被锁定不能登录,如果这个字段为 * 号表示该用户无须登录 3 最后一次修改密码时间,单位为天,是从 1970 年 1 月 1 日 开始到创建账号时的天数差 4 最小时间间隔,即经过多小天后才可以再次修改密码,单位也是天,如果值为 0,则表示没有限制 5 最大时间间隔,密码经过多少天后必须修改,否则不能登录。默认值为 999999(237年),表示不限制 6 警告时间,在密码失效之前多少天会有提示信息,默认值为 7 天。如果值为 0 表示不限制 7 不活动时间,密码过期后多少天就禁用该账号,0 表示过期后立即失效;-1 表示密码永远不过期;正数 表示往后宽限多少天。 8 密码失效时间,以距离 1970 年 1 月 1 日的天数来表示,如果值为空表示永久可用 9 保留字段,目前暂无使用
5.2.3 /etc/group
这个文件中存储是用户组信息,我们可以通过如下的命令来进行查看:
[root@bogon ~]# ll /etc/group -rw-r--r--. 1 root root 856 Oct 15 19:52 /etc/group [root@bogon ~]# tail -3 /etc/group dnsmasq:x:977: tcpdump:x:72: redhat:x:1000:
在这文件中每一行记录了一个组信息,使用英文冒号分隔成 4 个字段,分别代表如下:
redhat : x : 1000 : 1 2 3 4 1 表示组名称 2 表示组的密码占位符,真正的密码保存在 /etc/gshadow 文件中 3 表示组的 id 值 4 表示附加组中的用户列表,以英文逗号分隔,如果为空表示没有附加用户
5.2.4 /etc/gshadow
这个文件是用于保存组的密码信息,通过如下命令来查看:
[root@bogon ~]# ll /etc/gshadow ----------. 1 root root 690 Oct 15 19:52 /etc/gshadow [root@bogon ~]# tail -3 /etc/gshadow dnsmasq:!:: tcpdump:!:: redhat:!::
在这个文件中每一行代表一个组的密码信息,通过英文冒号分隔为 4 段,分别表示如下:
redhat : ! : : 1 2 3 4 1 组名称,与 /etc/group 文件中第一列相同 2 组密码,如果值为 ! 表示没有密码 3 组管理的用户名,很少使用 4 组中附加用户,也 /etc/group 中第 4 列相同
5.2.5 /etc/skel
这个文件中记录是用户家目录下的相关隐藏文件。默认情况下,当新创建好一个用户后,会在这个用户的家目录下新建一个隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的。
vim /etc/skel ../ ./ .mozilla/ .bash_logout .bash_profile .bashrc
5.2.6 /etc/default/useradd
在这个文件中记录了创建用户的相关信息。
vim /etc/default/useradd # useradd defaults file GROUP=100 这个选项用于建立用户的默认组,它是公有组,而目录使用的是私有组,所以它无效 HOME=/home 用于指定所创建的用户所在的家目录,它是创建普通用户的家目录 INACTIVE=-1 用于指定密码过期的宽限时间,如果值为 -1 表示不限制,它与 /etc/shadow 文件中第 7 个字段对应 EXPIRE= 用于指定密码的过期时间,它与 /etc/shadow 文件中的第 8 个字段对应,如果值为空表示永久有效 SHELL=/bin/bash 用于指定用户登录后的操作,它与 /etc/passwd 文件中第 7 个字段对应 SKEL=/etc/skel 用于指定用户所在家目录下的隐藏文件的拷贝来源 CREATE_MAIL_SPOOL=yes 用于给新建的用户指定邮箱地址,它 /etc/login.defs 文件中 MAIL_DIR 指向的地址相同
5.3 用户管理 *****
5.3.1 添加用户
添加用户我们需要使用 useradd 命令来实现,它的语法格式为:
useradd [选项] <用户名|登录名> 选项: -c 设定与用户相关的说明信息,如用户的邮箱,电话,真实姓名等,它的值会记录在 /etc/passwd 文件中的第 5 个字段中 -d 用户指定在创建用户时的家目录,默认情况下是在 /home/用户名 目录下 -e 用户设置用户的失效期,这个值会记录在 /etc/shadow 文件中的第 8 个字段中 -f 用户指定密码的宽限期,它的值会记录在 /etc/shadow 文件中的第 7 个字段中 -g 为所创建的用户指定基本组的 id,如果该组 id 不存在会报错,如果存在则创建成功 -G 为所创建的用户指定附加组的 id,可以指定多个,用逗号分隔 -M 在创建用户时不创建用户的家目录,一般用于创建系统用户。创建普通用户时不要指定这个选项 -N 不创建与用户名相同的组名称 -p 指定用户的登录密码 -s 用于指定所创建用户可操作的脚本 -u 设置账号的 uid,默认情况下是已有普通用户的最大值加1后的值。
示例1:新建一个用户名叫 zhangsan 的用户。
# 查看 /etc/passwd 文件的最后2行 [root@bogon ~]# tail -2 /etc/passwd tcpdump:x:72:72::/:/sbin/nologin redhat:x:1000:1000:redhat:/home/redhat:/bin/bash # 查看 /etc/shadow 文件最后 2 行 [root@bogon ~]# tail -2 /etc/shadow tcpdump:!!:19645:::::: redhat:$6$mPvxn$yHk9Lqu5DdB/30WmRM272dY6GxzFPSmfeUZz/DikNVfYO8tPPTalLnksxcj7KjU2.4SGMG5HLIWwqK6GqLYwu.:19645:0:99999:7::: # 查看 /etc/group 文件最后 2 行 [root@bogon ~]# tail -2 /etc/group tcpdump:x:72: redhat:x:1000: # 查看 /etc/gshadow 文件最后 2 行 [root@bogon ~]# tail -2 /etc/gshadow tcpdump:!:: redhat:!:: # 查看 /var/spool/mail 目录信息 [root@bogon ~]# ls /var/spool/mail/ redhat rpc # 创建 zhangsan 用户 [root@bogon ~]# useradd zhangsan # 查看 /etc/passwd 文件的最后2行 [root@bogon ~]# tail -2 /etc/passwd redhat:x:1000:1000:redhat:/home/redhat:/bin/bash zhangsan:x:1001:1001::/home/zhangsan:/bin/bash # 查看 /etc/shadow 文件最后 2 行 [root@bogon ~]# tail -2 /etc/shadow redhat:$6$mPvxn$yHk9Lqu5DdB/30WmRM272dY6GxzFPSmfeUZz/DikNVfYO8tPPTalLnksxcj7KjU2.4SGMG5HLIWwqK6GqLYwu.:19645:0:99999:7::: zhangsan:!!:19687:0:99999:7::: # 查看 /etc/group 文件最后 2 行 [root@bogon ~]# tail -2 /etc/group redhat:x:1000: zhangsan:x:1001: # 查看 /etc/gshadow 文件最后 2 行 [root@bogon ~]# tail -2 /etc/gshadow redhat:!:: zhangsan:!:: # 查看 /var/spool/mail 目录信息 [root@bogon ~]# ls /var/spool/mail/ redhat rpc zhangsan
总结:从上面创建用户可以看出,当一个用户创建好后,需要在 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/var/spool/mail 以及 /home 等文件或目录下添加内容。
示例2:新建一个用户名为 lisi ,并指定它的 uid 为 1002,登录的 shell 为 /bin/bash,账号永不过期
[root@bogon ~]# useradd -u 1002 -s /bin/bash -e -1 lisi
示例3:新建一个名为 admin 的账号,并将其家目录指定为 /admin,基本组指定为 wheel,同时属于adm和root的附加组
[root@bogon ~]# useradd -d /admin -g wheel -G adm,root admin # 查看 /etc/group [root@bogon ~]# cat /etc/passwd root:x:0:admin adm:x:4:admin ....... # 查看 /etc/gshadow [root@bogon ~]# cat /etc/gshadow root:::admin adm:::admin .......
示例4:新建名为 wang5 的账号,账号过期时间为 2023-12-12,账号信息为 wang5, 13300000000
[root@bogon ~]# useradd -e "2023-12-12" -c "wang5,133000000" wang5 [root@bogon ~]# tail -1 /etc/passwd wang5:x:1004:1004:wang5,133000000:/home/wang5:/bin/bash [root@bogon ~]# tail -1 /etc/shadow wang5:!!:19687:0:99999:7::19703:
示例5:新建一个名为 zhao6 的账号,并禁止登录且不创建家目录
[root@bogon ~]# useradd -M -s /sbin/nologin zhao6
5.3.2 修改用户
修改用户我们需要使用 usermod 命令。它的语法格式为:
usermod [选项] <用户名|账号> 选项: useradd 选项都可用 -l 更改用户的名称,该用户名未登录的情况下才能使用 -L 锁定当前账号,即当前账号不能登录 -U 解锁当前账号,即恢复当前账号登录
示例1:修改账号 zhangsan 的有效期为 2023-12-20,宽限期为 8 天
[root@bogon ~]# cat /etc/shadow | grep zhangsan zhangsan:!!:19687:0:99999:7::: [root@bogon ~]# usermod -e "2023-12-20" -f 8 zhangsan [root@bogon ~]# cat /etc/shadow | grep zhangsan zhangsan:!!:19687:0:99999:7:8:19711:
示例2:修改 lisi 的 shell 为 /bin/sh
[root@bogon ~]# cat /etc/passwd | grep lisi lisi:x:1002:1002::/home/lisi:/bin/bash [root@bogon ~]# usermod -s /bin/sh lisi [root@bogon ~]# cat /etc/passwd | grep lisi lisi:x:1002:1002::/home/lisi:/bin/sh
示例3:将 admin 账号的家目录移至 /home 目录下
[root@bogon ~]# cat /etc/passwd | grep admin admin:x:1003:10::/admin:/bin/bash [root@bogon ~]# usermod -d /home admin [root@bogon ~]# cat /etc/passwd | grep admin admin:x:1003:10::/home:/bin/bash
示例4:将 wang5 账号修改为 wangwu,并暂停使用该账号
[root@bogon ~]# usermod -L -l wangwu wang5 [root@bogon ~]# cat /etc/passwd | grep wangwu wangwu:x:1004:1004:wang5,133000000:/home/wang5:/bin/bash
示例5:将 wuangwu 账号解锁
[root@bogon ~]# usermod -U wangwu
5.3.3 修改密码
当使用 useradd 命令来添加用户后,该用户还不能登录,因为没有为该用户设置密码。只有设置了密码后,才可以登录。而设置密码的命令是 passwd,它的语法格式为:
passwd [OPTION...] <accountName> 选项: -k, --keep-tokens 保持身份验证不过期 -d, --delete 删除账号的密码,也可以删除锁 -l, --lock 锁定当前账号密码 -u, --unlock 解锁当前账号密码 -e, --expire 指定账号的过期时间 -x, --maximum=DAYS 密码最长有效期 -n, --minimum=DAYS 密码最短有效期 -w, --warning=DAYS 密码过期前多少天开始提示 -i, --inactive=DAYS 密码过期后多少天后该账号会被禁用
修改账号的密码有两种方式:
-
一种是使用交互式
# 示例1:修改 wangwu 的密码为 123456 [root@bogon ~]# cat /etc/shadow | grep wangwu wangwu:!!:19687:0:99999:7::19703: [root@bogon ~]# passwd wangwu Changing password for user wangwu. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@bogon ~]# cat /etc/shadow | grep wangwu wangwu:$6$JgS.UMHSmnkMc/ut$X81Wi9Pebh9uuPuS7KnZMRyGbR4zN3r8DxHxjXLuBurn97Sg/oz.gP4UudffXNvLgLu/M5usOYnWD0rt14dHm.:19687:0:99999:7::19703:
注意:在指定密码时,直接输入密码即可,因为没有提示信息。
-
另一种是使用非交互式
# 示例2:修改 lisi 的密码为 123456 [root@bogon ~]# echo 123456 | passwd --stdin lisi Changing password for user lisi. passwd: all authentication tokens updated successfully.
5.3.4 删除用户
删除用户要使用 userdel 命令来完成,它的语法格式为:
userdel [选项] <用户名|账号> 选项: -r 在删除账号的同时删除家目录和邮箱目录
示例1:删除 zhangsan,但保留家目录和邮件目录
[root@bogon ~]# ls /home 20_pass.txt lisi redhat wang5 zb zhangsan [root@bogon ~]# ls /var/spool/mail/ admin lisi redhat rpc wangwu zhangsan zhao6 zhao7 # 删除zhangsan 用户 [root@bogon ~]# userdel zhangsan [root@bogon ~]# ls /var/spool/mail/ admin lisi redhat rpc wangwu zhangsan zhao6 zhao7 [root@bogon ~]# ls /home 20_pass.txt lisi redhat wang5 zb zhangsan [root@bogon ~]# cat /etc/passwd | grep zhangsan
示例2:删除 zhao6 ,同时删除家目录和邮件目录
[root@bogon ~]# ls /var/spool/mail/ admin lisi redhat rpc wangwu zhangsan zhao6 zhao7 [root@bogon ~]# userdel -r zhao6 [root@bogon ~]# userdel -r zhao7 [root@bogon ~]# ls /var/spool/mail/ admin lisi redhat rpc wangwu zhangsan [root@bogon ~]#
5.3.5 用户提权
大部分情况下,我们都是在使用普通用户来进行管理操作,如果这个普通用户想查看超级用户的某些权限,此时就需要对这个普通用户进行提权(提升权限)。在 Linux 中可以使用 sudo 命令来实现。例如:
# 从 root 用户切换到 lisi 这个普通用户 [root@bogon ~]# su -l lisi [lisi@bogon ~]$ # 使用lisi来查看/root目录,发现没有查看权限 [lisi@bogon ~]$ ls -l /root ls: cannot open directory '/root': Permission denied # 使用 sudo 来提升 lisi 的权限,以便于能够查看 /root 目录,但提示在 sudoers 文件中没有 lisi 这个账号的信息,无法实现这个功能 [lisi@bogon ~]$ sudo -u lisi ls -l /root lisi is not in the sudoers file. This incident will be reported.
换句说话,要想 lisi 拥有 root 用户的某些权限,我们就需要把 lisi 这个账号添加到 /etc/sudoers 这个文件中。
vim /etc/sudoers 然后在这个文件中添加如下内容 ## Allow root to run any commands anywhere root ALL=(ALL) ALL lisi ALL=(ALL) ALL 1 2 3 4 1 表示要对那一个账号提权 2 ALL 表示任意的主机名 3 ALL 表示任意的用户 4 ALL 表示任意的指令
修改后:
[lisi@bogon ~]$ sudo -u root ls -l /root We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for lisi: Sorry, try again. [sudo] password for lisi: total 12 -rw-r--r--. 1 root root 44 Nov 22 19:31 a -rw-r--r--. 1 root root 365 Nov 22 19:12 access.log drwxr-xr-x. 4 root root 34 Nov 19 20:42 mydir -rw-r--r--. 1 root root 19 Nov 22 19:24 num
注意:输入的是当前登录用户的密码,而不是 root 用户的密码。
如果希望 lisi 只能执行 ls 命令时才会提权,则在 /etc/sudoers 文件中配置如下:
## Allow root to run any commands anywhere root ALL=(ALL) ALL lisi ALL=(ALL) /bin/ls
也就是对第三个 ALL 的地方修改为需要执行的命令的绝对路径即可。
除了对用户可以提权以外,还可以对组进行提权。当对组进行提权后,那么这个组下的所有用户都拥有了这个提权的功能。配置如下:
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL %lisi ALL=(ALL) ALL
配置好的使用方式与前面的用户提权的使用方式一样。
现有如下问题:
[root@bogon ~]# su -l lisi [lisi@bogon ~]$ sudo -u root ls /root [sudo] password for lisi: a access.log mydir num
发现执行这个命令时,需要输入当前的登录用户的密码,而当前用户已经登录了,为啥还需要再次输入密码呢?能否省掉?
答案是可以的,我们需要在配置的第三个 ALL 的地方指定不需要密码的配置即可。如下:
[root@bogon ~]# vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL lisi ALL=(ALL) NOPASSWD: ALL # 添加了 NOPASSWD 的前缀,表示执行命令时不需要输入密码 [root@bogon ~]# su - lisi [lisi@bogon ~]$ sudo -u root ls /root a access.log mydir num
5.4 用户组管理 ***
5.4.1 添加用户组
如果我们希望添加新的组而不是新用户时,可以使用 groupadd 命令来实现。它的语法格式为:
groupadd [选项] 组名称 选项: -g GID 指定新的用户组的标识号,默认是已有组的最大标识号加1 -r 建立一个系统组账号,与 -g 不能同时使用,它会分配的值是 1 ~ 999 之间。
示例1:向系统中添加一个组ID为 1009,组名为 sunqi 的新组
[root@bogon ~]# groupadd -g 1009 sunqi [root@bogon ~]# tail -3 /etc/group wang5:x:1004: zhangsan:x:1007: sunqi:x:1009:
示例2:创建一个名为 openlab 的组
[root@bogon ~]# groupadd openlab [root@bogon ~]# tail -3 /etc/group zhangsan:x:1007: sunqi:x:1009: openlab:x:1010:
5.4.2 修改用户组
我们还可以对已经存在的组进行修改,通过 groupmod 命令来实现。它的语法格式为:
groupadd [选项] 组名称 选项: -n 新组名 : 将用户组的名称修改为新组名
示例:将组名为 openlab 修改为 xianoupeng
[root@bogon ~]# groupmod -n xianoupeng openlab [root@bogon ~]# tail -3 /etc/group zhangsan:x:1007: sunqi:x:1009: xianoupeng:x:1010:
5.4.3 删除用户组
使用 groupdel 命令可以删除一个没有用户的组。它的语法格式为:
groupdel [选项] 组名称 选项:
示例:删除 xianoupeng 组
[root@bogon ~]# groupdel xianoupeng [root@bogon ~]# tail -3 /etc/group wang5:x:1004: zhangsan:x:1007: sunqi:x:1009: # 删除组名为 lisi 的组,结果发现不能删除,原因在于 lisi 这个组中有 lisi 这个用户存在 [root@bogon ~]# groupdel lisi groupdel: cannot remove the primary group of user 'lisi'
注意:使用 groupdel 命令来删除组时,只能删除空组。
5.4.4 给组设置密码
如果希望组也有密码,我们可以使用 gpasswd 命令,它的语法为:
gpasswd [选项] [用户] [组] 选项: -a, --add USER 将用户添加到组中 -d, --delete USER 将用户从组中删除 -r, --delete-password 删除组密码 -R, --restrict 访问组中成员 -M, --members USER,... 将多个用户添加到组 -A, --administrators ADMIN,...给组指派管理员
示例1:给 sunqi 组设置密码为 123456
[root@bogon ~]# cat /etc/gshadow | grep sunqi sunqi:!:: [root@bogon ~]# gpasswd sunqi Changing the password for group sunqi New Password: Re-enter new password: [root@bogon ~]# cat /etc/gshadow | grep sunqi sunqi:$6$KYCrQIaEbvbkqFs0$E8DMm9l.UbY/2I5P.QnqLO611IBiKN4nhggBhHv9Et2morJy/Uai39eU53R/B8RotL7qCmLnHjKfjXQa5pEaC/::
示例2:将wangwu添加到zhangsan组中
[root@bogon ~]# gpasswd -a wangwu zhangsan Adding user wangwu to group zhangsan
示例2:将wangwu从zhangsan组中删除
[root@bogon ~]# gpasswd -d wangwu zhangsan Removing user wangwu from group zhangsan
示例3:将wangwu添加到zhangsan组中,并设置为组管理员
[root@bogon ~]# gpasswd -a wangwu zhangsan Adding user wangwu to group zhangsan [root@bogon ~]# gpasswd -A wangwu zhangsan
示例4:将 lisi、admin 添加到 zhangsan 组
[root@bogon ~]# gpasswd -M admin,lisi zhangsan
示例5:访问 zhangsan 组中的用户
[root@bogon ~]# gpasswd -R zhangsan
示例6:删除sunqi组密码
[root@bogon ~]# gpasswd -r sunqi
5.5 查看用户和组
我们可以使用 id 命令来查看用户和组的信息
# 查看用户详细信息 [root@bogon ~]# id lisi uid=1002(lisi) gid=1002(lisi) groups=1002(lisi),1007(zhangsan) # 查看用户的组信息 [root@bogon ~]# groups lisi lisi : lisi zhangsan
5.6 查看用户登录
5.6.1 users
这个命令用于查看当前系统登录用户。
[root@bogon ~]# users root [root@bogon ~]# su -l lisi [lisi@bogon ~]$ users root
5.6.2 last
这个命令用于列出目前与过去登录到系统中的用户相关信息。该命令默认会去读取 /var/log/wtmp 文件,并把该文件记录的登录信息全部显示出来。
# 显示最近登录的两条信息 [root@bogon ~]# last -2 lisi pts/1 192.168.72.1 Sun Nov 26 21:00 still logged in root pts/0 192.168.72.1 Sun Nov 26 19:31 still logged in wtmp begins Sun Oct 15 19:45:11 2023 # 直接显示 /var/log/wtmp 文件中的最近 4 条登录信息 [root@bogon ~]# last -f /var/log/wtmp -n 4 lisi pts/1 192.168.72.1 Sun Nov 26 21:00 still logged in root pts/0 192.168.72.1 Sun Nov 26 19:31 still logged in reboot system boot 5.14.0-284.11.1. Sun Nov 26 19:31 still running root pts/1 192.168.72.1 Sun Nov 26 15:15 - 16:03 (00:48) wtmp begins Sun Oct 15 19:45:11 2023
5.6.3 lastlog
如果我们想要知道每个账号的最近登录时间,则可以使用 lastlog 来查看,这个命令会读取 /var/log/lastlog 文件。
[root@bogon ~]# lastlog Username Port From Latest root pts/0 192.168.72.1 Sun Nov 26 19:31:55 +0800 2023 bin **Never logged in** daemon **Never logged in** adm **Never logged in** lp **Never logged in** sync **Never logged in** .................... [root@bogon ~]# lastlog | grep lisi lisi pts/1 192.168.72.1 Sun Nov 26 21:00:02 +0800 2023 [root@bogon ~]# lastlog | grep root root pts/0 192.168.72.1 Sun Nov 26 19:31:55 +0800 2023
5.6.4 w
这个命令用于显示登录到系统的用户信息
[root@bogon ~]# w 21:07:55 up 1:36, 2 users, load average: 0.00, 0.00, 0.00 USER TTY LOGIN@ IDLE JCPU PCPU WHAT root pts/0 19:31 1.00s 0.12s 0.01s w lisi pts/1 21:00 7:47 0.01s 0.01s -sh # 第一行:显示当前系统时间、开机多久、登录的用户数和、系统平均负载(它是在1分钟、5分钟和15分钟内系统负载情况) # 第二行各个项的说明: # USER 表示登录的系统用户 # TTY 表示用户所使用的终端名称 # FROM 表示来源 # LOGIN@ 用户登录的日期和时间 # IDLE 表示空闲时间 # JCPU 某段时间内所有与该终端相关的进程任务所耗费的 CPU 时间 # PCPU 当前活动进程所使用的系统时间 # WHAT 表示当前用户执行的进程名称和选项 # 第三行以后,每一行代表一个用户登录的信息
5.6.5 who
这个命令用于显示当前登录系统的用户,这个命令是通过 /var/run/tump 文件来获取的信息。
[root@bogon ~]# who root pts/0 2023-11-26 19:31 (192.168.72.1) lisi pts/1 2023-11-26 21:00 (192.168.72.1)
5.7 手动添加用户和组
接下来我们以手动创建一个名为 haha 的用户来了解在 Linux 中通过 useradd 命令来创建的用户过程。整体实现步骤如下:
# 1、编辑 /etc/passwd 文件 vim /etc/passwd # 在这个文件的最后添加如下信息 haha:x:1008:1008::/home/haha:/bin/bash # 2、在/home 目录下新建 haha 目录 [root@bogon home]# mkdir -p /home/haha # 3、编辑 /etc/group 文件 vim /etc/group # 在这个文件最后添加如下信息 haha:x:1008: # 4、修改haha用户的家目录权限 [root@bogon home]# chown haha:haha /home/haha [root@bogon home]# ll total 4 -rw-r--r--. 1 root root 939 Nov 12 20:45 20_pass.txt drwxr-xr-x. 2 haha haha 6 Nov 26 21:21 haha # 5、从 /etc/skel 目录中复制文件到 /home/haha 目录下 [root@bogon home]# cp /etc/skel/.bash* /home/haha [root@bogon home]# cp -r /etc/skel/.mozilla/ /home/haha # 6、修改haha用户的家目录权限 [root@bogon home]# chown -R haha:haha /home/haha # 7、在 /var/spool/mail 目录下新建名为 haha 的文件 [root@bogon home]# touch /var/spool/mail/haha # 8、修改所属用户和所属组 [root@bogon mail]# chown haha:mail haha # 9、给haha用户指定密码 [root@bogon mail]# passwd haha Changing password for user haha. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully.