linux-特殊权限

版权声明:来一来,看一看,有钱的捧个人场,没钱的你不得捧个人场 https://blog.csdn.net/wait_for_eva/article/details/84566230

权限细分

文件分类

虽说文件权限不过三类三组,不过想理解特殊权限,还得把文件再分类。

  • 操作文件

一般的操作文件,对应的就是rw读写权限,常被命令作为元素所操作。

  • 执行文件

可执行文件,对应的就是x等其他权限。此类文件可以直接进行执行,是命令一类。

命令分两类

  • 纯命令

脚本或程序当中不需要外部参数,不操作其他文件,单纯执行操作。

  • 操作命令

需要操作其他文件,对其他文件进行操作,依赖其他文件权限。

权限依赖

  • 操作文件

单纯的rw权限,对于自身而言没有任何意义。

提供给执行文件进行操作的权限依据,由rw判断执行文件是否拥有操作权限。

  • 执行文件

单纯的判断用户是否拥有执行此命令的权限。

  • 相互关联
  1. 命令权限

判断此用户是否拥有此命令的执行权限。

  1. 操作权限

判断此用户是否拥有此文件的操作权限。

权限判断

  • 执行权限
Created with Raphaël 2.2.0 文件权限 是否属主且具有执行权限? 以属主身份执行命令 运行 是否属组且具有执行权限? 以属组身份执行命令 是否其他用户且具有执行权限? 以其他身份执行命令 无权限执行此命令 yes no yes no yes no
  • 操作权限
Created with Raphaël 2.2.0 执行角色 有命令执行权限? 属主角色命令? 具有属主操作权限? 以属主身份操作文件 操作文件 无权限操作文件 属组角色命令? 具有属组操作权限? 以属组身份操作文件 其他角色命令? 具有其他操作权限? 以其他身份操作文件 yes no yes no yes no yes no yes no yes no yes no
  • 进程归属

当两个部分归纳完毕,命令执行的进程的属主就看命令执行时的运行角色了。

other运行了一个属主为godme的命令,启动的进程属主是other

进程不看命令归属,只看启动角色,谁启动的谁就是进程的属主。

特殊权限

基本权限

符号 权限 说明
r 读取内容
w 写入内容
x 执行 作为命令执行

三个权限,全部依照上述流程,大部分的权限不外乎这三个。

SUID

权限设置

命令 效果
chmod u+s file 添加s权限
chmod u-s file 移除s权限
chmod u=rws,go= file 设置权限
  • 权限分类

该特殊权限为执行权限,通用x第三位置,与rw操作权限无关。

  • 特殊显示

原操作权限为x+s后显示权限为s

原操作权限为-+s后显示权限为S

权限操作

s虽然作为执行权限,但是影响的却是操作权限

执行权限的鉴权阶段,和一般权限一致,在文件权限的判断阶段有特殊逻辑。

Created with Raphaël 2.2.0 命令权限 属主具有s权限? 采用属主操作权限 操作权限判断 属组具有s权限? 采取属组操作权限 默认操作权限 yes no yes no

逻辑梳理

  • 旧逻辑
Created with Raphaël 2.2.0 开始 该角色具有执行权限? 该角色具有操作权限? 执行 结束 拒绝 yes no yes no
  • 新逻辑
Created with Raphaël 2.2.0 开始 该角色具有执行权限? 具有s权限? 文件角色判断替换为新角色 该角色具有操作权限? 执行 结束 拒绝 文件角色判断默认老角色 yes no yes no yes no

可以发现,整个过程增添了额外一步。

  1. 执行权限鉴权
  2. 更换操作权限
  3. 操作权限鉴权

默认没有第二步更换操作权限。s的作用就是更换操作权限。

同时,进程的归属,也会被替换。

进程的属主不再是先到先得的启动者,而是标记了s命令的属主。

例子详解

  • 基本文件

/etc/passwd

chmod u=rw,go= /etc/passwd

/bin/cat

chmod u=rwx, go= /bin/cat
  • 直接执行

root

cat /etc/passwd
# 成功

other

cat /etc/passwd
# 失败,没有cat的运行权限
  • 执行权限

/bin/cat

chmod a+x /bin/cat

other

cat /etc/passwd
# 失败,没有passwd的操作权限
  • 文件权限

/etc/passwd

chmod a+r /etc/passwd

other

cat /etc/passwd
# 成功,但是不安全
  • 权限替换

/bin/cat

chmod u=rws,go= /bin/cat

other

cat /etc/passwd
# 运行成功

没有操作权限却能够操作文件,这是因为在文件操作鉴权的时候更换了鉴权对象

默认情况下,执行鉴权操作鉴权鉴权对象是同一个。

但是s会修改操作鉴权的对象,从而让有些没有权限的用户可以操作某些文件。

再次声明,这样更换身份后,进程的属主也会对应的更换为命令的属主,而不是启动者。

SGID

SUID一样,SGID也是s权限。

SUID是针对属主的操作鉴权角色替换。

SGID是针对属组的操作鉴权角色替换。

  • 设置
chmod g+s cat
chmod g-s cat
  • 逻辑

逻辑同SUID

  • 特殊
chmod a+s cat

同时设置了SUIDSGID,不具有实用意义。

普通用户other不具备s权限,因为把自己替换为自己实在是…

实际作用

  • 文件共享

半路更换了鉴权对象,让其他用户(组)拥有特定的文件操作权限。

相当于是把文件共享给了用户(组)。

不过是通过命令进行的共享,必须通过特定的命令才有所谓的共享。

  • 进程归纳

启动者启动,进程归属却是命令属主(组)

可以很明确的对进程进行分类管理,不过人太多了也会变得更杂乱。

回归一句话,谁启动的进程,谁就是进程的属主。

关键看顶着的谁的名,而不是谁做的。

s在启动过程当中,把名号给换了。

所以后续的一切都变了,操作鉴权对象换了,启动的进程属主(组)也换了,启动者已不重要了。

Sticky

SUIDSGID针对的是执行权限,那么sticky针对的就是操作权限

操作权限

  • 基本权限
符号 权限
r 读取
w 修改
x 执行

之前因为显示占据的位置是x所在的位置,划分的不够明确,现在重申一遍。

  • 基本权限

rwx是基本权限,x不是特殊权限。

  • 显示合并

特殊权限的显示合并x一起显示,原来没有x显示为大写,原来有x显示成小写。但是并不覆盖。

  • 操作权限

操作权限是什么,就是rw

所谓的SUIDSGID是针对x的特殊权限设置。影响后续归纳。

先说说读写权限rw算什么。

说实话,读写没啥更多东西,关键是目录的读写。

把读写进行扩展,目录的读写也即是创建删除

Created with Raphaël 2.2.0 文件操作 拥有权限? 操作文件 结束 操作驳回 yes no

问题就出在这,多个用户同时工作时,必然属于同一个组。

如果能够创建,必然能够删除。

也就是说,用户之间可以删除别人的文件,除非每个人都没权利删除任何文件。

权限设置

命令 说明
chmod o+t dir 添加t权限
chmod o-t dir 移除t权限

xt,是-就是T

反正和x相关,有则小写,无则大写。

执行逻辑

  • 默认逻辑
Created with Raphaël 2.2.0 删除文件 拥有w权限? 删除 执行 无权限 yes no
  • 新逻辑
Created with Raphaël 2.2.0 删除文件 拥有w权限? 删除 执行 属主是本人? 无权限 yes no yes no

例子详解

  • 基本文件

users

useradd judas
usermod -a -G foreva judas
useradd godme
usermod-a -G foreva godme

dir

mkdir -p /tmp/project
chgrp -R foreva
chmod a=rwx /tmp/project
  • 操作

judas

cd /tmp/project
touch judas
# 成功

godme

cd /tmp/project
rm judas
# 成功
  • 修改

dir

chmod o=r /tmp/project 

judas

touch judas
# 成功
rm judas
# 失败

godme

rm judas
# 失败
  • 特殊

dir

chmod -o=rt /tmp/project

judas

touch judas
rm judas
# 成功
touch judas

godme

rm judas
# 失败

设置了t,只能管理自己的文件,别人或可查看,不可删除。

扩展权限

基本扩展

所谓特殊权限,不过是扩展而已

基本权限 扩展权限 说明
r -
w t 文件操作
x s 进程启动

数值权限

  • umask

还记得这篇文章么,其中说到了umask,我们简单的说了一下。

  • 查看办法
umask
  • 设置办法
umask 0022
  • 影响

文件默认权限666,文件夹默认权限777

新建文件权限为0666-umask。新建文件夹权限为0777-umask

新建类型 umask 权限
file umask 0666-umask
dir umask 0777-umask
  • 第四组

最大的疑问就是,权限不是三组三类的么?

  • 组别
  • 属主
  • 属组
  • 其他
  • 类别
  • r
  • w
  • x

-表示空

umask为什么有四位?有第四组?

SUID SGID Sticky
us gs t

就是这个意思了,而它,就是最前面的那一组。

例子详解

  • us
mkdir us
chmod a= us
ls -l us
# ---------
chmod 4000 us
# --S------
  • gs
mkdir us
chmod a= gs
ls -l gs
# ---------
chmod 2000 gs
# -----S---
  • t
mkdir t
chmod a= t
ls -l t
# ---------
chmod 1000 t
# --------T

数值对照

SUID SGID Sticky Oct power
0 0 0 0 ---
0 0 1 1 --T
0 1 0 2 -S-
0 1 1 3 -ST
1 0 0 4 S--
1 0 1 5 S--
1 1 0 6 SS-
1 1 1 7 SST

猜你喜欢

转载自blog.csdn.net/wait_for_eva/article/details/84566230