用户和组

1.1 用户和组

  • ​ Linux是一个具有很好的稳定性与安全性的多用户、多任务操作系统,在幕后保障Linux系统安全的则是一系列复杂的配置工作。
  • ​ Linux系统对用户分配如下:系统管理员(root)、系统用户(不可登录)和普通用户(可登录)。我们登录linux系统时输入的是账号,但是Linux系统并不会直接识别账号,而是通过我们建立账号时系统分配的ID号码,其中,系统管理员(root)ID为0,可登录的普通用户ID为1000~65535。
  • ​ 在建立用户账号时,系统会为用户账号分配至少两个ID,一个用户ID(User ID,UID),一个组ID(Group ID,GID)。UID的知识已经在前面介绍过了,下面了解一下GID,管理员(root)组ID为0,非系统组ID为1000~65535。
  • ​ 对于一个用户而言,只有唯一一个UID,但是可以有多个不同的组,分别为主组群和附属组,主组群名与用户名相同,且只有一个用户(本身),也可以称为私有组。主组群以外的组为附属组。
  • 在Linux系统中,用户账号、用户密码、用户组信息和用户组密码均存放在不同的配置文件中,所创建的用户账号及其相关信息(密码除外)均存放在/etc/passwd配置文件中。由于所有用户对passwd文件均有读取的权限,因此密码信息并未保存在该文件中,而是保存在/etc/shadow配置文件中。
1
2
3
4
5
6
7
8
9
在passwd配置文件中,一行定义一个用户账号,每行均由多个不同的字段构成,各字段值间用“:”分隔如下。
[root@fishyoung~]# cat /etc/passwd //查看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
……省略部分信息……
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
[root@fishyoung~]#

image-20230125100922706

因为passwd不再保存密码信息,所以用x占位代表,若要使某个用户账户不能登录Linux,只需设置该用户所使用的shell为/sbin/nologin即可。

1.2 添加,修改,删除

​ 用户账户的管理工作主要涉及用户账户的添加、修改和删除。添加用户账号就是在系统中创建一个新账号,然后为新账号分配用户号、用户组、主目录和登录shell等资源,刚添加的账号是被锁定的,无法使用。

1
2
3
(1)useradd命令用来添加新的用户账户,该命令操作的语法格式为:

useradd[参数选项]用户名

​ 使用useradd命令在创建用户账户时,默认家目录是 /home/“创建用户名”,默认的shell解释器为/bin/bash,同时会创建一个同名的主组群。这些默认值都是可以搭配参数选项进行更改的,具体的参数及作用见表3-2。

image-20230125101204481

1
2
3
4
5
6
7
8
9
10
11
12
13
14
【例3-1】创建一个普通用户zs。
[root@fishyoung~]# tail -1 /etc/passwd
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
[root@fishyoung~]# useradd zs
[root@fishyoung~]# tail -2 /etc/passwd
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
zs:x:1001:1001::/home/zs:/bin/bash
[root@fishyoung~]# ls /home
fishyoungzs
[root@fishyoung~]# id zs
uid=1001(zs) gid=1001(zs) groups=1001(zs)
分析得出:zs用户的UID为1001,GID为1001,同时创建用户私有组为1001,用户家目录默认为/home/zs,shell默认为/bin/bash。


【例3-2】创建一个普通用户ls,用户的UID为1111,GID为1001,不创建用户私有组,所属的附属组群为0和1,用户家目录为/home/lshome,shell为/sbin/nologin(不能登录使用)。

1
2
3
4
5
6
7
8
9
10
11
[root@fishyoung~]# tail -1 /etc/passwd
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
[root@fishyoung~]# useradd -u 1111 -g 1001 -n -G 0,1 -d /home/lshome -s /sbin/nologin ls
[root@fishyoung~]# tail -3 /etc/passwd
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
zs:x:1001:1001::/home/zs:/bin/bash
ls:x:1111:1001::/home/lshome:/sbin/nologin
[root@fishyoung~]# ls /home
fishyounglshomezs
[root@fishyoung~]# id ls
uid=1111(ls) gid=1001(zs) groups=1001(zs),0(root),1(bin)

【例3-3】创建一个普通用户ww,用户账户过期日期为2018年4月7日。

1
2
3
4
5
6
7
8
[root@fishyoung~]# date
Sat Apr7 11:28:52 CST 2018
[root@fishyoung~]# useradd -e 2018-04-07 ww
[root@fishyoung~]# ls /home
fishyounglshomewwzs
[root@fishyoung~]# id ww
uid=1112(ww) gid=1112(ww) groups=1112(ww)

学习使用passwd命令来设置用户登录密码,该命令操作的语法格式为:

1
passwd[参数选项][用户账户名]

​ 若指定了账户名称,则设置指定账户的登录密码,原密码被自动覆盖。只有root用户才有权设置指定账户的密码,一般用户只能设置或修改自己账户的密码(不带参数)。

image-20230125102003688

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
设置账户登录密码后,该账户就可以登录系统了,就可以继续完善【例3-3】了。
首先用ssh登录测试(ssh的用法后面会讲到),再更改系统时间为2018年4月6日 23:59:00,用ssh再次登录Linux系统进行测试。
[root@fishyoung~]# date //查看当前系统时间
Sat Apr7 11:49:30 CST 2018
[root@fishyoung~]# ssh [email protected] //用ww账户登录系统
[email protected]’s password: //输入登录密码
Your account has expired; please contact your system administrator
Authentication failed.∥账户过期,登录失败
[root@fishyoung~]# date -s "2018-04-06 23:59:00" //设置系统时间
Fri Apr6 23:59:00 CST 2018
[root@fishyoung~]# ssh [email protected] //用ww账户再次登录
[email protected]’s password:
Last failed login: Sat Apr7 11:49:36 CST 2018 from 192.168.244.128 on ssh:notty
There were 1 failed login attempts since the last successful login.
[ww@fishyoung~]$ pwd //登录成功,查看当前目录
/home/ww

(3)usermod命令用来修改用户的属性,该命令操作的语法格式为:

usermod[参数选项]用户账户名

Linux系统中的一切都是文件,系统管理员可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令修改已经创建的用户信息,如用户的UID、主组群、附属组群、默认shell等。usermod命令具体的参数及作用见表3-4。

image-20230125102252136

1
2
3
4
5
6
7
8
【例3-5】修改ww账户的过期时间为2018年5月7日,再进行登录测试。
[root@fishyoung~]# date
Sat Apr7 12:39:59 CST 2018
[root@fishyoung~]# usermod -e "2018-05-07" ww //修改过期时间
[root@fishyoung~]# ssh [email protected]∥登录测试
[email protected]’s password: //输入ww密码
[ww@fishyoung~]

(4)userdel命令用来删除用户,该命令操作的语法格式为:

1
userdel[-r]用户账户名

“-r”为可选项,若带上该参数,则在删除该账户的同时一并删除该账户对应的主目录。
【例3-7】删除之前创建的zs、ls、ww账户及其家目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@fishyoung~]# tail -4 /etc/passwd
fishyoung:x:1000:1000::/home/fishyoung:/bin/bash
zs:x:1001:1001::/home/zs:/bin/bash
ls:x:1111:1001::/home/lshome:/sbin/nologin
ww:x:2222:1000::/home/wwhome:/bin/bash
[root@fishyoung~]# ls /home
fishyounglshomewwhomezs
[root@fishyoung~]# userdel -rf zs //强制删除账户及其家目录
[root@fishyoung~]# userdel -rf ls
[root@fishyoung~]# userdel -rf ww
[root@fishyoung~]# ls /home
fishyoung
[root@fishyoung~]#
1
2
3
4
5
6
7
8
9
10
11
12
13
(1)groupadd命令用来增加一个新的用户组,该命令操作的语法格式为:
groupadd[-g]用户组
groupadd命令在创建用户组时,可以通过“-g”参数来指定GID号。
【例3-8】增加两个新组groupA和groupB。
[root@fishyoung~]# groupadd groupA
[root@fishyoung~]# groupadd -g 2222 groupB
[root@fishyoung~]# tail -3 /etc/group
fishyoung:x:1000:
groupA:x:1001:
groupB:x:2222:
[root@fishyoung~]#
用命令向系统中增加了一个新组groupA,新组的组标识号是在当前已有的最大组标识号的基础上加1,另外用命令向系统中增加了一个新组groupB,同时指定新组的组标识号为2222。

image-20230125102638149

1
2
3
4
5
6
7
8
9
10
【例3-9】新增两个用户组groupA和groupB。
[root@fishyoung~]# groupadd groupA
[root@fishyoung~]# groupadd -g 2222 groupB
[root@fishyoung~]# tail -3 /etc/group
fishyoung:x:1000:
groupA:x:1001:
groupB:x:2222:
[root@fishyoung~]#
用命令向系统中增加了一个新组groupA,新组的组标识号是在当前已有的最大组标识号的基础上加1,另外用命令向系统中增加了一个新组groupB,同时指定新组的组标识号为2222。

1
2
3
4
5
6
7
8
9
【例3-10】修改组groupA的GID号为3333和groupB的组名为NewgroupB。
[root@fishyoung~]# groupmod -g 3333 groupA
[root@fishyoung~]# groupmod -n NewgroupB groupB
[root@fishyoung~]# tail -3 /etc/group
fishyoung:x:1000:
groupA:x:3333:
NewgroupB:x:2222:
[root@fishyoung~]#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(3)groupdel命令用来删除用户组,该命令操作的语法格式为:
userdel[参数选项]用户账户名
【例3-11】删除上述创建的groupA和NewgroupB两个用户组。
[root@fishyoung~]# tail -3 /etc/group
fishyoung:x:1000:
groupA:x:3333:
NewgroupB:x:2222:
[root@fishyoung~]# groupdel groupA
[root@fishyoung~]# groupdel NewgroupB
[root@fishyoung~]# tail -3 /etc/group
postdrop:x:90:
postfix:x:89:
fishyoung:x:1000:
[root@fishyoung~]#