第5章 用户和组管理

第5章 用户和组管理

5.1 用户和组的分类

5.1.1 用户分类

在 Linux 中,用于分为以下三类:

  1. 超级用户:它是用于管理操作系统,它的权限非常高,一般在创建用户等条件下才会使用,它的编号为 0。简单来说,编号为 0 的用户就是超级用户。

  2. 系统用户:它是用于系统能够正常运行时所需要的用户,这类用户不是用来登录的,它的编号在 1~999 之间。

  3. 普通用户:它是用于能够让使用者使用 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 中用户组也分为以下两类:

  1. 基本组,也叫私有组,它是建立用户时,如果没有指定用户所属组,则系统自动建立一个与用户名相同名称的组名,这个组就是基本组。

  2. 附加组,也叫公有组,它可以容纳多个用户,组中的用户都具有所有组织拥有的权限。

注意:一个用户只能有一个基本组,但是可以有零到多个附加组。

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.
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
第五章基于struts2的名片管理系统主要介绍了如何使用struts2框架来开发一个名片管理系统。名片管理系统用于记录和管理个人名片的相关信息,包括姓名、职位、联系方式等。 在这一章中,我们首先介绍了struts2框架的基本概念和架构。struts2是一个基于MVC设计模式的开源框架,它将请求、处理和响应分别交给Action、Interceptors和Result来处理,从而实现了请求的分发和处理。 接着,我们详细介绍了如何使用struts2框架来实现名片管理系统的各个功能。首先,我们创建了一个名片Action类,用于处理名片相关的请求。通过配置struts.xml文件,我们将名片Action与相应的URL路径进行映射,以便正确地分发请求。 在名片Action中,我们定义了各种方法来处理不同类型的请求,如查询名片、添加名片、更新名片等。通过在方法中使用struts2框架提供的注解和标签,我们可以很方便地获取和处理请求参数,然后进行相应的业务逻辑操作。 除了Action类之外,我们还介绍了如何使用struts2提供的标签来简化前端页面的开发。通过使用struts2的标签,我们可以方便地将Java对象和HTML表单进行绑定,从而实现数据的传递和显示。 最后,我们还介绍了如何使用struts2提供的验证器和拦截器来增强名片管理系统的安全性和可靠性。通过配置拦截器,我们可以在请求到达Action之前进行一些操作,如身份验证、日志记录等。 总之,第五章基于struts2的名片管理系统详细介绍了如何使用struts2框架开发一个完整的名片管理系统,通过学习这一章的内容,读者可以掌握使用struts2框架开发Web应用的基本方法和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

璀云霄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值