Linux 用户和组管理
用户和组管理
- 6.1 用户和组的分类
- 6.1.1 用户分类
- 6.1.2 用户组分类
- 6.2 用户和组的配置文件
- 6.2.1 /etc/passwd 存储系统中所有用户的基本信息
- 6.2.2 /etc/shadow 保存用户密码
- 6.2.3 /etc/group 储存用户组信息
- 6.2.4 /etc/gshadow 保存组的密码信息
- 6.2.5 /etc/skel 用户家目录下的相关隐藏文件
- 6.2.6 /etc/default/useradd 创建用户的相关信息
- 6.2.7 /etc/login.defs 设置用户帐号限制的文件
- 6.2.8 /var/spool/mail 存储系统邮件的默认位置
- 6.3 用户管理*****
- 6.3.1 添加用户 useradd
- 6.3.2 修改用户 usermod
- 6.3.3 修改密码 passwd
- 6.3.4 删除用户 userdel
- 6.3.5 用户提权 sudo
- 6.4 用户组管理****
- 6.4.1 添加用户组 groupadd
- 6.4.2 修改用户组 groupmod
- 6.4.3 删除用户组 groupdel
- 6.4.4 给组设置密码 gpasswd
- 6.5 查看用户和组 id
- 6.6 查看用户登录
- 6.6.1 查看当前系统登录用户 user
- 6.6.2 目前与过去登录到系统中的用户相关信息 last
- 6.6.3 每个账号的最近登录时间 lastlog
- 6.6.4 显示登录到系统的信息 w
- 6.6.5 显示当前登录系统的用户 who
- 6.7 手动添加用户和组
6.1 用户和组的分类
6.1.1 用户分类
在Linux中,用于分以下三类:
-
超级用户(root):用于管理操作系统,它的权限极高,一般在创建用户等条件下才会使用,它的编号为 0,简单来说,编号为0的用户就是超级用户,当要进行系统管理、维护任务的时候才会使用 root 账号
-
系统用户:用于系统能够正常运行时所需要的用户,这类用户不是用来登录的,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题,它的编号在 1-999 之间
-
普通用户:用于能够让使用者使用 Linux 系统功能所创建的用户,大多数情况下,都是使用这类用户,它的编号 1000-6000 之间,日常事务,启动某个软件等,都使用普通用户。
对 Linux 中的用户类型,可以查看 /etc/login.defs 文件
[root@bogon ~]# vim /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 # 默认在创建用户时,需要创建用户的家目录
6.1.2 用户组分类
在 Linux 中用户组也分为以下两类:
-
基本组:也叫私有组,它是建立用户时,如果没有指定的用户所属组,则系统自动建立一个与用户名相同名称的组名,这个组就是基本组
-
附加组:也叫公有组,它可容纳多个用户,组中的用户都具有所有组织拥有的权限
注意:一个用户只能有一个基本组,但是可以有零到多个附加组
6.2 用户和组的配置文件
在Linux中,用户名、密码、用户组和用户密码都是保存在不同的文件配置文件中
/etc/passwd:保存用户账号文件/etc/shadow:保存用户的密码文件/etc/group:用于保存用户组的文件/etc/gshadow:用于保存用户组密码的文件/etc/skel:用户保存用户家目录文件/etc/default/useradd:用户定义添加用户的信息文件
6.2.1 /etc/passwd 存储系统中所有用户的基本信息
/etc/passwd 文件是系统用户配置文件,存储了系统中所有用户的基本信息
,并且所有用户都可以对此文件执行读操作,passwd 是一个文本文件,用于定义系统的用户账号,由于这个文件是所有用户都需要读取的权限,所以文件中只定义该用户的账号,而不保存用户的密码
[root@bogon ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2224 Oct 15 20:09 /etc/passwd[root@bogon ~]# tail -3 /etc/passwd
dnsmasq:x:979:977:Dnsmasq DHCP and DNS server:/var/lib/dnsmasq:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
redhat:x:1000:1000:redhat:/home/redhat:/bin/bash
在这个文件中,每一行记录了一个用户信息,而用户信息是以:英文冒号来进行分隔的7个部分组成
root : x : 0 : 0 : root : /root : /bin/bash
redhat : x : 1000 : 1000 : redhat : /home/redhat: /bin/bash
1 2 3 4 5 6 71 用户名
2 用户登录密码的占位符,如果为 x 表示有密码,如果为空或 * 表示没有密码
3 用户的 ID,即 uid
4 用户所属组 ID,即 gid
5 用户的个人次数,如果用户的完整名称、地址、办公电话、家庭住址等个人信息
6 用户的家目录
7 用户的默认登录所能使用的 shell 脚本
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
- 用户名
就是一串代表用户身份的字符串
- 用户登录密码的占位符
“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在 /etc/shadow 文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全
- UID:
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户
- GID:
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号
- 描述性信息
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已
- 主目录
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。
例如:root 超级管理员账户的主目录为 /root,普通用户的主目录为 /home/yourIDname,即在 /home/ 目录下建立和用户名相同的目录作为主目录
- 默认Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。通常情况下,Linux 系统默认的解释器是 bash(/bin/bash),当然还有其他命令解释器,例如 sh、csh 等。
6.2.2 /etc/shadow 保存用户密码
这个文件是用户保存 用户密码
的文件,可以通过以下命令来查看这个文件
[root@bogon ~]# ll /etc/shadow
----------. 1 root root 1192 Nov 3 22:43 /etc/shadow[root@bogon ~]# tail -3 /etc/shadow
dnsmasq:!!:19645::::::
tcpdump:!!:19645::::::
redhat:$6$rc5bTNJF.sOd3aBV$COJBcIMOyIGX2cMYSNaWujsCxR1Utj1OAH73cbP0nr6zkdK/KW21TXKp.jwCkoJnqoLf0Kf3pW1qu7cFndoQO0:19645:0:99999:7:::
这个文件每一行记录了一个用户的密码信息,一共有 9 个字段,分别如下表示:
redhat :
1
**$6$mPvxn$yHk9Lqu5DdB**/30WmRM272dY6GxzFPSmfeUZz/DikNVfYO8tPPTalLnksxcj7KjU2.4SG MG5HLIWwqK6GqLYwu. :
2
19645 : 0 : 99999 : 7 : : :
3 4 5 6 7 8 91 用户名,它与 /etc/passwd 文件中第一个字段相同
2 用户的密码,它包括算法、盐和密文。在这个字段中 **$id$** 表示的就是算法(id为1表示 md5加密, id为5表示sha256加密,id为6表示sha512加密)。如果这个字段的值为 !! 则表示账号已被锁定不能 登录,如果这个字段为 * 号表示该用户无须登录
3 最后一次修改密码时间,单位为天,是从 1964 年 4 月 5 日 开始到创建账号时的天数差
4 最小时间间隔,即经过多小天后才可以再次修改密码,单位也是天,如果值为 0,则表示没有限制
5 最大时间间隔,密码经过多少天后必须修改,否则不能登录。默认值为 999999(237年),表示不限制
6 警告时间,在密码失效之前多少天会有提示信息,默认值为 7 天。如果值为 0 表示不限制
7 不活动时间,密码过期后多少天就禁用该账号,0 表示过期后立即失效;-1 表示密码永远不过期;正数 表示往后宽限多少天。
8 密码失效时间,以距离 1964 年 4 月 5 日的天数来表示,如果值为空表示永久可用
9 保留字段,目前暂无使用
6.2.3 /etc/group 储存用户组信息
这个文件中存储的用户组信息
[root@bogon ~]# ll /etc/group
-rw-r--r--. 1 root root 856 Oct 15 20:09 /etc/group[root@bogon ~]# tail -3 /etc/group
dnsmasq:x:977:
tcpdump:x:72:
redhat:x:1000:
在这个文件中每一行记录一个组信息,使用:英文冒号分隔成4个字段
redhat : x : 1000 :
1 2 3 41 表示组名称
2 表示组的密码占位符,真正的密码保存在 /etc/gshadow 文件中
3 表示组的 id 值
4 表示附加组中的用户列表,以英文逗号分隔,如果为空表示没有附加用户
6.2.4 /etc/gshadow 保存组的密码信息
这个文件是用于保存组的密码信息
,存放组群的加密口令,组管理员等信息,只对 root 用户可读
[root@bogon ~]# ll /etc/gshadow
----------. 1 root root 690 Oct 15 20:09 /etc/gshadow[root@bogon ~]# tail -3 /etc/gshadow 显示文件最后 3 行数据
dnsmasq:!::
tcpdump:!::
redhat:!::
在这个文件中每一行代表一个组的密码信息,通过:英文冒号分隔成4段
redhat : ! : :
1 2 3 41 组名称,与 /etc/group 文件中第一列相同
2 组密码,如果值为 ! 表示没有密码
3 组管理的用户名,很少使用
4 组中附加用户,也 /etc/group 中第 4 列相同
6.2.5 /etc/skel 用户家目录下的相关隐藏文件
这个文件中记录是用户家目录下的相关隐藏文件
。默认情况下,当新创建好一个用户后,会在这个用户的家目录下新建一个隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的
6.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 指向的地址相同
6.2.7 /etc/login.defs 设置用户帐号限制的文件
/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。/etc/login.defs 文件用于在 Linux 创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度等等
[root@localhost ~]# ll /etc/login.defs
-rw-r--r--. 1 root root 7778 Jul 12 2023 /etc/login.defs
[root@localhost ~]# vim /etc/login.defs
6.2.8 /var/spool/mail 存储系统邮件的默认位置
[root@localhost ~]# ll /var/spool/mail
total 0
-rw-rw----. 1 redhat mail 0 Oct 12 14:17 redhat
-rw-rw----. 1 rpc mail 0 Oct 12 14:06 rpc
[root@localhost ~]# vim /var/spool/mail
6.3 用户管理*****
6.3.1 添加用户 useradd
添加用户需要使用 useradd
选项说明:
-c:设定与用户相关的说明信息,如:用户的邮箱、电话、真实姓名等,它的值会记录在 /etc/passwd 文件中的第5个字段中
-d:用户指定在创建用户时的家目录,默认情况下是在 /home/ 用户名目录下
-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/DikNVfYO8tPPTalLnksxc
j7K jU2.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/DikNVfYO8tPPTalLnksxc
j7K jU2.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:新建一个名为 admin 的账号,并将其家目录指定为 /admin,基本组为 wheel,附加组为 adm,root admin
[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
.......
示例3:新建一个名为 wang5 的账号,账号过期时间为2023-12-12(-e),账号相关信息:用户的姓名、电话(-c)
[root@bogon ~]# useradd -e "2023-12-12" -c "wang5,1330000" 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:
示例4:新建一个名为 zhao6 的账号,并禁止登录(/sbin/nologin)且不创建家目录(-M)
[root@bogon ~]# useradd -M -s /sbin/nologin zhao6
6.3.2 修改用户 usermod
修改用户用 usermod 命令
选项说明:
-l :更改用户的名称,该用户名未登录的情况下才能使用
-L :锁定当前账号,即当前账号不能登录
-U :解锁当前账号,即恢复当前账号登录
-g :强制使用 GROUP 作为新的主组
uesradd 选项都可用
示例1:修改账号 zhangsan 的有效期(-e)为 2023-12-20,宽限期为 8 天(-f)
[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(-s)
[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 目录下(-d)
[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
6.3.3 修改密码 passwd
当使用 uesradd 命令来添加用户后,该用户还不能登录,因为没有为该用户设置密码 ,只有设置密码后,才可以登录
选项说明:
-k, --keep-tokens : 保持身份验证不过期
-d, --delete : 删除账号的密码,也可以删除锁
-l, --lock : 锁定当前账号密码
-u, --unlock :解锁当前账号密码
-e, --expire : 指定账号的过期时间
-x, --maximum=DAYS :密码最长有效期
-n, --minimum=DAYS :密码最短有效期
-w, --warning=DAYS : 密码过期前多少天开始提示
-i, --inactive=DAYS : 密码过期后多少天后该账号会被禁用
修改账号的密码有两种方式:交互式和非交互式
交互式模式:就是在终端上执行,shell 等待你的输入,并且立即执行你提交的命令。这种模式被称作交互式是因为 shell 与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当退出后,shell 也终止了。
- 交互式设置密码:passwd 密码
举例:最常见的交互式 shell,就是利用虚拟机登录 Linux 系统时的那个等待登录界面:系统在等待我们键入登录的用户名和密码,这就是一种交互式shell
示例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$X81Wi9Pebh9uuPuS7KnZMRyGbR4zN3r8DxHxjXLuBurn97
Sg/oz.gP4UudffXNvLgLu/M5usOYnWD0rt14dHm.:19687:0:99999:7::19703:
注意:在指定密码时,直接输入密码即可,因为没有提示信息
非交互式模式:是以 shell script (非交互)方式执行。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell 也就终止了。
- 非交互式设置密码:echo 密码 | passwd --stdin 用户名
举例:非交互式shell就像我们写的那些很简单的脚本,比如一个脚本展示出 :helloworld 。这个脚本不需要我们对其进行交互,它就只是很简单的将其脚本中的命令按顺序执行
示例2:修改 lisi 的密码为 123456
[root@bogon ~]# echo 123456 | passwd --stdin lisi
Changing password for user lisi.
passwd: all authentication tokens updated successfully.
6.3.4 删除用户 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 ~]#
6.3.5 用户提权 sudo
大部分情况下,都是在使用普通用户来进行管理操作,如果这个普通用户想查看超级用户的某些权限,此时就需要对这个普通用户进行提权(提升权限)
提权的方法:
- 通过 vim 命令进入 /etc/sudoers文件
- 通过命令 visudo 直接进入这个文件
[root@nginx1 ~]# useradd test
[root@nginx1 ~]# echo redhat | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.
[root@nginx1 ~]# su -l test
Last login: Thu Sep 11 16:38:06 CST 2025 on pts/0# test用户没有权限去查看/root目录
[test@nginx1 ~]$ ll /root
ls: cannot open directory '/root': Permission denied
[test@nginx1 ~]$ sudo -u test ll /root
test is not in the sudoers file. This incident will be reported.# 想 lisi 拥有 root 用户的某些权限,就需要把 lisi 这个账号添加到 /etc/sudoers 这个文件中
想 lisi 拥有 root 用户的某些权限,就需要把 lisi 这个账号添加到 /etc/sudoers 这个文件中
通过:x!
强制保存退出(只读文件)
test ALL=(ALL) ALL
1 2 3 4
1 :表示要对那一个账号提权
2 :ALL 表示任意的主机名
3 :ALL 表示任意的用户
4 :ALL 表示任意的指令
[test@nginx1 ~]$ sudo -u root ls -l /root
[sudo] password for test:
total 4
drwxr-xr-t. 2 root root 32 Aug 29 16:19 111
-rwxrwxrwx. 1 root root 8 Sep 5 17:27 aaa
注意:输入的是当前登录用户的密码(test用户),而不是 root 用户的密码
如果希望 test 只能执行 ls 命令时才会提权,则在 /etc/sudoers 文件中配置如下:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
test ALL=(ALL) /bin/ls
除了对用户可以提权以外,还可以对组进行提权。当对组进行提权后,那么这个 组下的所有用户都拥有了这个提权的功能。配置如下:
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
%test ALL=(ALL) ALL
配置好的使用方式与前面的用户提权的使用方式一样
现有如下问题:
[root@nginx1 ~]# su -l lisi
[test@nginx1 ~]$ sudo -u root ls /root
[sudo] password for lisi:
a access.log mydir num
发现执行这个命令时,需要输入当前的登录用户的密码,而当前用户已经登录了,还需要再次输入密码呢?
省掉再次输入密码这个步骤:需要在配置的第三个 ALL 的地方指定不需要密码的配置即可。如下:
[root@nginx1 ~]# vim /etc/sudoers
## Allow root to run any commands anywhereroot ALL=(ALL) ALL
test ALL=(ALL) NOPASSWD: ALL # 添加了 NOPASSWD 的前缀,表示执行命令时不需要输入密码[root@nginx1 ~]# su - test
[test@nginx1 ~]$ sudo -u root ls /root
111 aaa
6.4 用户组管理****
6.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:
6.4.2 修改用户组 groupmod
对已存在的组进行修改,
选项说明:
-n:新组名 : 将用户组的名称修改为新组名
示例:将组名为 openlab 修改为 xianoupeng
[root@bogon ~]# groupmod -n xianoupeng openlab
[root@bogon ~]# tail -3 /etc/group
zhangsan:x:1007:
sunqi:x:1009:
xianoupeng:x:1010:
6.4.3 删除用户组 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 命令来删除组时,只能删除空组
6.4.4 给组设置密码 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$Ch0pXKZkjA/RQKC.$ybwbiB0awBto7M1yR3DvHG.nk38esR2Uqe6er4ixQIzApBoRMKCtuCTIGyqdgvF1j9oqX71OVaZ60vacRszJw1::
示例2:将 wangwu 添加到 zhangsan 组中去
[root@bogon ~]# gpasswd -a wangwu zhangsanadding user wangwu to group zhangsan
示例3:将 wangwu 从 zhangsan 删除
[root@bogon ~]# gpasswd -d wangwu zhangsanRemoving user wangwu from group zhagnsan
示例4:将 wangwu 添加到 zhangsan 组中,并设置为组管理员
[root@bogon ~]# gpasswd -a wangwu zhangsanAdding user wangwu to group zhangsan[root@bogon ~]# gpasswd -A wangwu zhangsan
6.5 查看用户和组 id
可以通过 id 命令来查看用户和组的信息
查看用户的详细信息
[root@bogon ~]# id wang5
uid=1003(wang5) gid=1003(wang5) groups=1003(wang5)
查看用户组的信息
[root@bogon ~]# groups wang5
wang5 : wang5
6.6 查看用户登录
6.6.1 查看当前系统登录用户 user
这个命令用来查看当前系统的登录用户
[root@bogon ~]# users
root
[root@bogon ~]# su -l lisi
[lisi@bogon ~]$ users
root
6.6.2 目前与过去登录到系统中的用户相关信息 last
列出目前与过去登录到系统中的用户相关信息,该命令默认读取 /var/log/wtmp 文件
# 显示最近登录的两条信息
[root@nginx1 ~]# last -2
root pts/1 192.168.98.1 Thu Sep 11 16:42 still logged in
root pts/0 192.168.98.1 Thu Sep 11 15:53 still logged inwtmp begins Thu Feb 27 16:19:49 2025# 直接显示 /var/log/wtmp 文件中的最近 4 条登录信息
[root@nginx1 ~]# last -f /var/log/wtmp -n 4
root pts/1 192.168.98.1 Thu Sep 11 16:42 still logged in
root pts/0 192.168.98.1 Thu Sep 11 15:53 still logged in
reboot system boot 5.14.0-503.11.1. Thu Sep 11 15:51 still running
root pts/0 192.168.98.1 Fri Sep 5 15:56 - 17:32 (01:35)wtmp begins Thu Feb 27 16:19:49 2025
6.6.3 每个账号的最近登录时间 lastlog
想要知道每个账号的最近登录时间,可以使用 lastlog 命令来查看,这个命令会读取 /var/log/lastlog 文件
[root@nginx1 ~]# lastlog
Username Port From Latest
root pts/1 192.168.98.1 Thu Sep 11 16:42:41 +0800 2025
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
....................[root@nginx1 ~]# lastlog | grep test
Username Port From Latest
test pts/0 Thu Sep 11 16:51:44 +0800 2025
[root@nginx1 ~]# lastlog | grep root
root pts/1 192.168.98.1 Thu Sep 11 16:42:41 +0800 2025
6.6.4 显示登录到系统的信息 w
显示登录到系统的信息
[root@bogon ~]# w21:08:01 up 1:35, 1 user, load average: 0.00, 0.01, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 19:33 0.00s 0.41s 0.03s w// 第一行:显示当前系统时间。开机多久、登录的用户数和、系统平均负载(它是在1分钟、5分钟和15分钟内系统负载情况)// 第二行:各个项的说明:USER 表示登录的系统用户TTY 表示用户所使用的终端名称FROM 表示来源LOGIN@ 用户登录的日期和时间IDLE 表示空闲时间JCPU 某段时间内所有与该终端相关的进程任务所耗费的 CPU 时间PCPU 当前活动进程所使用的系统时间WHAT 表示当前用户执行的进程名称和选项
// 第三行以后,每一行代表一个用户登录的信息
6.6.5 显示当前登录系统的用户 who
这个命令用于显示当前登录系统的用户,这个命令是通过 /var/run/utmp 文件来获取的信息
/var/run/utmp :记录当前登录用户信息的重要文件
[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)
6.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.