1 Linux用户管理

1.1 Linux安全模型

在Linux系统中,当用户登陆成功后,系统会自动分配令牌token,包括:用户标识和组成员等信息。

3A认证:

  • 是一套针对网络设备的网络控制策略安全模型,由于设计思想超前,被广泛应用在各种系统场景,其中包括Linux。

3A认证的资源派分:

  • Authentication:认证,验证用户身份
  • Authorization:授权,为不同用户设置不同的权限
  • Accouting:审计,统计用户登录之后的各种行为

rocky下的各种审计日志文件:

系统安全日志:/var/log/secure
系统登陆认证信息日志:/var/log/auth.log

安全上下文:

在Linux系统中,运行中的程序(即进程),都是以进程发起者的身份运行;
进程所能够访问的资源取决于进行的运行者的身份。

1.2 用户和用户组

  1. 用户

Linux系统是多用户系统,可以同时存在多个用户,每个用户之间都是相互间隔的。

在Linux系统中,每个用户是通过UID来进行用户之间唯一标识的。

用户的分类:

超级管理员:root
	UID为0,对系统拥有最大的权限
普通用户:权限有限(又分为登陆用户和系统用户)
	登陆用户:UID为1000+,需要交互式登陆到系统中进行工作的用户
  系统用户:UID为1~999,通常给一些服务软件使用,像MySQL,nginx等
  1. 用户组

Linux中可以将一个或多个用户加入到用户组当中,用户组是通过GID来进行唯一标识的。

用户组的分类:

管理员组:root
	GID为0,对系统拥有最大的权限
用户组:权限有限(又分为普通组和系统组)
	普通组:GID为1000+,给用户使用
  系统组:GID为1~999,对守护进程获取资源进行权限分配
  1. 用户和组的关系:
主组:Linux用户的主组必须有且只有一个主组,默认情况下每创建一个用户的同时,都会再创建一个与该用户同名的组,成为该用户的主组。
附加组:用户另外加入的组,可以有多个。
注意:不管用户加入的是主组还是附加值组,都可以使用该组的权限资源。

1.3 用户和组的配置文件

相关配置文件路径:

用户相关:/etc/passwd
密码相关:/etc/group
组相关:/etc/shadow
组密码相关:/etc/gshadow

查看用户和组的配置文件内容的命令:

getent 用户和组的配置文件名 [过滤的字符串]

/etc/passwd配置文件格式:

04 Linux用户和权限管理_Linux权限管理

通过冒号分隔:一共有七列,分别是:
		用户名
		密码
		用户UID
		用户组GID
		注释信息
		用户家目录
		用户的shell类型

/etc/shadow配置文件格式:

04 Linux用户和权限管理_Linux权限管理_02

通过冒号分隔:一共有九列,分别是:
用户名
加密后的密码,可以为空,!表示该用户被锁定,不能登录
上次修改密码的时间,自1970年开始到现在一个多少天,0表示下次登陆之后就要改密码
最小时间间隔,当前密码最少能使用多少天
最大时间间隔,当前密码最多能使用多少天
告警时间,密码过期前几天开始提醒用户,默认是7
密码过期几天账号会被锁定,在这期间用户仍然可以登陆
失效时间,从1970-1-1起,多少天后账号失效,为空表示永不过期
保留字段,无意义

/etc/group配置文件格式:

04 Linux用户和权限管理_Linux权限管理_03

通过冒号分隔:一共有四列,分别是:
	组名
	组密码
	GID
	组成员

/etc/gshadow配置文件格式:

04 Linux用户和权限管理_Linux权限管理_04

通过冒号分隔:一共有四列,分别是:
	组名
	加密后的组密码
	组的管理员
	用户列表(表示该组是此用户列表下的附加组)

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

04 Linux用户和权限管理_Linux权限管理_05

1.4.2 组的删除

命令说明:

groupdel

常用选项:
	-f	#强制删除,即使是用户的主组也删除,但是会导致没有主组的用户无法登陆

范例:

04 Linux用户和权限管理_Linux权限管理_06

1.4.3 组属性的修改

命令说明:

groupmod
常用选项:
	-g	#修改组的GID
  -n	#改组名

范例:

04 Linux用户和权限管理_Linux用户管理_07

1.4.4 用户的创建

命令说明:

useradd

常用选项:
	-u	#指定UID
  -g	#指定GID
  -r	#创建系统用户
  -m	#创建家目录
  -s	#指定用户的shell类型
  -d	#指定家目录路径,通常配合-m使用,否则不会创建家目录
  -c	#设置用户注释信息
  -D	#查看使用useradd命令不加任何选项默认配置的模板,可以配合以上选项修改模板

范例:创建一个mysql的系统用户,并指定UID为336,并指定它的shell类型为/sbin/nologin

04 Linux用户和权限管理_Linux用户管理_08

1.4.5 用户的删除

命令说明:

userdel

常用选项:
	-f	#强制删除
  -r	#删除用户时,连着家目录以及其它与该用户相关的目录删除

范例:

04 Linux用户和权限管理_Linux用户管理_09

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

04 Linux用户和权限管理_Linux权限管理_10

04 Linux用户和权限管理_Linux用户管理_11

范例:批量修改密码

04 Linux用户和权限管理_Linux用户管理_12

1.4.7 用户属性修改

命令说明:

usermod
常用选项:
	-g	#修改主组
  -G	#修改附加组,原来的附加组会被覆盖,如果不覆盖需要配合-a选项
  -a	#配合-G选项,将用户追加至附加组中
  -s	#改用户的shell类型
  -c	#修改注释
  -m	#修改用户家目录
  -d	#修改家目录指定路径,配合-m使用
  -L	#锁定用户
  -U	#解锁用户
  -l	#改用户名

范例:

04 Linux用户和权限管理_Linux权限管理_13

1.4.8 切换用户

命令说明:

su
常用选项:
	-l	#完全切换切换至新用户的环境,也可以直接用 - 代替
  -c	#切换用户后执行的命令,然后切换回当前用户
  -s	#指定切换的用户用的shell环境

范例:

04 Linux用户和权限管理_Linux权限管理_14

非交互式方式实现:

echo "rocky9.4" |  su - root -c "cat /etc/shadow" 2> /dev/null

04 Linux用户和权限管理_Linux用户管理_15

1.4.9 修改密码策略

命令说明:

chage
常见选项:
  -l	#显示密码策略
	-d	#更改密码时间
  -m	#更改当前密码最少能使用多少天
  -M	#更改当前密码最多能使用多少天
  -W	#更改密码过期前几天开始提醒用户
  -I	#更改密码过期后的宽限期
  -E	#更改用户的有效期

范例:查看密码策略

04 Linux用户和权限管理_Linux权限管理_16

1.4.10 查看用户ID相关信息

命令说明:

ID
常用选项:
	-u	#查看用户UID
  -g	#查看用户主组GID
  -G	#查看附加组的

范例:

04 Linux用户和权限管理_Linux用户管理_17

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

04 Linux用户和权限管理_Linux权限管理_18

2.2 文件所有者和属组属性操作

2.2.1 设置文件所有者

命令说明:

chown
命令格式:
	chown 拥有者:所属组 文件
常用选项:
	-R	#递归,用于目录

范例:

04 Linux用户和权限管理_Linux权限管理_19

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	#递归修改目录及其子目录下的所有权限

范例:

04 Linux用户和权限管理_Linux权限管理_20

2.4 文件的默认权限

文件的默认权限由umast值决定,每次新创建的普通文件和目录文件的默认权限都是不同的。

  • 新建文件:权限等于 666-umask
  • 新建目录:权限等于 777-umask

umask命令说明:

umask
作用:显示文件或设定文件模式掩码(默认权限)
格式:
	umask 022
常见选项:
  -S	#以权限的字符表示法显示

范例:

04 Linux用户和权限管理_Linux用户管理_21

注意:命令行设置的umask同样是临时生效的,如果想要永久生效同样需要写到配置文件中,但是真正在生产环境中很少去修改umask的值,因为可能会影响到系统的本身工作环境。如果非要修改,建议使用小括号()将设定的umask的值锁定在一个临时的进程空间里,并在里面创建文件。

范例:

04 Linux用户和权限管理_Linux用户管理_22

2.5 文件特殊权限与特殊属性

在Linux中,除了读r,写w,执行x,这三种常用的权限外,还有三个特殊的权限。

2.5.1 特殊权限SUID

当文件具有SUID的特殊权限时,那么其他人就拥有了这个文件所有者的权限了。

SUID设置在可执行文件上才具有意义,设置在目录上无意义。

范例:设置SUID权限

chmod u+s
chmod u-s
chmod 4xxx


04 Linux用户和权限管理_Linux用户管理_23

2.5.2 特殊权限SGID

设置在文件上时:那么其他人就拥有了这个文件所属组的权限了。

设置在目录上时:其他用户在该目录下创建的文件,它的所属组自动继承为改目录的所属组。

范例:设置SGID权限

chmod g+s
chmod g-s
chmod 2xxx

04 Linux用户和权限管理_Linux权限管理_24

2.5.3 特殊权限Sticky

Sticky位通常设置在目录上,设置在文件上无意义

目录拥有sticky权限,表示只有该目录的所有者或者root可以删除文件,否则其他用户只能删除自己创建的文件。

范例:设置Sticky权限

chmod o+t
chmod o-t
chmod 1xxx

04 Linux用户和权限管理_Linux权限管理_25

2.5.4 文件的特殊属性

命令说明:

命令一:lsattr
作用:查看文件特殊属性

命令二:chattr
作用:修改文件特殊属性
常用属性:
	a		#只允许查看或向文件追加内容
  i		#只能查看文件内容,不允许执行其他任何操作

范例:

04 Linux用户和权限管理_Linux用户管理_26

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权限进行恢复

环境准备:

04 Linux用户和权限管理_Linux用户管理_27

使用acl权限进行恢复:

04 Linux用户和权限管理_Linux权限管理_28