suid是指在执行suid程序的过程中,去访问其他文件时拥有suid程序属主的权限,而不是指对suid程序本身拥有suid程序属主的权限!

一. Linux 文件权限的表示方法

文件权限用 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 位。

上面的-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 的作用。

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

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

任何用户都可以执行这个程序。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 位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。

Linux 权限设置和 SUID, SGID 以及粘滞位sticky bit的更多相关文章

  1. 深入理解linux的权限设置和SUID,SGID以及粘滞位

    我们知道文件的权限可以用三个八进制数字表示.其实文件的权限应该用四个八进制来表示,不过用 ls -l 命令时,只显示三个罢了.那个没有显示的八进制数字其实是第一个,它用来设定一些特殊权限.这个八进制数 ...

  2. Linux中的特殊权限粘滞位(sticky bit)详解

    Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...

  3. 【转】Linux中的特殊权限粘滞位(sticky bit)详解

    Linux下的文件权限 在linux下每一个文件和目录都有自己的访问权限,访问权限确定了用户能否访问文件或者目录和怎样进行访问.最为我们熟知的一个文件或目录可能拥有三种权限,分别是读.写.和执行操作, ...

  4. Linux文件和目录的粘滞位(sticky bit)

    今天维护系统时发现一个非常诡异的问题:AAA用户和BBB用户同属AAA组,但用AAA用户创建的文件,权限设置为777后,还是不能用BBB用户删除.诡异! 几经周转,发现AAA用户创建文件位置的上层目录 ...

  5. SUID、SGID、粘滞位

    粘滞位(Stikybit) +t,只有用户自己可以删除自己创建文件,其他用户只能查看,不能删除.        1:创建两个用户  useradd oo                         ...

  6. 自学linux——22.粘滞位的了解及使用

    粘滞位的了解及使用 一.权限 1.文件的权限 r (read) :可读取该文件的实际内容w(write):可以编辑,新增或者修改该文件的内容(但不含删除该文件)x(execute):代表该文件可以被系 ...

  7. Linux中相关知识(atexit(),fork(),粘滞位)

    1.atexit()函数 函数名: atexit 头文件:#include<stdlib.h> 功 能: 注册终止函数(即main执行结束后调用的函数) 用 法: int atexit(v ...

  8. setuid setgid stick bit 特殊权限 粘滞位

    1.setuid与setgid讲解 看一下系统中用到它的地方,以/etc/passwd和/usr/bin/passwd为例: 分析一下,/etc/passwd的权限为 -rw-r--r-- 也就是说: ...

  9. Linux 文件特殊权限详解[suid/sgid/t]

    setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...

随机推荐

  1. Codeforces 526F Pudding Monsters

    先把题目抽象一下: 有一个静态的数组,求有多少个区间[i,j]满足:j-i==max{ai,...,aj}-min{ai,...,aj} 也就是要求max-min+i-j==0的区间数 所以肿么做呢? ...

  2. 洛谷P4288||bzoj3564 [SHOI2014]信号增幅仪

    bzoj3564 洛谷P4288 可以旋转一下坐标轴使得x轴与长轴方向对齐,然后将所有的横坐标变为自身除以放大倍数,然后就做一个最小圆覆盖 #include<cstdio> #includ ...

  3. 15 使用lambdas和闭包

    1       使用lambdas和闭包 1.1  定义闭包 闭包是一个代码块,代替了方法或类. groovy中的闭包基于后边的构造方式:{list of parameters-> closur ...

  4. 在腾讯云centOs系统上安装nginx

    1.安装nginx 下载:wget http://nginx.org/download/nginx-1.8.1.tar.gz 解压:tar -zxvf nginx-1.8.1.tar.gz 安装编译源 ...

  5. HDU4405 Aeroplane chess(期望dp)

    题意 抄袭自https://www.cnblogs.com/Paul-Guderian/p/7624039.html 正在玩飞行棋.输入n,m表示飞行棋有n个格子,有m个飞行点,然后输入m对u,v表示 ...

  6. vue从入门到开发--4--处理http请求

    一: 在main.js里面处理http请求模块,因为没有这个模块,所以需要先安装这个模块:npm install vue-resource --save 安装完毕之后,导入这个模块,并使用中间件将其使 ...

  7. iOS --runtime理解

    iOS~runtime理解 Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下,一为 查阅方便二为 或许能给 ...

  8. Objective-C Operators and Expressions

    What is an Expression? The most basic expression consists of an operator, two operands and an assign ...

  9. SVN的两种存储方式FSFS和BDB比较【转】

    版本库数据存储 在Subversion1.2中,版本库中存储数据有两种方式.一种是在Berkeley DB数据库中存储数据:另一种是使用普通的文件,使用自定义格式.因为Subversion的开发者称版 ...

  10. 洛谷 P1926 小书童——刷题大军

    题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的人. 文言是火,点亮历史宫灯:历史是灯,照亮社会之路:社会是路,通向哲学大坑:哲学是坑,埋葬文科生 ...