1 Linux用户管理
1.1 Linux安全模型
在Linux系统中,当用户登陆成功后,系统会自动分配令牌token,包括:用户标识和组成员等信息。
3A认证:
- 是一套针对网络设备的网络控制策略安全模型,由于设计思想超前,被广泛应用在各种系统场景,其中包括Linux。
3A认证的资源派分:
- Authentication:认证,验证用户身份
- Authorization:授权,为不同用户设置不同的权限
- Accouting:审计,统计用户登录之后的各种行为
rocky下的各种审计日志文件:
系统安全日志:/var/log/secure
系统登陆认证信息日志:/var/log/auth.log
安全上下文:
在Linux系统中,运行中的程序(即进程),都是以进程发起者的身份运行;
进程所能够访问的资源取决于进行的运行者的身份。
1.2 用户和用户组
- 用户
Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是相互间隔的。
在Linux系统中,每个用户是通过UID来进行用户之间唯一标识的。
用户的分类:
超级管理员:root
UID为0,对系统拥有最大的权限
普通用户:权限有限(又分为登陆用户和系统用户)
登陆用户:UID为1000+,需要交互式登陆到系统中进行工作的用户
系统用户:UID为1~999,通常给一些服务软件使用,像MySQL,nginx等
- 用户组
Linux中可以将一个或多个用户加入到用户组当中,用户组是通过GID来进行唯一标识的。
用户组的分类:
管理员组:root
GID为0,对系统拥有最大的权限
用户组:权限有限(又分为普通组和系统组)
普通组:GID为1000+,给用户使用
系统组:GID为1~999,对守护进程获取资源进行权限分配
- 用户和组的关系:
主组:Linux用户的主组必须有且只有一个主组,默认情况下每创建一个用户的同时,都会再创建一个与该用户同名的组,成为该用户的主组。
附加组:用户另外加入的组,可以有多个。
注意:不管用户加入的是主组还是附加值组,都可以使用该组的权限资源。
1.3 用户和组的配置文件
相关配置文件路径:
用户相关:/etc/passwd
密码相关:/etc/group
组相关:/etc/shadow
组密码相关:/etc/gshadow
查看用户和组的配置文件内容的命令:
getent 用户和组的配置文件名 [过滤的字符串]
/etc/passwd配置文件格式:
通过冒号分隔:一共有七列,分别是:
用户名
密码
用户UID
用户组GID
注释信息
用户家目录
用户的shell类型
/etc/shadow配置文件格式:
通过冒号分隔:一共有九列,分别是:
用户名
加密后的密码,可以为空,!表示该用户被锁定,不能登录
上次修改密码的时间,自1970年开始到现在一个多少天,0表示下次登陆之后就要改密码
最小时间间隔,当前密码最少能使用多少天
最大时间间隔,当前密码最多能使用多少天
告警时间,密码过期前几天开始提醒用户,默认是7
密码过期几天账号会被锁定,在这期间用户仍然可以登陆
失效时间,从1970-1-1起,多少天后账号失效,为空表示永不过期
保留字段,无意义
/etc/group配置文件格式:
通过冒号分隔:一共有四列,分别是:
组名
组密码
GID
组成员
/etc/gshadow配置文件格式:
通过冒号分隔:一共有四列,分别是:
组名
加密后的组密码
组的管理员
用户列表(表示该组是此用户列表下的附加组)
1.3.1 编辑用户和组的配置文件
编辑/etc/passwd配置文件
vipw
编辑/etc/gshadow
vipw -s
编辑/etc/group
vigr
编辑/etc/gshadow
vigr -s
1.3.2 检查用户和组的配置文件
检查/etc/passwd配置文件
pwck
检查/etc/gshadow
pwck -s
检查/etc/group
grpck
检查/etc/gshadow
grpck -s
1.4 用户和组管理命令
1.4.1 组的创建
命令说明:
groupadd
常用选项:
-g #指定GID
-r #创建系统用户,会自动指定1~999中没有被使用的GID
范例:创建mysql的系统组并指定GID为336
1.4.2 组的删除
命令说明:
groupdel
常用选项:
-f #强制删除,即使是用户的主组也删除,但是会导致没有主组的用户无法登陆
范例:
1.4.3 组属性的修改
命令说明:
groupmod
常用选项:
-g #修改组的GID
-n #改组名
范例:
1.4.4 用户的创建
命令说明:
useradd
常用选项:
-u #指定UID
-g #指定GID
-r #创建系统用户
-m #创建家目录
-s #指定用户的shell类型
-d #指定家目录路径,通常配合-m使用,否则不会创建家目录
-c #设置用户注释信息
-D #查看使用useradd命令不加任何选项默认配置的模板,可以配合以上选项修改模板
范例:创建一个mysql的系统用户,并指定UID为336,并指定它的shell类型为/sbin/nologin
1.4.5 用户的删除
命令说明:
userdel
常用选项:
-f #强制删除
-r #删除用户时,连着家目录以及其它与该用户相关的目录删除
范例:
1.4.6 修改用户密码
命令说明:
命令一:passwd
常用选项:
--stdin #接收标准输入,centos系列常用选项,ubuntu下没有该选项
命令二:chpasswd
作用:
批量修改用户密码,ubuntu和rocky通用
格式:
chpasswd < 密码文件
密码文件的格式
用户名1:密码1
用户名2:密码2
范例:非交互式方式修改密码
rocky下的密码修改
echo 123456 | passwd --stdin user1
ubuntu下的密码修改
echo -e "123456\n123456" | passwd user1
范例:批量修改密码
1.4.7 用户属性修改
命令说明:
usermod
常用选项:
-g #修改主组
-G #修改附加组,原来的附加组会被覆盖,如果不覆盖需要配合-a选项
-a #配合-G选项,将用户追加至附加组中
-s #改用户的shell类型
-c #修改注释
-m #修改用户家目录
-d #修改家目录指定路径,配合-m使用
-L #锁定用户
-U #解锁用户
-l #改用户名
范例:
1.4.8 切换用户
命令说明:
su
常用选项:
-l #完全切换切换至新用户的环境,也可以直接用 - 代替
-c #切换用户后执行的命令,然后切换回当前用户
-s #指定切换的用户用的shell环境
范例:
非交互式方式实现:
echo "rocky9.4" | su - root -c "cat /etc/shadow" 2> /dev/null
1.4.9 修改密码策略
命令说明:
chage
常见选项:
-l #显示密码策略
-d #更改密码时间
-m #更改当前密码最少能使用多少天
-M #更改当前密码最多能使用多少天
-W #更改密码过期前几天开始提醒用户
-I #更改密码过期后的宽限期
-E #更改用户的有效期
范例:查看密码策略
1.4.10 查看用户ID相关信息
命令说明:
ID
常用选项:
-u #查看用户UID
-g #查看用户主组GID
-G #查看附加组的
范例:
1.4.11 更改组成员和密码
命令说明:
gpasswd
常见选项:
-a #组中添加用户
-d #从组中移除用户
-r #删除组密码
-R #向其成员限制访问组 GROUP
-M #批量加组
-A #批量设组管理员
1.4.12 更改和查看组成员
命令说明:
groupmems
常见选项:
-g #更改为指定组 (只有root)
-a #指定用户加入组
-d #从组中删除用户
-p #从组中清除所有成员
-l #显示组成员列表
1.4.13 与创建用户相关的配置文件
/etc/default/useradd
创建用户时使用的模板文件,可以通过命令 useradd -D 查看和修改
/etc/skel/(.bash_logout .bashrc .profile)
创建用户时,默认会在家目录创建以下文件
2 文件权限管理
2.1 Linux中的权限体系介绍
在Linux中一切皆文件,对于文件,系统设置了三种角色进行管理,每个角色对文件都有不同的权限。
通用的权限类型也有三种,也就是读r,写w,执行x。
三种角色:
角色 | 英文标识 | 对应字符表示 |
属主:所有者 | owner | u |
属组:属于哪个组 | group | g |
其它用户 | other | o |
三种权限:
权限 | 字符表示 | 数字表示 |
读权限 | r | 4 |
写权限 | w | 2 |
执行权限 | x | 1 |
程序访问文件时的权限,取决于此程序的发起者
ls -li 命令详解
如下图:图片来自 https://blog.51cto.com/13447608/2151610
2.2 文件所有者和属组属性操作
2.2.1 设置文件所有者
命令说明:
chown
命令格式:
chown 拥有者:所属组 文件
常用选项:
-R #递归,用于目录
范例:
2.2.2 设置文件属组信息
命令说明:
chgrp
常用选项:
-R #递归操作
格式:
chgrp 组名 文件
2.3 文件权限
2.3.1 文件权限说明
Linux中常用的权限有读r,写w,执行x,然而对于普通文件和目录文件来说,这三个权限的含义是不同的。
权限说明:
权限 | 对文件 | 对目录 |
r | 可以查看文件内容 | 可以ls查看目录中的内容,需要x权限 |
w | 可以修改文件内容 | 可以在目录中创建、删除或移动文件,需要x权限 |
x | 可以执行文件 | 可以进入目录,属于目录的最小权限 |
2.3.2 修改文件权限
命令说明:
chmod
常用格式:
chmod [+|-|=][rwx] 文件名
chmod 777 文件名
常用选项:
-u #改文件所有者权限
-g #改文件所属组权限
-o #该文件其他人的权限
-R #递归修改目录及其子目录下的所有权限
范例:
2.4 文件的默认权限
文件的默认权限由umast值决定,每次新创建的普通文件和目录文件的默认权限都是不同的。
- 新建文件:权限等于 666-umask
- 新建目录:权限等于 777-umask
umask命令说明:
umask
作用:显示文件或设定文件模式掩码(默认权限)
格式:
umask 022
常见选项:
-S #以权限的字符表示法显示
范例:
注意:命令行设置的umask同样是临时生效的,如果想要永久生效同样需要写到配置文件中,但是真正在生产环境中很少去修改umask的值,因为可能会影响到系统的本身工作环境。如果非要修改,建议使用小括号()将设定的umask的值锁定在一个临时的进程空间里,并在里面创建文件。
范例:
2.5 文件特殊权限与特殊属性
在Linux中,除了读r,写w,执行x,这三种常用的权限外,还有三个特殊的权限。
2.5.1 特殊权限SUID
当文件具有SUID的特殊权限时,那么其他人就拥有了这个文件所有者的权限了。
SUID设置在可执行文件上才具有意义,设置在目录上无意义。
范例:设置SUID权限
chmod u+s
chmod u-s
chmod 4xxx
2.5.2 特殊权限SGID
设置在文件上时:那么其他人就拥有了这个文件所属组的权限了。
设置在目录上时:其他用户在该目录下创建的文件,它的所属组自动继承为改目录的所属组。
范例:设置SGID权限
chmod g+s
chmod g-s
chmod 2xxx
2.5.3 特殊权限Sticky
Sticky位通常设置在目录上,设置在文件上无意义
目录拥有sticky权限,表示只有该目录的所有者或者root可以删除文件,否则其他用户只能删除自己创建的文件。
范例:设置Sticky权限
chmod o+t
chmod o-t
chmod 1xxx
2.5.4 文件的特殊属性
命令说明:
命令一:lsattr
作用:查看文件特殊属性
命令二:chattr
作用:修改文件特殊属性
常用属性:
a #只允许查看或向文件追加内容
i #只能查看文件内容,不允许执行其他任何操作
范例:
2.6 访问控制列表ACL
由于在rwx权限体系中,仅仅只能将用户分成三种角色,如果需要对单独的用户设置额外的权限,则无法完成;
而利用ACL可以弥补这方面的空缺,实现灵活的用户权限管理。
ACL相关命令
命令一:setfacl
作用:设置和删除acl权限
常用选项:
-m #修改acl权限,格式为 u|g|o:USER:rwx
-b #清空acl权限
-x #删除acl权限
命令二:getfacl
作用:查看acl权限
范例:将/usr/bin/chmod文件的可执行权限去掉,用acl权限进行恢复
环境准备:
使用acl权限进行恢复: