抚顺市网站建设_网站建设公司_数据统计_seo优化
2025/12/21 20:26:04 网站建设 项目流程

04 Linux用户和权限管理

1、Linux安全模型

资源分派:

  • Authentication:认证,验证用户身份
  • Authorization:授权,不同的用户设置不同权限
  • Accouting:审计,事后行为

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

3A认证:

又称AAA认证,是一套针对网络设备的网络访问控制策略安全模型

#用于审计的登录日志
#rocky 8.6
cat /var/log/securetail /var/log/auth.log

1.1 用户

Linux系统中,每个用户通过User id(UID)来唯一标识的

用户类型 用户名 用户ID(UID) 作用
超级管理员 root(可改) 0 超级管理员用
普通用户-系统用户 自定义 1-499(CentOS6以前),1-999(CentOS7以后) 给后台程序使用,比如nginx,MySQL等
普通用户-登录用户 自定义 500+(CentOS6以前),1000+(CentOS7以后) 给用户进行交互式登录

1.2 用户组

Linux中可以将一个或多个用户加入用户组中,组就是包含0个或是多个用户的集合,用户组是通过Group ID(GID)来表示的

组类型 组名 组ID(GID) 作用
超级管理员组 root 0 超级管理员用
普通用户组-系统组 自定义 1-499(CentOS6以前),1-999(CentOS7以后) 给后台用户使用
普通用户组-普通组 自定义 500+(CentOS6以前),1000+(CentOS7以后) 给登录用户使用

1.3 用户和组的关系

  • 一个用户至少有一个组,也可以有多个组
  • 一个组至少有0个用户,也可以有多个用户
  • 用户的主要组(primary group):又称私有组,一个用户必须属于且只有一个主组,创建用户时,默认会创建与其同名的组作为主组
  • 用户的附加组(supplementary group):又称辅助组,一个用户可以属于0个或多个附加组
  • 使用组,可以对用户进行批量管理,你比如对一个组授权,则该组下所有的用户能集成这个组的权限

2、用户和组的配置文件

2.1 用户和组的主要配置文件

  • /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
  • /etc/shadow:用户密码及其相关属性
  • /etc/group:组及其属性信息
  • /etc/gshowdow:组密码及其相关属性

2.2 文件操作

vipw&vigr

#vipw|vigr
#编辑/etc/passwd,/etc/group/,/etc/shadow,/etc/gshadow
#vipw		默认编辑/etc/passwd文件
#vigr		默认编辑/etc/group文件

pwck&grpck

#pwck [options] [passwd [shadow]]
#对用户相关配置文件进行检查,默认检查文件为/etc/passwd-q|--quiet					#只报告错误,忽略警告
-r|--read-only				#显示错误和警告,但不改变文件
-R|--root CHEROOT_DIR		#chroot到的目录
-s|--sort					#通过UID排序项目#grpck [option][group [gshadow]]
#对用户组相关配置文件进行检查,默认检查文件为/etc/shadow,/etc/gshadow
-r|--read-only				#显示错误和警告,但不改变文件
-R|--root  CHROOT_DIR		#chroot到的目录
-s|--sort					#通过UID排序项目

getent

getent passwd|shadow|group|gshadow uname[......]
#根据用户名查看配置项

3、用户和组管理命令

用户管理命令:

  • useradd
  • usermod
  • userdel

组帐号维护命令:

  • groupadd
  • groupmod
  • groupdel

3.1 用户创建

#创建用户之前可以先建组,确保组ID是已知的useradd -u 336 -g mysql -s /sbin/nologin -d /data/mysql -M -r mysql
-b, --base-dir BASE_DIR  # 如果未指定 -d HOME_DIR,则系统的默认基本目录。如果未指定此选项,useradd 将使用 /etc/default/useradd 中的 HOME 变量指定的基本目录,或默认使用 /home。
-c, --comment COMMENT    # 加上备注文字。任何文本字符串。它通常是对登录名的简短描述,目前用作用户全名的字段。
-d, --home HOME_DIR      # 将使用 HOME_DIR 作为用户登录目录的值来创建新用户。 
-D, --defaults           # 变更预设值。
-e, --expiredate EXPIRE_DATE # 用户帐户将被禁用的日期。 日期以 YYYY-MM-DD 格式指定。
-f, --inactive INACTIVE      # 密码过期后到帐户被永久禁用的天数。
-g, --gid GROUP   # 用户初始登录组的组名或编号。组名必须存在。组号必须引用已经存在的组。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]] # 用户也是其成员的补充组列表。每个组用逗号隔开,中间没有空格。
-h, --help # 显示帮助信息并退出。
-k, --skel SKEL_DIR # 骨架目录,其中包含要在用户的主目录中复制的文件和目录,当主目录由 useradd 创建时。
-K, --key KEY=VALUE # 覆盖 /etc/login.defs 默认值(UID_MIN、UID_MAX、UMASK、PASS_MAX_DAYS 等)。
-l, --no-log-init   # 不要将用户添加到 lastlog 和 faillog 数据库。
-m, --create-home   # 如果用户的主目录不存在,则创建它。
-M                  # 不要创建用户的主目录,即使 /etc/login.defs (CREATE_HOME) 中的系统范围设置设置为 yes。
-N, --no-user-group # 不要创建与用户同名的组,而是将用户添加到由 -g 选项或 /etc/default/useradd 中的 GROUP 变量指定的组中。
-o, --non-unique    # 允许创建具有重复(非唯一)UID 的用户帐户。 此选项仅在与 -o 选项结合使用时有效。
-p, --password PASSWORD # crypt(3) 返回的加密密码。 默认是禁用密码。
-r, --system        # 创建一个系统帐户。
-s, --shell SHELL   # 用户登录 shell 的名称。
-u, --uid UID       # 用户 ID 的数值。
-U, --user-group    # 创建一个与用户同名的组,并将用户添加到该组。
-Z, --selinux-user SEUSER # 用户登录的 SELinux 用户。 默认情况下将此字段留空,这会导致系统选择默认的 SELinux 用户。
#Ubuntu中默认创建
useradd tom
#没有创建家目录#useradd命令,不同的系统,默认的创建模板不同
cat /etc/default/useradd#家目录模板【修改此目录后,新创建的用户家目录中的内容会发生改变】
/etc/skel/

新建用户的相关文件

  • /etc/default/useradd
  • /etc/skel/*
  • /etc/login.defs
#批量创建用户
newusers user.txtcat user.txt
u1:123456:1024:1024::/home/u1:/bin/bash
u2:123456:1025:1025::/home/u2:/bin/bash

3.2 用户信息修改

usermod [OPTIONS] LOGIN-d				#修改家目录
-g				#修改组
-L				#锁定用户帐号
-s				#修改shell
-U				#解锁用户帐号
-u				#修改UID
-l				#新的登录名称#把登录名tom改成jerry
usermod -c “tom to jerry” -l jerry tom

3.3 删除用户

userdel [OPTIONS] LOGIN
#常见选项
-f|--force				#强制删除,哪怕用户正在登录状态
-r|--remove				#删除家目录和邮件目录

3.4 修改密码

passwd#设置用户下次必须更改密码
passwd -e USER

3.5 修改用户密码策略

change USER

3.6 创建组

groupadd [OPTIONS] GROUP

3.7 修改组

groupmod

3.8 删除组

groupdel#常见选项
-f|--force				#强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录

删除组:如果该组下有用户将组作为主组,则不能删除

删除用户,会把与其同ID的主组也给删了,前提是该组下没有其它用户

3.9 更改组成员和密码

gpasswd命令,可以更改组密码,也可以修改附加组的成员关系

组没有密码的情况下,加组只能由root来操作

gpasswd [OPTION] GROUP#常见选项
-a						#向组中添加用户
-d						#从组中移除用户
-r						#删除组密码
-R						#向其成员限制访问组
-M						#批量加组
-A						#批量设置组管理员

3.10 更改和查看组成员

groupmens可以管理附加组的成员关系

groupmems [options][action]
-g						#更改为指定组(只有root)
-a						#指定用户加入组
-d						#从组中删除成员
-p						#从组中清除所有成员
-l						#显示组成员列表

4、文件权限管理

4.1 Linux中的权限体系

三种角色:

角色 英文表示 字符表示
属主:所有者 owner|OWNER|user u
属组:属于哪个组 group|GROUP g
其他用户:不是所有者,也不在属组中的用户 other|OTHER o

三种权限:

权限 英文表示 字符表示 八进制表示
读权限 read|Readable r 4
写权限 write|Writable w 2
执行权限 execute|eXcutable x 1

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

4.2.1 设置文件的所有者chown

chown [OPTION]...[OWNER]:[:[GROUP]]FILE...#用法说明
OWNER						#只修改所有者
OWNER:GROUP					#同时修改所有者和属组
:GROUP						#只修改数组,冒号也可用.替换-R							#递归操作
#下列选项配合-R使用
-H							#如果参数是指向目录的软链接,则之修改指向的目录,不改变目录里面文件的属主属组
-L							#更改所有遇到的符号链接指向的目录
-P							#不更改符号链接指向的目录

4.3 文件权限

注意:

  • 用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向右查看其权限
  • r和w权限对root用户无效,对没有读写权限的文件,root用户也可读可写
  • 只要所有者,所属组或other三者之一有x权限,root就可以执行

修改文件权限chmod

字符表示 二进制表示 八进制表示 备注
--- 000 0 无任何权限
--x 001 1 可执行
-w- 010 2 可写
-wx 011 3 可写可执行
r-- 100 4 可读
r-x 101 5 可读可执行
rw- 110 6 可读可写
rwx 111 7 可读可写可执行
字符表示 八进制数字表示 备注
rw-r----- 640 属主可读写,属组可读,其他用户无任何权限
rw-r--r-- 644 属主可读写,属组可读,其他用户可读
rwxr-xr-x 755 属主可读写,可执行,属组可读可执行,其它用户可读可执行

4.4 新建文件和目录的默认权限

在Linux中,新建文件或目录,都有一个默认权限:umask

umask值间接影响新建文件和新建目录的权限:

  • 新建文件:666-umask,按位对应相减,如果所得结果某位存在执行(奇数)权限,贼该位+1
  • 新建目录:777-umask

非特权用户umask默认是002

root的umask默认是022

持久保存umask

  • 全局设置:/etc/bashrc,/etc/bash.bashrc(ubuntu)
  • 用户设置:~/.bashrc

4.5 Linux文件系统上的特殊权限

在Linux中,除了rwx这三种常见的权限之外,还有三个特殊权限,分别是SUID,SGID,Sticky;这三个特殊权限独立于rwx权限体系

特殊权限:

  • SUID:作用于二进制可执行文件上,用户将继承此程序所有者的权限

  • SGID:作用于二进制可执行文件上,用户将继承此程序所有组的权限

    • 作用于目录上,此目录中新建的文件的所属组将自动从此目录继承
  • STICKY:作用于目录上,此目录中的文件只能由所有者自己来删除

权限 字符表示 八进制表示 备注
SUID s 4 如果原属主没有可执行权限,再加SUID权限,则显示为S
SGID s 2 如果原属组没有可执行权限,再加SGID权限,则显示为S
STICKY t 1 如果other没有可执行权限,再加STICKT权限,则显示为T

4.5.1 特殊权限SUID

前提:进程有属主和数组;文件有属主和属组

  • 任何一个可执行程序文件能不能启动为进程,取决于发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
  • 进程访问文件时的权限,取决于进程的发起者

二进制的可执行文件上SUID权限功能:

  • 任何一个可执行程序文件能不能启动为进程:屈居于发起者对程序文件是否拥有执行权限
  • 启动为进城之后,其进程的属主为原程序文件的属主
  • SUID只对二进制可执行程序有效
  • SUID设置在目录上无意义

SUID权限设定:

chomd u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...

意义:普通用户可调用部分命令,以root用户的身份对某些文件进行调整(个人理解)

4.5.2 特殊权限SGID

二进制的可执行文件上SGID权限功能:

  • 任何一个可执行程序文件能不能启动为进程:取决于发起者对程序文件是否拥有执行权限
  • 启动为进程之后,其进程的属组为原程序文件的属组

SGID权限设定:

chmod g+s FILE...
chmod 2xxx FILE
chomd g-s FILE...

目录上的SGID权限功能:

默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录

SGID权限设定:

chmod g+s DIR...
chmod 2xxx DIR
chmod g-s DIR...

4.5.3 特殊权限Sticky位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

在目录设置Sticky位,只有文件的所有者或root可以删除该文件

sticky设置在文件上无意义

Sticky权限设定:

chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...

4.5.4 特殊权限数字法

字符表示 二进制表示 八进制表示 备注
--------- 000 0 无任何特殊权限
--------t 001 1 Sticky
-----s--- 010 2 SGID
-----s--t 011 3 SGID,Sticky
--s------ 100 4 SUID
--s-----t 101 5 SUID,SGID
--s---s-- 110 6 SUID,SGID
--s--s--t 111 7 SUID,SGID,Sticky

权限位映射

SUID:user,占据属主的执行权限位

s:属主拥有x权限S:属主没有x权限

SGID:group,占据属组的执行权限位

s:group拥有x权限S:group没有x权限

Sticky:other,占据other的执行权限位

t:other拥有x权限T:other没有x权限

4.5.5 设定文件特殊属性

某些文件可能会出现无法删除的情况,可参考下列命令

chattr [-pRVF] [-v version] files...#常用选项
-p					#设置文件项目编号
-R					#递归执行
-V					#显示过程,并输出chattr版本
-f					#不输出错误信息
-v					#设置版本#操作符
+attribute			#添加该属性
-attribute			#去掉该属性
=attribute			#仅有该属性#常用属性
e					#文件系统自带的 
a					#对文件:可追加内容,不可被删除,不可被修改,不可被重命名;对目录,可新建,修改文件,但不可删除文件
A					#不更新atime,节省IO
c					#文件会被压缩保存
i					#对文件:不可被删除不可被修改不可重命名;对目录:可修改查看目录中的文件,补课新建文件,不可删除文件
s					#彻底删除文件,用0填充原来的数据块
u					#防止误删除,这里是指原来存储该文件的块不会被新的数据覆盖

显示文件特殊属性

lsattr

4.6 访问控制列表ACL

4.6.1 ACL权限功能

rwx权限体系中,仅仅只能将用户分成三种角色,如果要对单独用户设置额外的权限,则无法完成;

而ACL可以单独对指定的用户设定各不相同的权限;提供颗粒度更细的权限控制;

CentOS7默认创建的xfs和ext4文件系统具有ACL功能

ACL生效顺序

所有者,自定义用户,所属组,自定义组,其他人

4.6.2 ACL相关命令

apt install acl#使用setfacl可设置ACL权限
#使用getfacl可查看设置的ACL权限setfacl #常用选项
-m					#修改ACL权限
-M					#从文件读取规则
-x					#删除文件acl权限
-X					#从文件读取规则并删除文件acl规则
-b					#删除文件所有acl权限
-k					#删除默认acl规则
--set=acl			#用新规则替换旧规则,会删除原有ACL项,用心的替代,一定要包含UGO的设置,不像-m一样只有ACL
--set-file=file		#从文件读取新规则
--mask				#重新计算mask值
-n					#不重新计算mask值
-d					#在目录上设置默认acl
-R					#递归执行
-L					#将ACL应用在软链接指向的目标文件上,与-R一起使用
-P					#将ACL不应用在软链接指向的目标文件上,与-R一起使用

mask权限

  • mask只影响除所有者和other的之外的人和组的最大权限
  • mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
  • 用户或组的设置必须存在于mask权限设定范围内才会生效

对于脚本程序来讲,必须先要有读权限,才能执行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询