1.1 用户和组介绍
1.用户
Linux里用户名是给人看的,为了方便人使用。比如root
用户,真正标识用户的是
UID
,也就是
Linux
只识 别uid。
身份标识:每个用户都有一个唯一标识,就是
UID(User,identify)
。
2.用户组
人本身是个体,背后是有组织的,被家庭,
学校
,
班级
,
公司。
和人一样,
Linux
用户也要属于某个组或多个组。属于最重要的组,叫
主组
,很多不重要的组织叫做
附加
组
。
同样,组名是为了方便使用者,组标识GID,也是唯一标识,用于计算机识别组。
Linux
里实际上有
用户和用户组
两个对象,用户是个体,组是一个组织,用户被组包含。
系统规则:创建
Linux
用户必须要属于一个组织,用户不能独立存在,但是用户可以同时属于多个组
织。
1.2 用户深入(user)
1.Linux有哪些用户?
Linux里有
3
类用户:
a)超级管理员,也就是我们常用的
root
用户。
b)普通用户,比如
oldboy
,由管理员创建的,权限限于家目录之内
/home/oldboy,/tmp
。
c)虚拟用户,本身傀儡,瞒足
进程
启动的需求(必须要有用户)。
2.Linux用户详细说明
a)超级用户
Linux系统管理员,掌握着系统的最高权限,和古代的皇帝一样。
有自己的皇宫,他的皇宫就是家目录
/root
,管理员拥有一切系统的管理权限。
管理员的用户名是
root
,它的
UID
固定为
0
。
#
换句话:凡是
UID
为
0
的用户都是管理员
root
。这可以作为渗透提权的一个手段。
b)普通用户
类似老百姓
,过着平常的日子,
root
管理员授权对应管理权限。
由管理员用户
root
创建而来的,日常登录应该首先登录普通用户,然后再必要的时候切换
root
管理。
普通用户UID
范围
C7 1000-60000
特点:权限很低:
写权限范围,限于家目录
/home/
用户名和
/tmp
。
读权限范围,除了/root
,大部分目录都可以进入,可以读取文件,不能增加修改删除文件。
登录的shell
是
/bin/bash
普通用户如何管理系统?
a.oldboy切换
root
,使用
su - root
(
输入
root
密码
) #
此方法是角色改变,由普通用户
oldboy
变成了 root。
类似农民起义,把root
皇帝推翻了,
oldboy
当皇帝。
b.oldboy不切换到
root
,但是可以允许
oldboy
使用
root
的权限去做事,管理员
root
按需要按命令给 对应用户的权限,工作时候,普通用户使用sudo
命令
,执行。
*
特点:只赋予普通用户一部分命令的权限,普通用户没有办法获得root
权限。
c)虚拟用户
1、虚拟用户存在意义
1.Linux里面的
文件、进程
必须要有对应用户和组。
文件创建时要有对应用户和组。进程启动时也要有对应用户和组。
2.为了安全起见,既需要这样的角色,但又不需要他的功能以及登录要求。
3.虚拟用户存在的目的就是满足文件存在以及进程启动时对用户和组的要求。
用普通用户行不行?行
,
但是权限太大了
. root
行不行,也行,权限更大,危险太大。
##
执行程序启动进程一般都用虚拟用户,不要用普通用户和
root
。
1、练习:把oldboy用户UID改为0,oldboy就是root
##查看oldboy用户uid
id oldboy
##如果没有oldboy则添加
useradd oldboy
##修改/etc/passwd里面的oldboy用户对应的uid
[root@oldboy data]# vim /etc/passwd
oldboy:x:0:8893::/home/oldboy:/bin/bash #把以冒号分隔第3列改为0,然后保存。
##切换到oldboy用户下,发现还是root.
su - oldboy
[root@oldboyedu ~]# su - oldboy
上一次登录:日 9月 24 08:32:46 CST 2023从 10.0.0.1pts/0 上
2.如何确保root登录安全:企业级应用。
a.配置
ssh
服务,禁用
root
通过
SSH
远程登录,原因
root
权限非常大,并且所有人都知道。
b.工作中使用普通用户
oldboy
远程登录,然后有需要时候,再
sudo
或者
su
切换到
root
做事。
c.规范:平时使用普通用户
oldboy
登录以及操作,有必要的时候,执行
root
授权的部分权限
(sudo
命令
)
。
d.禁止
SSH
远程链接,通过防火墙封掉
22
连接端口,
网卡监听到【内网
IP
】的
22
端口。通过
VPN
拨号到网内其他机器上。
e.通过
VPN(
加密隧道
)---
拨号到跳板机(堡垒)(记录、监控操作)
---
远程连接接
Linux
服务器
---
普通用户登录
--
然后切换到
root
。
2
、虚拟用户特点:
1.装系统之后就默认存在,但是不能登录。
2.UID范围往往
1-499
。
3.登录
shell
是
/sbin/nologin
,也就是不能登录。
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
3、企业生产系统安全最小化原则
1.安装软件最小化
2.登录安全最小化(用普通用户登录)
3.进程启动权限最小化(用植物人虚拟用户启动)
4.文件目录权限最小化
5.卸载软件最小化(尽量不卸载)
6.删除文件最小化(尽量不删除)
1.3 用户组介绍(group)
1.用户组概念
用户的用户组类似于【人】的家庭、学校等组织,
1个用户可以在多个组里。
1
个组也可以有多个用户。
用户组唯一标识:GID #
全拼
Group Identify
2.用户组怎么产生的?
a)创建用户时默认产生
创建oldboy
普通用户,默认情况就会生成
oldboy
组,默认用户和组同名,且
UID
和
GID
相同。
b)由
root
用户直接创建
tech
。
#添加用户
oldgirl
[root@oldboyedu ~]
# useradd oldgirl
#查看用户
uid,gid
[root@oldboyedu ~]
# id oldgirl
uid
=
1001
(oldgirl)
gid
=
1001
(oldgirl)
组
=
1001
(oldgirl)
#查看用户对应的配置
[root@oldboyedu ~]
# tail -1 /etc/passwd ##
用户的文件
oldgirl:x:1001:1001::/home/oldgirl:/bin/bash
# 存放用户组的文件
root@oldboyedu ~]
# tail -1 /etc/group ##
用户组的文件
oldgirl:x:1001:
#创建
oldgirl
用户的时候
,
同时创建
oldgirl
用户组
ID
1.4 用户和用户组配置文件
1.直接相关的有4个文件
文件名及作用 作用细节
1 、/etc/passwd 用户属性主文件* 用户各种属性(UID,GID,
家目录,登录
SHELL
)
2 、/etc/shadow 用户密码属性主文件 存放密码及密码的属性(失效时间,修改密码
时间等)
3 、/etc/group 用户组属性主文件 存放用户组及属性。
4 、/etc/gshadow 用户组密码属性文件 (废弃) 用户组密码及属性
1.5 用户命令
1.命令列表
添加用户 useradd
修改用户 usermod
删除用户 userdel
查看用户 id
#1.由root
用户直接创建用户组
tech
[root@oldboy ~]
# groupadd tech
#2.查看存放用户组的文件
[root@oldboyedu ~]
# tail -1 /etc/group
tech:x:1002:
#3.添加一个littleboy
用户属于
tech
组
.
[root@oldboyedu ~]
# useradd littleboy -g tech
#4.查看littleboy
用户信息
[root@oldboyedu ~]
# id littleboy
uid
=
1002
(littleboy)
gid
=
1002
(tech)
组
=
1002
(tech)
[root@oldboy ~]
# tail -1 /etc/passwd
littleboy: x:
1002
:1002: :/home/littleboy :/bin/bash
用户 密码位 UID GID 说明 家目录 登录解释器
2.
添加用户
useradd
例1:添加
test
用户
例2:添加
test1
用户设置
UID
为
9999
(
-u
选项 指定
uid
)
例3:添加一个虚拟用户
test2(-s
选项 指定解释器
)
例4:添加一个用户
test3
,属于
root
用户组
(-g
选项指定属于的主组
)
。
例5:添加一个用户
test4
,不能登录,且不创建家目录
useradd选项
-u 指定UID
创建用户
-g 指定属于的新组
-s 指定登录解释器
-M 不创建家目录
[root@oldboyedu ~]
# useradd test
[root@oldboyedu ~]
# id test
uid
=
1003
(test)
gid
=
1003
(test)
组
=
1003
(test)
[root@oldboyedu ~]
# useradd -u 9999 test1
[root@oldboyedu ~]
# id test1
uid
=
9999
(test1)
gid
=
9999
(test1)
组
=
9999
(test1)
[root@oldboyedu ~]
# useradd test2 -s /sbin/nologin
##检查解释器是否修改为/sbin/nologin
[root@oldboyedu ~]
# tail -1 /etc/passwd
test2:x:10000:10000::/home/test2:/sbin/nologin
##尝试登录test2
,看看是否可行
[root@oldboyedu ~]
# su - test2
This account is currently not available.
[root@oldboyedu ~]
# useradd -g root test3
[root@oldboyedu ~]
# id test3
uid
=
10001
(test3)
gid
=
0
(root)
组
=
0
(root)
[root@oldboyedu ~]
# useradd -s /sbin/nologin -M test4
[root@oldboyedu ~]
# id test4
uid
=
10002
(test4)
gid
=
10002
(test4)
组
=
10002
(test4)
[root@oldboyedu ~]
# tail -1 /etc/passwd
test4:x:10002:10002::/home/test4:/sbin/nologin
[root@oldboyedu ~]
# ls -l /home
3.
修改用户
usermod
a.选项
-u 指定UID
-g 指定属于的组
-s 指定解释器
b.练习
例1:修改
test1
用户的
UID
为
8888
(
-u
选项 指定
uid
)
例2:修改用户
test3
,属于
oldboy
用户组
(-g
选项指定属于的主组
)
。
例3:修改用户
test4
,使其可以登录
[root@oldboyedu ~]
# id test1
uid
=
9999
(test1)
gid
=
9999
(test1)
组
=
9999
(test1)
[root@oldboyedu ~]
# usermod -u 8888 test1
[root@oldboyedu ~]
# id test1
uid
=
8888
(test1)
gid
=
9999
(test1)
组
=
9999
(test1)
##uid
已改为
8888
#说明也可以用vim /etc/passwd
命令修改。
##1.查看用户
[root@oldboyedu ~]
# id test3
uid
=
10001
(test3)
gid
=
0
(root)
组
=
0
(root)
##2.查看用户组oldboy
[root@oldboyedu ~]
# grep oldboy /etc/group
oldboy:x:1000:
##3.修改用户test3
,属于
oldboy
用户组
[root@oldboyedu ~]
# usermod -g oldboy test3
##4.检查结果
[root@oldboyedu ~]
# id test3
uid
=
10001
(test3)
gid
=
1000
(oldboy)
组
=
1000
(oldboy)
##1.查看test4
用户
[root@oldboyedu ~]
# id test4
uid
=
10002
(test4)
gid
=
10002
(test4)
组
=
10002
(test4)
##2.尝试切换test4,
结果无法切换
[root@oldboyedu ~]
# su - test4
su
:
警告:无法更改到
/home/test4
目录
:
没有那个文件或目录
This account is currently not available.
##3.修改test4
的登录解释器为
/bin/bash
[root@oldboyedu ~]
# usermod -s /bin/bash test4
##4.切换测试
[root@oldboyedu ~]
# su - test4
上一次登录:日
9
月
24 11
:24:48 CST 2023pts/0
上
su
:
警告:无法更改到
/home/test4
目录
:
没有那个文件或目录
##5.
执行
whoami
查看当前用户
-bash-4
.2
$ whoami
test4
例4:创建
test4
的家目录,使其可以登录
(不会没关系)
-bash-4.2$ 提示符出现问题如何解决,下面234
解决答案。
##1.在指定位置/home
下创建
test4
家目录
[root@oldboyedu ~]
# mkdir /home/test4
##2.拷贝用户环境变量文件到/home/test4
[root@oldboyedu ~]
# ls /home/test -a ##
正常的用户文件多了
3
个隐藏的环境变量文件
. .. .bash_logout .bash_profile .bashrc
[root@oldboyedu ~]
# ls /home/test4 -a ##
新建的文件里面是空的
. ..
##将环境变量文件拷贝到/home/test4
下面
[root@oldboyedu ~]
# cp /etc/skel/.bash* /home/test4/
[root@oldboyedu ~]
# ls -a /home/test4/
. .. .bash_logout .bash_profile .bashrc
##3.调整权限为700
,让用户
test4
的家更安全
chmod
-R
700
/home/test4
##4.调用户和组为test4
##授权test4
用户和组管理
/home/test4
[root@oldboyedu ~]
# chown -R test4.test4 /home/test4
##检查结果
[root@oldboyedu ~]
# ls -l /home/test4 -d
drwx------
2
test4 test4
62 9
月
24 11
:30 /home/test4
##检查隐藏的环境变量文件
[root@oldboyedu ~]
# ls -l /home/test1 -a
总用量
16
drwx------
2
test1 test1
83 9
月
24 10
:43 .
drwxr-xr-x.
10
root root
116 9
月
24 11
:28 ..
-rw-------
1
test1 test1
17 9
月
24 10
:43 .bash_history
-rw-r--r--
1
test1 test1
18 4
月
1 2020
.bash_logout
-rw-r--r--
1
test1 test1
193 4
月
1 2020
.bash_profile
-rw-r--r--
1
test1 test1
231 4
月
1 2020
.bashrc
##5.切换到test4
检查家目录是否可用
##查看test4
对应的家目录
/home/test4
[root@oldboyedu ~]
# grep -w test4 /etc/passwd
test4:x:10002:10002::/home/test4:/bin/bash
##切换到test4
检查家目录是否可用
[root@oldboyedu ~]
# su - test4
上一次登录:日
9
月
24 11
:25:14 CST 2023pts/0
上
[test4@oldboyedu ~]
$
##
成功修复
修改用户5:无法修改用户的情况
[root@oldboyedu ~]
# su - oldboy01
4.
删除用户userdel
例1:删除
test
用户
例2:连带家目录删除用户
test1
(
-r
连带家目录删除)
[oldboy01@oldboyedu ~]
$ su
-
oldboy02
密码:
[oldboy02@oldboyedu ~]
$ su
-
oldboy03
密码:
[oldboy03@oldboyedu ~]
$ su
-
root
密码:
上一次登录:一
12
月
11 08
:42:25 CST
2023
从
10
.0.0.1pts/0
上
[root@oldboyedu ~]
# usermod -u 999 oldboy01
usermod:UID “999”
已经存在
##
提示
999
已存在,身份证号不能重复。
[root@oldboyedu ~]
# usermod -u 9992 oldboy01
usermod: user oldboy01 is currently used by process
2855
##
正在登录状态,不能删。
[root@oldboyedu ~]
#
登出
ctrl+d
[oldboy03@oldboyedu ~]
$
登出
ctrl
+
d
[oldboy02@oldboyedu ~]
$
登出
ctrl
+
d
[oldboy01@oldboyedu ~]
$
登出
ctrl
+
d
[root@oldboyedu ~]
# usermod -u 9992 oldboy01
[root@oldboyedu ~]
# id oldboy01
uid
=
9992
(oldboy01)
gid
=
10003
(oldboy01)
组
=
10003
(oldboy01)
##1.确认是否有删除的用户
[root@oldboyedu ~]
# id test
uid
=
1003
(test)
gid
=
1003
(test)
组
=
1003
(test)
##2.删除
[root@oldboyedu ~]
# userdel test
##3.检查删除情况
[root@oldboyedu ~]
# id test
id: test: no such user
##看下家目录是否被删
[root@oldboyedu ~]
# ls /home/
test
##查看当前目录是否有test1
目录
[root@oldboyedu ~]
# ls /home/
littleboy oldboy oldgirl test test1 test2 test3 test4
##查看是否有test1
用户
[root@oldboyedu ~]
# id test1
uid
=
8888
(test1)
gid
=
9999
(test1)
组
=
9999
(test1)
##使用-r
连带家目录删除
[root@oldboyedu ~]
# userdel -r test1
##检查删除结果
[root@oldboyedu ~]
# ls /home/
生产场景:
1.不用userdel -r
,容易误删文件,很多公司的程序员,把他的文件放在了家目录下。
2.使用vim /etc/passwd
,采用注释的方式临时暂停用户的使用,过了一个阶段没用了在慢慢删除。
3.把用户改为虚拟用户,临时暂停用户的使用,过了一个阶段在慢慢删除。
1.6查看用户信息
a.命令列表
id
whoami
w
last
lastlog
cat /etc/passwd
b.命令实践
test test2 test3 test4
[root@oldboyedu ~]
# id test1
id: test1: no such user
[root@oldboyedu ~]
# id oldboy
uid
=
1000
(oldboy)
gid
=
1000
(oldboy)
组
=
1000
(oldboy)
##
查看当前用户
[root@oldboyedu ~]
# whoami
root
##w
显示哪些用户登录,以及他们正在干什么
[root@oldboyedu ~]
# w
12
:12:46 up
3
:40,
2
users, load average:
0
.00,
0
.01,
0
.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1
09
:15
2
:56m
0
.06s
0
.06s
-bash
oldboy pts/0
10
.0.0.1
11
:34
6
.00s
0
.16s
0
.05s sshd: oldboy
[priv]
##last
显示登录的用户信息列表
[root@oldboyedu ~]
# last
oldboy pts/0
10
.0.0.1 Sun Sep
24 11
:34 still logged
in
oldboy pts/0
10
.0.0.1 Sun Sep
24 09
:54
-
11
:34 (01:39)
oldboy pts/0
10
.0.0.1 Sun Sep
24 09
:17
-
09
:54 (00:37)
root tty1 Sun Sep
24 09
:15 still logged
in
root pts/0
10
.0.0.1 Sun Sep
24 09
:14
-
09
:15 (00:00)
root pts/0
10
.0.0.1 Sun Sep
24 08
:32
-
09
:14 (00:42)
##
查看用户登录情况
[root@oldboyedu ~]
# lastlog
用户名 端口 来自 最后登陆时间
root pts/0
日
9
月
24 11
:34:58
+
0800 2023
bin pts/0
日
9
月
24 10
:04:44
+
0800 2023
daemon **
从未登录过
**
adm **
从未登录过
**
lp **
从未登录过
**
增加用户组
groupadd
删除用户组
groupdel
1.6 用户密码管理
1.修改密码passwd
a.
修改管理员
root
密码
sync **
从未登录过
**
dbus **
从未登录过
**
oldboy pts/0
10
.0.0.1
日
9
月
24 11
:34:52
+
0800 2023
ntp **
从未登录过
**
oldgirl pts/0
日
9
月
24 12
:09:31
+
0800 2023
littleboy **
从未登录过
**
test2 pts/0
日
9
月
24 10
:44:14
+
0800 2023
test3 **
从未登录过
**
test4 pts/0
日
9
月
24 11
:34:24
+
0800 2023
#
黑客毁尸灭迹:
last
-u
oldboy
-C
[root@oldboyedu ~]
# lastlog -u oldboy -C
[root@oldboyedu ~]
# lastlog
用户名 端口 来自 最后登陆时间
root pts/0
日
9
月
24 11
:34:58
+
0800 2023
bin pts/0
日
9
月
24 10
:04:44
+
0800 2023
daemon **
从未登录过
**
adm **
从未登录过
**
nobody **
从未登录过
**
systemd-network **
从未登录过
**
dbus **
从未登录过
**
polkitd **
从未登录过
**
tss **
从未登录过
**
abrt **
从未登录过
**
sshd **
从未登录过
**
postfix **
从未登录过
**
chrony **
从未登录过
**
oldboy **
从未登录过
**
##
看起来没来过
[root@oldboyedu ~]
# groupadd sa ##
空的
sa
组
[root@oldboyedu ~]
# tail -1 /etc/group
sa:x:10003:
[root@oldboyedu ~]
# groupdel sa
[root@oldboyedu ~]
# grep ^sa /etc/group
b.
改其他用户密码
需要管理员
root
身份
c.
普通用户修改自己的密码
d.
非交互式修改密码(
--stdin
)
2.批量修改密码chpasswd(了解)
从标准输入接收内容或文件修改密码。
接收修改密码的内容语法:
用户名
1
:密码
用户名
2
:密码
实践
1:
[root@oldboyedu ~]
# passwd
更改用户
root
的密码 。
新的 密码:
##
输入新密码
无效的密码: 密码是一个回文
##
如果密码简单,会提示。
重新输入新的 密码:
##
重复输入新密码
passwd
:所有的身份验证令牌已经成功更新。
[root@oldboyedu ~]
# passwd oldboy
更改用户
oldboy
的密码 。
新的 密码:
##
输入新密码
无效的密码: 密码是一个回文
##
如果密码简单,会提示。
重新输入新的 密码:
##
重复输入新密码
passwd
:所有的身份验证令牌已经成功更新。
[root@oldboyedu ~]
# su - oldboy
[oldboy@oldboyedu ~]
$ passwd
更改用户
oldboy
的密码 。
为
oldboy
更改
STRESS
密码。
(当前)
UNIX
密码:
新的 密码:
无效的密码: 密码少于
8
个字符
##
不合要求无法建立密码
新的 密码:
无效的密码: 密码少于
8
个字符
新的 密码:
重新输入新的 密码:
passwd
:所有的身份验证令牌已经成功更新。
[oldboy@oldboyedu ~]
$ exit
##
将
oldboy
用户的密码设置为
1
[root@oldboyedu ~]
# echo 1|passwd --stdin oldboy
更改用户
oldboy
的密码 。
passwd
:所有的身份验证令牌已经成功更新。
##0.
添加
5
个用户
[root@oldboyedu ~]
# useradd oldboy01
[root@oldboyedu ~]
# useradd oldboy02
7.Centos7忘记root密码重置
[root@oldboyedu ~]
# useradd oldboy03
[root@oldboyedu ~]
# useradd oldboy04
[root@oldboyedu ~]
# useradd oldboy05
[root@oldboyedu ~]
# tail -5 /etc/passwd
oldboy01:x:10003:10003::/home/oldboy01:/bin/bash
oldboy02:x:10004:10004::/home/oldboy02:/bin/bash
oldboy03:x:10005:10005::/home/oldboy03:/bin/bash
oldboy04:x:10006:10006::/home/oldboy04:/bin/bash
oldboy05:x:10007:10007::/home/oldboy05:/bin/bash
##1.
编辑好内容,用户要存在
[root@oldboyedu ~]
# cat a.txt
oldboy01:1
oldboy02:2
oldboy03:3
oldboy04:4
oldboy05:5
##2.
批量设置
[root@oldboyedu ~]
# chpasswd <a.txt ##
方法
2
:
cat a.txt|chpasswd
[root@oldboyedu ~]
# cat a.txt |chpasswd
##3.
测试
[root@oldboyedu ~]
# su - oldboy01
[oldboy01@oldboyedu ~]
$ su
-
oldboy02
密码:
[oldboy02@oldboyedu ~]
$
##
如果进入到这里表示密码设置成功。
##1.
重启
Linux
##2.
在启动
grub
菜单时,即在
VM
中点击启动后出现第一个界面是
grub
菜单界面,快速按键盘
e
键,来进入编辑
界面
##3.
找到
Linux16
的那一行,将里面的
ro
改为
rw
,同时增加
init=/sysroot/bin/sh
##4.
然后按
ctrl+x
快捷键 ,使用单用户模式启动进入命令行
##5.
进入系统输入
chroot /sysroot
##6.
执行
passwd root
修改
root
密码,这个时候可能提示会乱,直接修改即可。
##7.
执行下面命令更新系统信息
touch
/.autorelabel
##8.
执行
exit
退出,然后,再执行
reboot
重启。
##9.
最后在登录芥麦面,用新密码登录。