用户管理

1
2
3
4
##Linux下的用户有什么作用
1)系统上的每一个进程(运行的程序)都需要特定的用户运行
2)每一个文件都有特定的用户拥有,所以访问一个文件或目录受到用户的限制
3)进程能够以何种方式访问某一个文件或目录, 与进程所关联的用户有关

image-20240409145014306

用户相关查看命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 语法
id [option] [user]
id [选项] [用户名]
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
uid:user id
gid:group id
groups:组名
## 只显示uid
[root@localhost ~]# id -u root
0
## 只显示gid
[root@localhost ~]# id -g root
0
系统只认uid,用户名是给运维人员看的
在Linux系统中,uid为0的用户才是超级用户
## 查看用户登录哪个终端,登录时间 who
root tty1 2024-04-09 14:54
root pts/0 2024-04-09 11:09 (10.0.0.1)
root pts/1 2024-04-09 11:33 (10.0.0.1)
tty 代表的是服务器终端登录
pts代表的是远程链接工具登录
[root@localhost ~]# whoami ## 查看当前登录的用户名
root
## 查看用户信息文件
[root@localhost ~]# cat /etc/passwd

用户信息文件 /etc/passwd

image-20240409145743758

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## 以冒号为分隔符的情况下,文件被分为7列
[root@lb02 ~]# cat /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

[zls@localhost ~]# useradd wyl -c 'abc' 添加备注

第一列:用户名
第二列:密码占位符
第三列:用户的uid
第四列:用户所在组的gid
第五列:用户的描述信息(备注、注释)
第六列:用户家目录所在路径
第七列:用户登录使用的bash
## /sbin/nologin 不允许登录的用户 bash

用户密码存放文件/etc/shadow

image-20240409150039322

1
2
3
4
5
6
7
8
9
10
daemon:*:17834:0:99999:7:2:6627567:
第一列: 用户名
第二列: 密码 *和!! 代表没有密码
第三列: 密码修改的时间 从1970年开始计算到上一次变更密码的时间过了多少天
第四列: 密码最少使用天数 0代表无限制
第五列: 密码最长使用天数 99999代表无限制
第六列: 密码到期之前多少天开始提醒 提前7天提醒需要改密码了
第七列: 密码过期后N天强制变更密码 密码过期后2天,强制改密码
第八列: 账户失效时间,从1970年开始计算多少天
第九列: 空 保留列

练习创建1000个用户,密码都为1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo '1' |passwd --stdin lgj

;分号可以衔接多个命令执行,
&&衔接多个命令,但是需要判断前面的命令执行成功后,再执行后面的命令
#衔接命令
useradd lgj1;echo "1" | passwd --stdin lgj1 ==>;分号两边分别执行结果

[root@lb01 ~]# seq 1000|awk '{print "useradd lgj"$1";echo 1|passwd --stdin lgj"$1}'|bash

#脚本
vim useradd.sh

for i in {1..1000}; do
username="lgj$i"
useradd $username
echo "1" | passwd --stdin $username
done
运行sh文件
sh useradd.sh > /dev/null

Linux系统中用户的约定和规范

centOS7 centOS7
用户UID 作用 用户UID 作用
0 系统管理员(超级用户) 0 系统管理员(超级用户)
1-200 系统用户,由系统分配给进程使用 1-500 系统用户,由系统分配给进程使用运行服务,不需要登录系统
201-999 系统用户,运行服务,不需要登录系统 500+ 常规的普通用户
1000+ 常规的普通用户 / /

修改用户密码相关信息 chage (了解)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
bin:*:17834:0:99999:7:10::
-d //设置最近一次更改密码时间, 0下次登陆系统强制修改密码 // /etc/shadow 第三列
-m //设置用户两次改变密码之间使用"最小天数" // /etc/shadow 第四列
-M //设置用户两次改变密码之间使用"最大天数" // /etc/shadow 第五列
-W //设置密码更改警告时间 将过期警告天数设为“警告天数” // /etc/shadow 第六列
-I //设置密码过期天数后, 密码为失效状态 // /etc/shadow 第七列
-E //设置用户过期时间, 账户失效后无法登陆 // /etc/shadow 第八列
-l //显示用户信息
[root@lgj ~]# chage -l lgj
Last password change : Sep 01, 2014 //最近一次更改密码时间
Password expires : Sep 16, 2014 //密码过期时间
Password inactive : Sep 21, 2014 //密码失效时间
Account expires : Aug 31, 2015 //用户失效时间
Minimum number of days between password change : 2 //密码最短使用时间
Maximum number of days between password change : 15 //密码最长使用时间
Number of days of warning before password expires : 7 //密码过期前警告天数

用户相关命令–创建用户(增)

选项 作用
-u 指定uid
-g 指定gid(必须指定一个已存在的组)
-c 指定用户的备注(注释)
-d 指定用户的家目录
-M 不创建家目录
-s 指定用户登录的shell
-G 指定附加组
-r 创建一个用户uid在200 - 999之间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
使用useradd创建用户将影响到四个文件
/etc/passwd 存放用户名等信息
/etc/shadow 存放密码等信息
/etc/group 存放组信息
/etc/gshadow 存放组密码信息

如果手动创建用户不使用命令,需要分别在1./etc/passwd 2./etc/shadow 3./etc/group 4./etc/gshadow创建用户名组等信息,5.创建用户名的家目录6.拷贝环境变量文件cp /etc/skel/.bash* /home/abc111/

##创建用户命令 useradd
useradd [选项]... 用户名

创建用户名是lgj2 uid1004 用户组1001 备注-c是高杰大大 #//其中-g指定gid需要指定已经存在的uid
[root@lb01 ~]# useradd -u 1004 -g 1001 -c 高杰大大 lgj2

-d创建用户lgj6并指定家目录(如果指定的家目录已经存在,如指定aaa(存在)为家目录,会报错目录家目录已经存在,但是还是会创建有lgj6用户,但是没有环境变量)
[root@lb01 ~]# useradd lgj6 -d /root/aaa/lgj666
[root@lb01 ~]# useradd lgj7 -M 不创建家目录

## 指定用户附加组
[root@lb01 ~]# useradd lgj7 -G 1001,1005
[root@lb01 ~]# useradd lgj8 -G lgj,lgj5 同样指定的组需要已存在
[root@lb01 ~]# id lgj7
uid=1007(lgj7) gid=1007(lgj7) groups=1007(lgj7),1001(lgj),1005(lgj5)

用户相关命令–修改用户信息(改)

用户 作用
-u 指定用户的uid
-g 指定用户的gid,更换用户所在的主组(指定的组必须存在)
-c 修改备注信息
-d 修改用户家目录,修改/etc/passwd文件内容
-m 配合-d选项,修改完家目录后,迁移家目录
-s 修改用户登录的shell
-G 修改用户的附加组,会替换原来的附加组
-a 修改用户的附加组,配合-G使用,追加附加组
-L 锁定用户(封号)
-U 解锁用户(解封)
-l 修改用户名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## user modify
usermod [选项]... 用户名

修改用户lgj2的uid为1002,gid为1000,备注信息是你好 #指定的gid需要已存在
[root@lb01 ~]# usermod lgj2 -u 1002 -g 1000 -c 你好

## 修改用户家目录 注意:不能只使用-d
[root@localhost ~]# usermod zls000 -d /home/zls000 家目录下的环境变量不会迁移过去
[root@localhost ~]# usermod zls66 -m -d /opt/zls666 需要配合-m使用

如果lgj2主要组不在lgj2里(通过usermod修改了),那么使用userdel删除用户的时候lgj2用户组不会被删除,会提醒lgj2用户的现在用户组不是lgj2的主要组

[root@lb01 ~]# usermod lgj -G 0 修改lgj的附加组(覆盖原有的)
[root@lb01 ~]# usermod lgj -aG 100,110 修改lgj的附加组(追加用户组)

#修改用户登录的shell
[root@lb01 ~]# usermod lgj -s /sbin/nologin



#修改用户名
[root@lb01 ~]# usermod lgj1 -l lgj2
如果修改完将提醒旧的邮箱lgj1将不属于lgj1用户了,var/spool/mail/

用户相关命令–删除用户(删)

1
2
3
4
5
6
7
8
9
10
# user delete
userdel [选项]... 用户名
## 直接删除用户,类似于在/etc/passwd文件中把该用户行信息删除(家目录还在和所有用户相关文件都在)
[root@localhost ~]# userdel abd
## 递归删除用户及用户所有相关文件
[root@localhost ~]# userdel -r wyl

## 因为用户创建时没有创建家目录,所以会有提示,但是用户实际上还是被删除了
[root@localhost ~]# userdel -r zls888
userdel: zls888 home directory (/home/zls888) not found

用户扩展知识

创建用户时候会以下两个文件作为参照物

/etc/login.defs

/etc/defaults/useradd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
## 创建用户时,useradd命令需要读取的配置文件
过滤不需要的空行
[root@localhost ~]# grep -i '^[a-z]' /etc/login.defs
[root@localhost ~]# grep -Ev '^$|^#' /etc/login.defs
## 用户存放邮件的目录
MAIL_DIR /var/spool/mail
## 用户默认密码最长使用天数
PASS_MAX_DAYS 99999
## 用户默认密码最短使用天数
PASS_MIN_DAYS 0
## 密码最小长度5位数
PASS_MIN_LEN 5
## 密码快过期后,提前7天提醒
PASS_WARN_AGE 7
## 普通用户最小UID
UID_MIN 1000
## 普通用户最大UID
UID_MAX 60000
## 系统用户最小UID
SYS_UID_MIN 201
## 系统用户最大UID
SYS_UID_MAX 999
## 组最小ID
GID_MIN 1000
## 组最大ID
GID_MAX 60000
## 系统组最小ID
SYS_GID_MIN 201
## 系统组最大ID
SYS_GID_MAX 999
## 默认情况下,创建用户会创建该用户的家目录
CREATE_HOME yes
## 创建用户家目录时,权限的umask为077,也就是用户家目录的目录权限为700
UMASK 077
## 创建用户时,是否创建出用户的同名组 yes:创建 no:不创建
USERGROUPS_ENAB yes
## 用户密码的加密算法
ENCRYPT_METHOD SHA512


## 创建用户时,useradd命令需要读取的配置文件
[root@localhost ~] cat /etc/default/useradd
## 如果/etc/login.defs 中的USERGROUPS_ENAB是yes,那就不读取改行配置
## 如果/etc/login.defs 中的USERGROUPS_ENAB是no,那就走该行配置,把创建的用户加入gid为100的组
GROUP=100
## 创建用户时,默认用户家目录放在/home下
HOME=/home
## 用户账户有没有期限 -1表示不启用
INACTIVE=-1
## 账号终止日期,不设置表示不启用
EXPIRE=
## 用户登录时的shell
SHELL=/bin/bash
## 用户家目录下的环境变量文件存放原始目录
SKEL=/etc/skel
## 创建用户是否同时创建邮箱
CREATE_MAIL_SPOOL=yes