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. MFC GDI+显示GIF文件《转》

    在头文件里面添加: Image* image; GUID Guid ; UINT frameCount; UINT framePos;ULONG_PTR gdiplusToken; afx_msg v ...

  2. 《Linux性能及调优指南》 Linux进程管理

    版权所有: 原文名称:<Linux Performance and Tuning Guidelines> 原文地址:http://www.redbooks.ibm.com/abstract ...

  3. iview3 版本 升级

    Button 废弃 type ghost,原先的 default 样式有改变. Icon 的图标升级至 ionicons 3.0 图标,图标名称有改变. Breadcrumb 废弃 href 属性. ...

  4. Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'kindergarten.n.stuMChkTime' which is not functionally dependent on columns in GROUP BY clause; this is in

    错误原因: ​ sql _mode中only _full _group _by不兼容的问题 解决思路: ​ 既然是only _full _group _by不兼容,那就把它去掉就好啦 show var ...

  5. Python classes to extract information from the Linux kernel /proc files.

    python/python-linux-procfs/python-linux-procfs.git - Python classes to extract information from the ...

  6. Linux下不借助工具实现远程linux服务器上传下载文件

    # Linux下不借助工具实现远程linux服务器上传下载文件 ## 简介 - Linux下自带ssh工具,可以实现远程Linux服务器的功能- Linux下自带scp工具,可以实现文件传输功能 ## ...

  7. mysql - ERROR 1114 (HY000): The table is full

    mysql - ERROR 1114 (HY000): The table is full - Stack Overflowhttps://stackoverflow.com/questions/73 ...

  8. linux内核中i2c驱动中slave模式接口的调用

    1. 关注unreg_slave接口 1.1 这个接口在哪里被调用呢? 在drivers/i2c/i2c-core-slave.c中 int i2c_slave_unregister(struct i ...

  9. Qt widget使用QML自定义导航栏

    具体方法: https://www.cnblogs.com/judes/p/11359243.html qml: import QtQuick 2.0 import QtQuick 2.9 impor ...

  10. 【微信开发】微信小程序通过经纬度计算两地距离php代码实现

    需求: 要求做个根据用户当前位置获取周围商家地址,并且按照由近到远排序, 方法一: 代码层实现 封装方法: /** * @desc 根据两点间的经纬度计算距离 * @param float $lat ...