1、setUID、setGID 和 Sticky BIT 的功能详解

  setuid 功能:

    1、只有可执行的二进制文件程序才能设定 SUID 权限(前提)

    2、命令执行者要对该程序有执行(x)权限(必要条件)

    3、命令执行者再执行该程序时获得该程序文件属主的身份

    4、setuid 权限只在该程序执行过程中生效

  setgid 功能: -- 对文件而言

    1、只有可执行的二进制程序设置SGID

    2、命令执行者要对该程序拥有执行(x)权限

    3、命令执行再执行程序的时候,组身份升级为该程序文件的属组

    4、setgid 权限童谣只在该程序执行过程中有效

  sticky BIT 功能:

    1、粘位一般用于对目录进行操作

    2、普通用户对该目录拥有 w 和 x 权限

    3、设置了粘位的目录,其目录下的文件只有由那个创建的人才能删除,其他人即使拥有w权限也是不行的(root管理员除外)
  

2、setuid、setgid 和 sticky BIT的实例应用

  setuid和setgid

  setuid 和setgid位是让普通用户可以以root用户的角色运行只有root帐号才能运行的程序或命令。比 如我们用普通用户运行passwd命令来更改自己的口令,实际上最终更改的是/etc/passwd文件我们知道/etc/passwd文件是用户管理的 配置文件,只有root权限的用户才能更改
  

  作为普通用户如果修改自己的口令通过修改/etc/passwd肯定是不可完成的任务,但是不是可以通过一个命令来修改呢答案是肯定的,作为普通用 户可以通过passwd 来修改自己的口令这归功于passwd命令的权限我们来看一下;
  

  因为/usr/bin/passwd 文件已经设置了setuid 权限位(也就是r-s--x--x中的s),所以普通用户能临时变成root,间接的修改/etc/passwd,以达到修改自己口令的权限
  我们在Linux 系统中的超级权限的控制中 有提到过我们知道Linux的用户管理是极为严格的,不同的用户拥有不同的权限,为了完成只有root用户才能完成的工作,我们必须为普通用户提升权 限,最常用的方法就是su或sudo虽然setuid 和setgid也是让普通用户超越自身拥有的普通权限达到root权限的方法,但我不推荐大家使用,因为它能为系统带来隐患!!
  注意:setuid和setgid会面临风险,所以尽可能的少用

  我们想让一个普通用户 qiuyu 拥有root用户拥有超级rm删除权限,我们除了用su或sudo 临时切换到 root身份操作以外,还能怎么做呢?

  

  

  rm: 无法删除 beinantest.txt: 权限不够
  那我们怎么才能让qiuyu 这个普通用户也拥有root超级的rm 删除功力呢?
  

  

  我们只是设置了rm 的setuid位,让普通用户在rm指令上有超级root的删除超级权力
  通过这个例子,我们应该能明白setuid和setgid位的应用了,如同前面所说,让普通用户超越本身的能力,让普通用户能执行只有root才能 执行的命令在这一点,我们要和su和sudo 区分开来请参见su和sudo的文档:Linux 系统中的超级权限的控制
  

  sticky BIT

  我们知道 /tmp 是系统的临时文件目录,所有的用户在该目录下拥有所有的权限,也就是说在该目录下可以任意创建、修改、删除文件,那如果用户A在该目录下创建了一个文件,用户B将该文件删除了,这种情况我们是不能允许的。为了达到该目的,就出现了stick  bit(粘滞位)的概念。它是针对目录来说的,如果该目录设置了stick  bit(粘滞位),则该目录下的文件除了该文件的创建者和root用户可以删除和修改/tmp目录下的stuff,别的用户均不能动别人的,这就是粘滞位的作用。

  设置 /tmp目录的粘位:

  

  再由 qihuan 用户进入该目录下新建 aa 文件并操作:

  

  再用 qiuyu 用户对 aa 进行删除操作:

  

3、setuid、setgid和 sticky BIT的设置方法
  Chmod命令中的特殊权限位含义:

    1、S_ISUID 04000 文件的 (set user-id on execution)位

    2、S_ISGID 02000 文件的 (set group-id on execution)位

    3、S_ISVTX 01000 文件的sticky 位

    上面的都是8进制数。

 如何设置UID、GID、STICK_BIT:

    SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S .

      chmod u+s  xxx # 设置setuid权限

      chmod 4551 file // 权限: r-sr-x—x

    SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .

      chmod g+s  xxx # 设置setgid权限

      chmod 2551 file // 权限: r-xr-s--x

    STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .

      chmod o+t  xxx # 设置stick bit权限,针对目录

      chmod 1551 file // 权限: r-xr-x--t

4、注意事项

  注意:特殊权限只对可执行权限的文件有效,没有执行权限的文件被设置成特殊限位时毫无意义的

  没有可执行权限的文件被设置成特殊权限位的标志:

  SUID---S(大写)---不可用状态

  SGID---S(大写)---不可用状态

  SBIT----T(大写)---不可用状态

Linux权限管理:setUID、setGID 和 Sticky BIT的更多相关文章

  1. 五大权限:UGO权限、SetUID SetGID Sticky、ACL权限、chattr(文件系统级别的权限)、SELINUX

    五大权限:UGO权限.SetUID SetGID Sticky.ACL权限.chattr(文件系统级别的权限).SELINUX   ======================文件属性以及ugo权限= ...

  2. linux权限管理-特殊权限

    目录 linux权限管理-特殊权限 一,特殊权限 Linux权限属性chattr概述 linux进程掩码umask linux权限管理-特殊权限 一,特殊权限 1.suid(4000) SetUID( ...

  3. Linux—权限管理

    Linux 权限管理 1.权限简介 Linux权限是操作系统用来限制对资源访问的机制,权限一般分为读.写.执行.系统中每个文件都拥有特定的权限:属主.属组以及其他人,通过这样的机制来限制哪些用户或用户 ...

  4. Linux系列教程(十六)——Linux权限管理之ACL权限

    通过前面的两篇博客我们介绍了Linux系统的用户管理,Linux用户和用户组管理之相关配置文件 讲解了用户管理的相关配置文件,包括用户信息文件/etc/passwd,用户密码文件/etc/shadow ...

  5. 【Linux】 Linux权限管理与特殊权限

    Linux权限管理 权限管理这方面,非常清楚地记得刚开始实习那会儿是仔细研究过的,不知道为什么没有笔记留痕..除了一些基本的知识点早就忘光了,无奈只好从头开始学习一遍.. ■ 基本权限知识 这部分实在 ...

  6. Linux基础知识之用户和用户组以及 Linux 权限管理

    已经开始接触Linux用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时候看到这些名词总是下意识的跳过不敢看 ...

  7. Linux权限管理之ACL权限

    注:转载自:https://www.cnblogs.com/ysocean/p/7801329.html 目录 1.什么是 ACL 权限? 2.查看分区 ACL 权限是否开启:dump2fs ①.查看 ...

  8. [Linux 003]——用户和用户组以及 Linux 权限管理(一)

    嗬!没想到吧!学习 Linux 的第三天,我们已经开始接触用户管理,用户组管理,以及权限管理这几个逼格满满的关键字.这几个关键字对于前端程序猿的我来说真的是很高大上有木有,以前尝试学 Linux 的时 ...

  9. 用户和用户组以及 Linux 权限管理

    1.从 /etc/passwd 说起 前面的基本命令学习中,我们介绍了使用 passwd 命令可以修改用户密码.对于操作系统来说,用户名和密码是存放在哪里的呢?我们都知道一个站点的用户名和密码是存放在 ...

  10. Linux权限管理(用户、组、文件管理)

    一. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 1. 文件查看类命令cat,tac, head, tail, more, less, ls ,file: -ls : l ...

随机推荐

  1. pip安装报错Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-e_k8hq6a/pynacl/

    Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-e_k8hq6a/pyn ...

  2. OGC open geospatial consortium标准服务

    数据共享作为GIS行业的基础,是每一位从事GIS相关领域人员必须要了解的知识,而OGC服务作为行业标准,已经被各大GIS厂商广泛应用.究竟什么是OGC呢? OGC全称——开放地理空间信息联盟(Open ...

  3. nginx高级玩法之根据来源ip分流

    author :headsen chen date :   2019-08-15  16:37:05 notice :个人原创 需求:根据不同的请求的来源ip实现分流到不同的后端上去 方法一:1,在s ...

  4. MacBook Pro设置外接显示器竖屏显示 切换主显示器

    切换主显示器设置 有一些使用 Mac 电脑的用户,比如笔记本用户,可能会由于屏幕太小想外接一个更大的显示器,也或是有多显示输出的需求.当 Mac 电脑上有了多个显示器以后,此时便会有主副显示区之分了. ...

  5. Angular中使用ECharts图表

    1.安装: npm install echarts --save 2.在 TypeScript 文件中导入echarts import * as echarts from 'echarts'; 3.根 ...

  6. typescript命名空间

    /* 命名空间: 在代码量较大的情况下,为了避免各种变量命名相冲突,可将相似功能的函数.类.接口等放置到命名空间内 同Java的包..Net的命名空间一样,TypeScript的命名空间可以将代码包裹 ...

  7. typeScript模块<三>

    /*模块 1 模块的的概念 2 模块导出的几种方法 1.export 导出声明 2.export 导出语句 3.export default 4.import导入模块 3 模块化封装上一讲的DB库 * ...

  8. QQ第三方登录回调地址的问题

    如题,维护以前的项目,发现原来QQ的第三方登录竟然失败了.回调地址的问题 原来是以前的规则变了.好吧,那就改,谁叫我不是改变规则的人. 中途浪费了点时间,项目很大,我一下也找不到项目里那个接口调用的, ...

  9. ES6深入浅出-8 新版的类(下集)-2.全部语法

    解答提问 两边都没有构造函数的情况 父类没有构造函数,子类有构造函数的情况 下面用到的了this.body这个属性,所以super()必须要放在这行代码的上面. 在调用this之前必须调用super( ...

  10. 使用navicat的坑

    小黄人发送数据,测试软件是否将数据存入mysql数据库中,使用的是navicat. 首先截断了表,所有数据清零,但是此时表并没有回到第一页[由于前面查看最新数据,已经翻到了最后一页],然后小黄人发数据 ...