[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]
大家好,我是一个正在向全栈工程师(SecDevOps)前进的计算机技术爱好者
作者微信:WeiyiGeeker
公众号/星球:全栈工程师修炼指南
主页博客: https://weiyigeek.top - 为者常成,行者常至
0x00 用户和用户组管理
描述:作者根据自身学习情况,对Linux运维工程师学习之路系列文章进行整理,并记录自己学习过程,方便后期复习和回顾,以及各位读者朋友交流学习,文章中不足之处还望读者朋友不吝赐教。
前一章,我们实践学习了文件目录结构以及文件目录管理方面的命令,此章我们学习用户组创建管理方面的知识,为后续学习文件目录权限访问配置打下基础,除此之外,文中的相关命令详细解析都在作者整理归纳的《#Linux 命令 | 系列》系列文章,将作为《#运维从业必学》专栏辅助学习知识,这是也是每位Linux运维工程师必须掌握的基础知识,作者耗费心力、时间进行总结,希望对大家有所帮助,所以若有帮助还请多多关注作者,并鼓励作者创造更多实践文章吧。
温馨提示:文章末尾有练习题,希望大家可以多动手实践,加深理解。
原文链接: https://mp.weixin.qq.com/s/A223MfexT2de_oP3KmekZw
1.基础概述
了解Linux安全模型
描述:在Linux系统中当用户登录成功时,系统会自动分配令牌 token,包括用户标识和组成员等信息。
同时在Linux进行资源分配时,是要满足网络安全领域的3A认证模型的。
-
Authentication: 认证,验证用户身份。
-
Authorization: 授权,不同的用户设置不同权限。
-
Accouting|Audition: 审计,记录用户操作。
用户和组
Q: Linux中用户和组的意义?
答:它们在Linux的世界里面是相当重要的,使得多任务Linux环境变得更容易管理,以及系统资源分配和系统文件访问安全等等;
在Linux系统中每个用户是通过用户ID (UID,User ID
) 来唯一标识的,每个组是通过 用户组ID (GID,Group ID
) 来唯一标识的,其中可以将一个或多个用户加入到用户组中。
-
管理员:对系统进行管理的最高权限,即常说的root , uid = 0。
-
系统用户:对守护进行获取资源进行权限分配,通常
1 <= uid <= 999
,但是在CentOS6以前范围是1~499
。 -
普通用户:对业务运维或用户进交换使用,通常
60000 >= uid >= 1000
,但是在CentOS6以前范围是500~60000
,当然此范围也可以修改,这个我们后续会讲到。 -
管理员组:root,gid = 0
-
系统用户组:通常 gid = 1~999,但是CentOS6以前范围是
1~499
-
普通用户组:通常 gid = 1000~60000,,但是CentOS6以前范围是
1000~60000
用户和组的关系
-
用户的主要组(
primary group
): 用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
。 -
用户的附加组(
supplementary group
): 一个用户可以属于零个或多个辅助组,又称为附属组
,类比于你同时担任两个部门的工作😳。
例如,假如创业公司有CEO(首席执行官
)、CTO(首席技术官
)、CFO(首席财务官
)、CIO(首席信息官
)四个职位,那么我们就可以创建四个组,其中CEO是必要的所以是主组,而其他三组可以是辅助组。
# 使用 id 命令查看用户和主要、附加组信息
$ id root rocky
用户id=0(root) 组id=0(root) 组=0(root)
用户id=1000(rocky) 组id=1000(rocky) 组=1000(rocky)
$ id postfix
用户id=89(postfix) 组id=89(postfix) 组=89(postfix),12(mail) # 附加组
温馨提示:在 Windows 系统中也有用户和组的概念,但是 Windows 系统中用户和组是互斥的,用户名称和组名称不能相同。
weiyigeek.top-Windows系统中用户和组是互斥图
了解安全上下文Context
描述:Linux中安全上下文Context,是运行中的程序(即进程),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程的运行者的身份,在Linux系统中,每个进程都有一个安全上下文,也就是一个用户和组。
例如,以 root 管理员 和 weiyigeek 普通用户分别运行cat /etc/shadow
, 得到的结果是不同的,资源能否被访问,是由运行者的身份决定的,并非程序本身。
# 以 root 账户执行
[root@mail ~ 192.168.228.128 16:51]# cat /etc/shadow | head -n 2
root:$6$1LOC3PZIKa9zhTt6$TkJ/jEzJ7yHgdFpRnJv04zRtXNvVFm.gqYl6Sl9.lMWuLS0azrAn5jsFSCyKVXpuEE2DXgrAU/jXQ1qFDecc51::0:99999:7:::
bin:*:19469:0:99999:7:::
# 以 rocky 普通账号执行
[root@mail ~ 192.168.228.128 16:52]# sudo -u rocky cat /etc/shadow | head -n 2
cat: /etc/shadow: 权限不够
2.用户和组文件
用户和组配置文件
-
/etc/passwd
:用户账户信息,包含用户及其属性信息文件(名称,uid,组ID等) -
/etc/shadow
:安全用户账户信息,包含用户密码及其属性信息文件(加密后的密码,密码过期时间等) -
/etc/group
:组账户信息,包含用户组及其属性信息文件(名称,gid,用户列表等) -
/etc/gshadow
:安全组账户信息,包含用户组密码及其属性信息文件(加密后的组密码,组密码过期时间等)
温馨提示:在 Linux 系统中,可以通过前面介绍的 man 命令来查看配置文件的具体格式。
$ whatis passwd
$ man 5 passwd shadow group gshadow
--Man-- 下一页: shadow(5) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]
--Man-- 下一页: group(5) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]
--Man-- 下一页: gshadow(5) [ 查看 (return) | 跳过 (Ctrl-D) | 退出 (Ctrl-C) ]
用户和组配置文件内容格式简述
# /etc/passwd 文件格式
$ head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/sh
bin:x:1:1:bin:/bin:/sbin/nologin
# 用户名称:密码占位符:用户ID:组ID:用户说明:主目录:登录shell
# /etc/shadow 文件格式
$ head -n 2 /etc/shadow
root:$6$1LOC3PZIKa9zhTt6$TkJ/jEzJ7yHgdFpRnJv04zRtXNvVFm.gqYl6Sl9.lMWuLS0azrAn5jsFSCyKVXpuEE2DXgrAU/jXQ1qFDecc51::0:99999:7:::
bin:*:19469:0:99999:7:::
# 用户名称:加密后的密码SHA512:上次修改密码的时间(从19700101开始):密码修改最小时间间隔(0表示随时):密码最大时间间隔(99999表示永不过期):密码到期前警告时间(缺省一周7day):密码过期几天后锁定:账号失效时间(从19700101开始)
# /etc/group 文件格式
$ head -n 2 /etc/group
root:x:0:
bin:x:1:
mail:x:12:postfix
# 组名称:组密码占位符:组ID:用户列表(查看用户的附加组)
# /etc/gshadow 文件格式
$ head -n 2 /etc/gshadow
root:::
bin:::
mail:::postfix
# 组名称:组密码占位符:组ID:用户列表(查看用户的附加组)
温馨提示:在 Linux 系统中,原本用户信息与密码都是保存在/etc/passwd
文件中,后续由于其安全性将其密码保存在/etc/shadow
文件中,同样的组密码也是存放在/etc/gshadow
文件中。
温馨提示:在 Linux 系统中,/etc/passwd文件中的密码字段是采用SHA512加密后的密码,其格式为$id$salt$encrypted
,其中id为加密算法类型,salt为随机字符串,encrypted为加密后的密码。