一下转载自http://www.linuxeden.com/html/unix/20071031/36892.html

  如果你对SUID、SGID仍有迷惑可以好好参考一下!

由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系 统安全,所以用户也比较关心这个问题。关于SUID、SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上曾经回答过两个网友的问题,还查了 一些资料,决定整理成本文,以供大家参考。限于本人的水平问题,文章中如果有不当之处,请广大网友指正。

一、UNIX下关于文件权限的表示方法和解析

SUID 是 Set User ID, SGID 是 Set Group ID的意思。

UNIX下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。这种表示方法一共有十位:

9 8 7 6 5 4 3 2 1 0

- r w x r - x r - x

第9位表示文件类型,可以为p、d、l、s、c、b和-:

p表示命名管道文件

d表示目录文件

l表示符号连接文件

-表示普通文件

s表示socket文件

c表示字符设备文件

b表示块设备文件

第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其他用户的权限,其形式为rwx:

r表示可读,可以读出文件的内容

w表示可写,可以修改文件的内容

x表示可执行,可运行这个程序

没有权限的位置用-表示

例子:

ls -l myfile显示为:

-rwxr-x--- 1 foo staff 7734 Apr 05 17:07 myfile

表示文件myfile是普通文件,文件的所有者是foo用户,而foo用户属于staff组,文件只有1个硬连接,长度是7734个字节,最后修改时间4月5日17:07。

所有者foo对文件有读写执行权限,staff组的成员对文件有读和执行权限,其他的用户对这个文件没有权限。

如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如:

1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置

2、-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置

3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置

4、-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被社

其实在UNIX的实现中,文件权限用12个二进制位表示,如果该位置上的值是

1,表示有相应的权限:

11 10 9 8 7 6 5 4 3 2 1 0

S G T r w x r w x r w x

第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面的三组rwx位。

11 10 9 8 7 6 5 4 3 2 1 0

上面的-rwsr-xr-x的值为: 1 0 0 1 1 1 1 0 1 1 0 1

-rw-r-Sr--的值为: 0 1 0 1 1 0 1 0 0 1 0 0

给文件加SUID和SUID的命令如下:

chmod u+s filename 设置SUID位

chmod u-s filename 去掉SUID设置

chmod g+s filename 设置SGID位

chmod g-s filename 去掉SGID设置

另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位权限表示法也很简单。

二、SUID和SGID的详细解析

由于SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID位是没有多大意义的。

首先讲普通文件的SUID和SGID的作用。例子:

如果普通文件myfile是属于foo用户的,是可执行的,现在没设SUID位,ls命令显示如下:

-rwxr-xr-x 1 foo staff 7734 Apr 05 17:07 myfile任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的(有效)ID,包括 user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。

除了一般的user id 和group id外,还有两个称之为effective 的id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。

一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202,foo用户的uid和gid为 200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问 的限制,其实就是kevin用户对资源访问的权限,和foo没关系。

如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。

SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。

SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。

下面讨论一个例子:

UNIX系统有一个/dev/kmem的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:cr--r----- 1 root system 2, 1 May 25 1998 kmem

但ps等程序要读这个文件,而ps的权限设置如下:

-r-xr-sr-x 1 bin system 59346 Apr 05 1998 ps

这是一个设置了SGID的程序,而ps的用户是bin,不是root,所以不能设置SUID 来访问kmem,但大家注意了,bin和root都属于system组,而且ps设置了SGID,一般用户执行ps,就会获得system组用户的权限, 而文件kmem的同组用户的权限是可读,所以一般用户执行ps就没问题了。但有些人说,为什么不把ps程序设置为root用户的程序,然后设置SUID 位,不也行吗?这的确可以解决问题,但实际中为什么不这样做呢?因为SGID的风险比SUID小得多,所以出于系统安全的考虑,应该尽量用SGID代替 SUID的程序,如果可能的话。下面来说明一下SGID对目录的影响。SUID对目录没有影响。如果一个目录设置了SGID位,那么如果任何一个用户对这 个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。

转载于:https://www.cnblogs.com/livepencil/archive/2010/10/17/1853690.html

[转]SUID和SGID相关推荐

  1. linux下文件、文件夹权限的作用及设置方法(常规权限与SUID、SGID、SBIT、ACL、sudo、umask)

    linux下文件权限设置及其作用 文件权限与归属(读.写.执行权限) linux系统中一切皆文件,要说权限,有必要先了解一下文件的分类 Linux中的文件分类 在linux系统中一切都是文件,但是文件 ...

  2. [Linux]从控制台一次读取一个字符,无需等待回车键

    [Linux]从控制台一次读取一个字符,无需等待回车键 周银辉 读取字符嘛,可以使用getchar(),getch()等等函数,但它们都需要等待回车键以结束输入,而不是按下键盘时立即响应,看上去不那么 ...

  3. 如何理解:先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法,即对于机器数为负数,则有[X]原=[[X]补]补。

    对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1的方法,即对于机器数为负数,则有[X]原=[[X]补]补. 当然你也可以用先减1后取反的方法来求补码对应的原码. 对于求 ...

  4. 理解基本权限以及特殊权限:Suid 、Sgid、Sticky以及acl

    理解基本权限以及特殊权限:Suid .Sgid.Sticky以及acl 1 在Linux中特殊权限是什么?为什么要设定特殊权限?回答这个问题前,我们不妨思考为什么要设定权限? 大家知道Linux中一切 ...

  5. 开源的悲哀——袁萌100天变身实录[2]

    承接上文:开源的悲哀--袁萌100天变身实录[1] 2008年2月末:赤裸裸的微软支持者! 2008年2月29日是ISO为OOXML设置"快速通道"的投票日,因此2月下旬成为OOX ...

  6. 文件特殊权限suid、sgid、stick_bit、硬链接、软链接

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 文件.目录管理 2.18 特殊权限之 suid SUID的作用就是:让本来没有相应权限的用户运行这个程序时,可以访问没 ...

  7. 中职计算机应用基础每章知识点,[定稿]中职计算机应用基础教案_1-5章V3.1

    <[定稿]中职计算机应用基础教案_1-5章.doc>由会员分享,可免费在线阅读全文,更多与<[定稿]中职计算机应用基础教案_1-5章(V3.1)>相关文档资源请在帮帮文库(ww ...

  8. 特殊权限控制之SUID、SGID、Sticky及facl

    上次讲了基本权限管理中的chown.chgrp.chmod以及umask四个命令,今天我们来讲一讲权限最后的一点内容特殊权限位:SUID.SGID.Sticky以及facl 一.SUID 定义:运行某 ...

  9. Linux RCU机制详解[转]

    一:前言 RCU机制出现的比较早,只是在linux kernel中一直到2.5版本的时候才被采用.关于RCU机制,这里就不做过多的介绍了,网上有很多有关RCU介绍和使用的文档.请自行查阅.本文主要是从 ...

最新文章

  1. Start Developing iOS Apps Today系列(十二)
  2. 利用JSON-schema校验请求报文,封装转换错误信息,提示前台
  3. VC各种情况下的窗口句柄的获取
  4. 入门机器学习,这一步必不可少!
  5. 又一台苹果第一代电脑顺利拍卖:成交价超过47万美元
  6. NGUI里的sprite和label有白色的边框
  7. Anbox之源码编译(一)
  8. 标准输入输出详解(C++)
  9. 基于小米球(Ngrok)实现内网穿透
  10. 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)-看了还不会提刀来找我
  11. STM32 CAN通信协议详解—小白入门(一)
  12. 谷歌浏览器 cococut version 视频下载插件配合倍速插件快速下载视频
  13. 真正解决IDEA中Tomcat中文乱码问题
  14. 百度手写文字识别教程
  15. lvds 共模电感_初识共模电感 - yi394517286的博客 - 与非博客 - 与非网
  16. IP地址、路由器、数据分片、地址管理、子网掩码、路由选择、公网与私网
  17. python-pandapower电力系统短路电流计算(算例3:探索一天的最佳电网运行方式))
  18. 数据科学家为什么还要学藏语?这不科学。首份藏文数字数据集出炉
  19. 降噪耳机推荐,四款优秀的降噪耳机分享
  20. 移动端vue+vant+高德地图实现拖拽选址,周边选址,搜索选址,自动定位,选择城市功能,获取地址经纬度,详细地址

热门文章

  1. 帝国理工学院暑期学校 | 大数据与创新主题,郭院士领衔,全球Top10校级证书...
  2. 视觉推理新杀器!英特尔新一代VPU性能翻10倍,反超英伟达
  3. 【AI项目商务合作】图像拼接
  4. 【Java进阶营】JAVA多线程基础学习二:synchronized
  5. 自学Python编程和科班出身的Python编程差别在哪?一张图告诉你
  6. 高效新思路!实例分割算法!腾讯、华科出品!入选ICCV 2021!
  7. 收藏 | 使用PyTorch时,最常见的4个错误
  8. Pytorch还是TensorFlow?顶会带你览趋势
  9. 重磅 | 《机器学习综述》算法分类及特征工程手推笔记!
  10. c语言随机读写信息fetch,北京大学信息科学技术学院考试试卷-计算机系统导论-期中-2015(16页)-原创力文档...