用户管理
用户管理
一、用户管理--理论
1、什么是linux多用户多任务?
linux系统允许多个用户同时登录系统,并执行各自应用程序
2、linux为什么需要用户管理
linux是一个多用户系统,用户管理可以帮助系统管理员对系统的用户进行追踪;同时linux也是一个多任务系统,用户管理可以控制用户对系统资源的访问,通过用户和用户组,使得不同用户对同一文件权限不同
3、linux中有几种用户?作用分别是?
- root用户:管理操作系统的各种配置服务、管理用户等
- 虚拟用户:系统或程序创建的用户,用来执行所属应用程序的运行
- 普通用户:由root创建,用户权限较低,可以按需指向不同的任务
4、如何理解linux的用户、用户组和文件的关系?
linux是一个多用户系统,通过“用户和用户组”为文件解决权限问题,为此引入“文件所有者、用户组成员、其他用户”的概念,使得每个对象对同一文件具有不同权限
5、什么是linux的主组、附加组
- 主组
- 用户的初始组
- 用户有且只能属于一个主组
- 用户只能更换主组,不能删除主组(若主组为空,则系统会自动删除)
- 用户创建的文件属于改用的主组
- 附加组
- 用户可以属于零个或多个附加组
- 附加组可以直接删除,而无需关心是否所属用户
- 附加组可以新增和移除任意个所属用户
6、如何理解linux用户和用户组的关系
- 一对一:即一个用户可以存在于一个组中,也可以使组中唯一的成员
- 一对多:即一个用户可以存在于多个组中,那么此用户具有多个组的权限
- 多对一:即多个用户可以存在一个组中,同一个组中的用户具有相同的权限
- 多对多:即多个用户存在多个组中,是上面三种关系的拓展
7、如何理解linux的root用户?root用户的特点是什么?
- root是linux系统中UID为0的用户
- root用户是系统中唯一的超级管理员,拥有系统的所有权限
- root用户所在的组称为“root组“,处于root组中的普通用户可以通过sudo命令获取root权限
8、linux可以对用户、用户组做哪些管理
- 添加用户及用户组
- 更改用户及用户组
- 删除用户及用户组
9、linux用户配置文件,每个字段解释一下?
- /etc/passed——管理用户UID/GID等重要参数
- /etc/shadow——管理用户密码
- /etc/group——管理用户组相关信息
- /etc/gshadow——管理用户组密码
- /etc/skel——用户家目录的模板文件,在建立新用户时初始化用户家目录
10、关于linux用户管理、设置的配置文件有哪些?他们之间的联系是?
-
用户管理文件
- /etc/passwd
- /etc/shadow
- /etc/group
- /etc/gshadow
- /etc/skel
- /home
-
配置文件之间的联系,及创建用户的过程
①在/etc/passwd写入新用户信息
②在/etc/group写入用户组信息
③在/etc/shadow写入用户密码的信息
④在/etc/gshadow写入用户组密码的信息
⑤拷贝/etc/skel的文件到/home/新用户目录下
11、linux存放用户密码的 文件是?该文件有什么特点?
存放密码的文件是/etc/shadow;主要特点是没有任何权限,
除了root之外,任何用户不可读取、写入、执行
[root@server ~]# ls -l /etc/shadow
----------. 1 root root 1471 Jun 29 22:55 /etc/shadow
12、linux的UID、GID默认新建规则是?
二者的新建规则:都是从1000开始创建,如创建新用户的UID为1000,则创建新组的GID也为1000
二、用户管理--命令
1、groupadd--创建新的用户组
用户组文件存放于/etc/group
- 文件结构

- 参数
| 参数 | 功能 |
|---|---|
| -g | 设置用户组ID |
| -p | 设置用户组密码 |
- 示例
[root@server ~]# groupadd opslinux
2、groupmod--更改用户组属性
-
参数
参数 功能 -g 设置用户组ID -p 设置用户组密码 -n 设置用户组名称 -
示例
#01:修改用户组ID
[root@server ~]# groupmod -g 2023 opslinux
#02:修改用户组名称
[root@server ~]# groupmod -n devops opslinux
3、groupdel--删除用户组
-f #强制删除而不询问
- 示例
[root@server ~]# groupdel devops
4、useradd--创建并设置用户信息
- 用户文件存放于/etc/passwd
- 文件结构

- 参数
| 参数 | 功能 |
|---|---|
| -u | 设置用户ID |
| -g | 设置用户对应主组 |
| -G | 设置用户对应附加组 |
| -c | 添加备注文字 |
| -s | 设置用户默认shell终端 |
| -d | 设置用户登录时所使用的家目录 |
| -e | 设置用户终止日期 |
- 示例
#01:添加新用户USER01时加入附加组GROUP01
[root@server ~]# useradd -G GROUP01 USER01
#02:查看USER01的组信息
[root@server ~]# id USER01
uid=2007(USER01) gid=2007(USER01) groups=2007(USER01),2500(GROUP01)
5、usermod--修改用户账号信息
- 参数
| 参数 | 功能 |
|---|---|
| -u | 修改用户ID |
| -g | 修改用户主组 |
| -G | 修改用户附加组 |
| -a | 将用户添加到附加组 |
| -l | 修改用户名 |
| -L | 锁定用户,是密码立即失效 |
| -U | 解除锁定,使密码恢复正常 |
6、passwd--修改用户密码
linux不允许没有密码的用户登录系统,因此新创建的用户处于锁定状态,需要设置密码之后才能登录系统
- 语法:passwd 用户名
- 参数
| 参数 | 功能 |
|---|---|
| -d | 清除已有密码 |
| -e | 下次登录时强制修改密码 |
| -l | 锁定用户的密码值,不允许修改 |
| -u | 解锁用户的密码值,允许修改 |
- 非交互式修改密码
[root@server ~]# echo 123456 | passwd --stdin USER01
Changing password for user USER01.
passwd: all authentication tokens updated successfully.
7、userdel--删除用户账号
- 参数
| 参数 | 功能 |
|---|---|
| -f | 强制删用户账号而不询问 |
| -r | 删除用户家目录及其内部全部文件 |
- 建议注释而不是直接删除

8、查看用户相关信息
-
id--查看当前用户
![image-20230701232019854]()
id + 用户名 #查看指定用户
- whoami--显示当前用户名

-
who--查看当前登录用户信息
![image-20230701232256457]()
-
w--显示已登录的信息

9、su--切换用户身份
su - #完全切换用户身份
[root@server ~]# su - lifang01
Last login: Mon Jun 19 13:22:57 CST 2023 on pts/0
[lifang01@server ~]$
- 切换用户身份的注意事项
- 从root往普通用户切换不需要密码,但是反之则需要root的密码
- 切换用户前后的工作路径时不变的
- 普通用户没有办法访问root的家目录,但反之则可以
10、visudo--编辑/etc/sudoers文件
visudo -c #检查/etc/sudoers文件的语法错误

示例:使用普通用户USER01在/opt下创建文件t.txt
#01:查看/opt文件夹权限
[USER01@server ~]$ ls -ld /opt
drwxr-xr-x. 3 root root 80 Jul 2 10:53 /opt
[USER01@server ~]$ touch /opt/hello.txt
touch: cannot touch ‘/opt/hello.txt’: Permission denied
#02;查看touch路径
[USER01@server ~]$ which touch
/usr/bin/touch
#03:使用visudo在/etc/sudoers文件增加touch权限
root ALL=(ALL) ALL
USER01 ALL=(ALL) /usr/bin/touch
#04:使用sudo为用户USER01提权,创建t.txt文件
[USER01@server ~]$ sudo touch /opt/t.txt
11、sudo--授权普通用户执行管理员命令

12、chpasswd--批量更新密码
命令里面没有用户名和密码,回车以后以“用户名:密码”的格式输入,密码一般为明文,chpasswd根据选项加密
- 参数
| 参数 | 功能 |
|---|---|
| -c | 使用指定方法加密,加密方法:DES,MD5,SHA256,SHA512 |
| -e | 提供的密码已经加密 |
- 非交互式加密
[root@server ~]# echo "USER01:123321" | chpasswd
- 示例
#01:创建密码文件
[root@server ~]# mkdir /root/user_chpasswd_file
#02:密码文件重定向到chpasswd命令
[root@server ~]# chpasswd < /root/user_chpasswd_file
#03:为用户批量设置密码
[root@server ~]# chpasswd
USER01:123456
USER02:123456
USER03:123456
#输入格式为“用户名:密码”
#输入完毕后按Ctrl + d退出
13、grep的or、and、not
| or | grep -e |
|---|---|
| and | grep -E |
| not | grep -v |
- 语法
| grep -e | grep -e 'pattern1' -e 'pattern2' filename |
|---|---|
| grep -E | grep -E 'pattern1| pattern2' filename |
| grep -v | grep -v pattern filename |
- 示例
#01:测试数据:
[root@server test]# cat t
1111111
2222222
3333333
4444444
5555555
#02:grep -e(或):
[root@server test]# grep -n -e "11111" -e "6666" t
1:1111111
#03:grep -E(与):
[root@server test]# grep -E '1111|3333' t
1111111
3333333
#03:grep -v(非):
[root@server test]# grep -n -v 11111 t
2:2222222
3:3333333
4:4444444
5:5555555
14、chage--这种账号密码有效期
- 参数
| 参数 | 功能 |
|---|---|
| -E | 设置账号到期时间 |
| -i | 设置密码到期后还能使用几天 |
| -l | 显示用户及密码的有效期 |
- 示例
#01:设置用户cc01密码过期时间为2023-07-03
[root@server ~]# chage -E '2023-07-03' cc01
#02:显示用户及密码的有效期
[root@server ~]# chage -l cc01
Last password change : Jul 02, 2023
Password expires : never
Password inactive : never
Account expires : Jul 03, 2023
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
15、groups--显示用户的用户组信息
[root@server ~]# groups ycc01
ycc01 : cc01 GROUP02
16、gpasswd--设置管理用户组
- 参数
| 参数 | 功能 |
|---|---|
| -a | 添加指定用户到用户组 |
| -d | 从组中删除指定用户 |
| -A | 设置管理员 |
| -r | 删除组密码 |
- 示例
#01:查看用户组GROUP01当前组成员
[root@server ~]# grep -w 'GROUP01' /etc/group
GROUP01:x:2500:USER02,USER01,ycc01
#02:从用户组GROUP01中删除用户ycc01
[root@server ~]# gpasswd -d ycc01 GROUP01
Removing user ycc01 from group GROUP01
#03:添加用户jerry到用户组GROUP01
[root@server ~]# gpasswd -a jerry GROUP01
#04:查看用户组GROUP01成员
[root@server ~]# grep -w 'GROUP01' /etc/group
GROUP01:x:2500:USER02,USER01,jerry
17、last--列出目前与过去登录系统的用户相关信息
-
指令所在路径
/usr/bin/last
-
命令输出字段介绍
![image-20230702121606750]()
-
参数
| 参数 | 功能 |
|---|---|
| -n | 设置显示n行记录 |
| -i | 显示特定ip登录情况,跟踪使用 |
| -d | 将IP地址转换为主机名称 |
| -x | 显示系统关闭、用户登录和退出的历史 |
| -t | 显示YYMMDDMMSS之前的信息 |
| -a | 将登录系统的主机名称或ip地址显示在最后一行 |
- 示例
#01:将登录系统的主机名或IP地址显示在最后一行
[root@server ~]# last -3 -a
root pts/1 Sun Jul 2 09:34 still logged in 192.168.10.1
ycc01 pts/1 Sun Jul 2 09:07 - 09:08 (00:00) 192.168.10.1
ycc01 pts/1 Sun Jul 2 09:06 - 09:07 (00:00) 192.168.10.1
wtmp begins Thu Jun 15 07:57:01 2023
#02:显示YYYYMMDDHHMMSS(20230701122000)之前的信息
[root@server ~]# last -5 -t 20230701122000
USER01 pts/0 192.168.10.1 Fri Jun 30 12:31 gone - no logout
USER01 pts/0 192.168.10.1 Fri Jun 30 12:23 - 12:25 (00:02)
root pts/1 192.168.10.1 Fri Jun 30 11:31 gone - no logout
yuchao01 pts/2 192.168.10.1 Fri Jun 30 11:18 - 11:30 (00:11)
lifang01 pts/2 192.168.10.1 Fri Jun 30 10:45 - 10:57 (00:12)
wtmp begins Thu Jun 15 07:57:01 2023
18、lastlog-列出所有用户,并显示用户最后一次登录信息
- 命令输出字段介绍

- 示例
[root@server ~]# lastlog -u root
Username Port From Latest
root pts/1 192.168.10.1 Sun Jul 2 09:34:59 +0800 2023




浙公网安备 33010602011771号