Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1181454
  • 博文数量: 181
  • 博客积分: 4968
  • 博客等级: 上校
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-13 21:52
文章分类

全部博文(181)

文章存档

2015年(2)

2013年(6)

2012年(22)

2011年(41)

2010年(27)

2009年(51)

2008年(32)

我的朋友

分类: LINUX

2011-08-25 14:58:10

程序的SUID/SGID属性

SUID的作用:当运行被设置了SUID属性的程序时,无论是谁都拥有程序所有者访问系统资源的权限

如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的 话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而 文件所有者不变,还是属于建立这个文件的用户。

一、概念:

          SUID的作用:当运行被设置了SUID属性的程序时,无论是谁都拥有程序所有者访问系统资源的权限

文件权限:确定用户读取、修改或执行文件的权力。
    r -- 读访问
    w -- 写访问
    x -- 执行许可
    s -- SUID/SGID
    t -- sticky
进程:进程是程序运行一次的过程,以完成预定的任务,它不同于程序。每个进程都有一个唯一的进程ID。此外,每个进程还有一些其他标识符:实际用户IDuser id=uid)、实际组IDgroup id=gid)、有效用户IDeffective user id=euid)、有效组IDeffective group id=egid)。

内核主要是根据euid egid来确定进程对资源的访问权限 一个进程如果没有SUIDSGID位,则euid=uid egid=gid,分别是运行这个程 序的用户的uidgid 

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


二、举例来说:

有两个用户:foo  uid=500 gid=501
                         kent  uid=503 gid=504

foo创建了一个可执行文件 fooexe,用ls命令显示如下:

-rwxr-xr-x  1 foo  foo   7734  Apr  05  17:07  fooexe  任何用户都可以执行这个程序。

1、在没有设置SUID/SGID的情况下,fookent分别执行这个程序,他们的情况如下

用户

uid

gid

euid

egid

进程访问系统资源权限

foo

500

501

euid=uid=500

egid=gid=501

foo的访问权限决定

kent

503

504

euid=uid=503

egid=gid=504

kent的访问权限决定,与foo无关

 

2、在设置SUID/SGID的情况下,

ls命令显示如下

-rwsr-xr-x  1 foo  foo   7734  Apr  05  17:07  fooexe  任何用户都可以执行这个程序。

fookent分别执行这个程序,他们的情况如下

用户

uid

gid

euid

egid

进程访问系统资源权限

foo

500

501

euid=uid=500

egid=gid=501

foo的访问权限决定

kent

503

504

euid=foouid=500

egid=foogid=501

foo的访问权限决定

程序结束后,foo赋予kent的权限也收回。

 

三、关于目录的SGID属性

    如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的 话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而 文件所有者不变,还是属于建立这个文件的用户。
例如:/usr/foo目录的属主是foo,没有设置SGID属性。用户kent进入这个目录创建了文件kentfile ,则这个文件的属性显示如下:

-rwxr-xr-x  1 kent  kent  7734  Apr  05  17:07  kentfile  ;文件所有者和组都是kent

/usr/foo目录设置了SGID属性,用户kent建立文件kentfile显示的属性是:

-rwxr-xr-x  1 kent  foo  7734  Apr  05  17:07  kentfile  ;文件所有者是kent,组是foo

 

四、SUID/SGID设置

    设置SUID/SGID标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来设置:
1
、采用字符来设置:
chmod u+s temp --
temp文件加上suid标志. (setuid 只对文件有效)
chmod g+s tempdir --
tempdir目录加上sgid标志 (setgid 只对目录有效)


2)
采用数字方式设置:
在一般文件权限设置的3位数字前再加上一位数字,成为4位数字。

如果该位为4, 则表示设置setuid
如果该位为2, 则表示设置setgid
所以,假设文件或目录的原来权限位设置是777,要加上SUID/SGID,如下设置:

chmod 4777 temp 是设suid
chmod 2777 tempdir
是设置sgid


    设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示.
rwsrw-r--
表示有setuid标志
rwxrwsrw-
表示有setgid标志
如果本来在”s”位上有x标志, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

常用操作

找出所有设置了suid的文件
find / -perm -4000 -type f

阅读(3073) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~