setuid和setgid位详述

分类: UNIX/LINUX 学习心得 136人阅读 评论(0) 收藏 举报

setuid和setgid位

[1] setuid位

如果在可执行文件上设置了setuid位,运行可执行文件的进程将拥有该文件所有者同样的权限。

典型的例子是这个。
可执行文件:/usr/bin/passwd

/usr/bin/$ls -l passwd
-rwsr-xr-x 1 root root 32988 2008-06-10 02:10 passwd

ls后可以看到,它的文件属主是root,它的可执行权限位是s,表示该文件可执行并且已经设置了setuid位。

/etc$ls -l passwd
-rw-r--r-- 1 root root 1515 2009-03-29 18:08 passwd

/etc/passwd的文件属主是root,只有root用户拥有写权限,其他类型的用户只能读该文件。

我们知道,当执行/usr/bin/passwd来修改某个用户的可执行权限时,需要修改文件/etc/passwd。
如果我用非root用户(如:patrick)的身份来执行/usr/bin/passwd,由于它设置了setuid位,用户patrick
在执行的过程中,就拥有了root用户的权限。因此,它可以对文件/etc/passwd进行修改(有写权限)。

[2] setgid位
当某个目录上设置了setgid位后,在这个目录中新创建的文件具有该目录的属性权限而不是创建该文件的用户
的默认属组。这项约定使得几个用户之间(只要这些用户属于一个共同的组)共享一个目录中的文件变得简单。

[3] 设置它们的方法
chmod u+s file1      -- 设置setuid位
chmod g+s file1      -- 设置setgid位

chmod 4755 file1      -- 设置setuid位
chmod 2755 file2      -- 设置setgid位
chmod 6755 file3     -- 同时设置setuid和setuid位

如果文件原来设置了可执行位(x),增加了setuid或者setgid位后,对应的可执行位是s,如果它原来没有设置
可执行位,增加了setuid和setgid位后,对应的可执行位是S。

 

粘着位

 

eg:

chmod 777 abc

chmod +t abc

 

等价于

chmod 1777 abc

在以前旧的系统当中,如果一个程序文件一旦设置了粘着位,那么当该程序中止的时候他的所有指令段将被保存到系统的交换分区当中,再次运行时可以更快的调入系统.不过现在的操作系统已经不再使用这种功能了.但这并不表示这功能已经完全被废弃.当一个目录设置为粘着位时,它将发挥特殊的作用,即当一个目录被设置为"粘着位"(用chmod a+t),则该目录下的文件只能由


一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除


也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。