linux SUID/SGID/SBIT权限推荐

其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在执行时是以用户 B的身份来执行。

其中一个suid的应用实例就是passwd,在linux中,存储密码的文件是/etc/passwd与/etc/shadow这两个文件,

yeelone@yee:~/cpp$ls-l/etc/passwd-rw-r--r--1rootroot15032011-03-2215:03/etc/passwdyeelone@yee:~/cpp$yeelone@yee:~/cpp$ls-l/etc/shadow-rw-r-----1rootshadow10712011-03-2215:03/etc/shadowyeelone@yee:~/cpp$

这两天文件的所属用户 是root,也就是说,只有root用户可以修改这个文件。但是在一个多用户 的系统中,即便是普通用户,也有更改自己的密码的权限吧?但是更改密码就要更改到/etc/passwd这个文件,一般情况下是不被允许的。所以,这就是suid的作用了。

先看一下设置密码的命令:

root@yee:/tmp/aa#ls-l/usr/bin/passwd-rwsr-xr-x1rootroot371002011-02-1506:12/usr/bin/passwd

可以看到,/usr/bin/passwd是设置 了sticky位的。也就是说,当普通用户在执行passwd命令时,其实使用是root管理员的身份,当更改完密码时,就恢复到普通用户的身份了。

我想了一个实验来看一下效果

cd/tmp/mkdiraacdaa

写一个perl程序:

#!/usr/bin/perlsystem( touchtest 

顺便说一下,需要先安装perl-suid才可以设置perl程序suid位。不然会报如下错误:

Can’t do setuid (cannot exec sperl)

设置suid位:

chmodu+s/tmp/aa/test.plchmod u+x /tmp/aa/test.pl

-rwsr-xr-x1yeeloneyeelone382011-03-2215:00test.pl*

目前用用户yeelone来执行:

yeelone@yee:/tmp/aa$ll总计12drwxr-xr-x2yeeloneyeelone40962011-03-2215:31./drwxrwxrwt13rootroot40962011-03-2215:17../-rw-r--r--1yeeloneyeelone02011-03-2215:31test-rwsr-xr-x1yeeloneyeelone382011-03-2215:00test.pl*yeelone@yee:/tmp/aa$

yeelone@yee:/tmp/aa$su密码:root@yee:/tmp/aa#rm-ftestroot@yee:/tmp/aa#./test.plroot@yee:/tmp/aa#ll总计12drwxr-xr-x2yeeloneyeelone40962011-03-2215:34./drwxrwxrwt13rootroot40962011-03-2215:17../-rw-r--r--1yeeloneroot02011-03-2215:34test-rwsr-xr-x1yeeloneyeelone382011-03-2215:00test.pl*root@yee:/tmp/aa#

当我们用root的用户来执行test.pl这个程序时,touch出来的文件的所属主依然是yeelone,证明确实是以yeelone的身份来执行这个程序 的。

SGID多用在团队合作上,实际应用我觉得很少,具体应用是不太清楚,但是,可以创建一个目录,作为团队合作的工作目录,设置 sgid,那么团队成员都会以这个组的身份来访问操作这个目录的,如果在这个目录下创建了文件,则所属的组是这个目录所属的组。这个,属于这个组的其它成员就都可以共享这个文件的内容了。

yeelone@yee:/tmp/aa$mkdirbbyeelone@yee:/tmp/aa$chmodg+sbbyeelone@yee:/tmp/aa$ll总计16drwxr-xr-x3yeeloneyeelone40962011-03-2215:44./drwxrwxrwt13rootroot40962011-03-2215:17../drwxr-sr-x2yeeloneyeelone40962011-03-2215:44bb/-rw-r--r--1yeeloneroot02011-03-2215:34test-rwsr-xr-x1yeeloneyeelone382011-03-2215:00test.pl*yeelone@yee:/tmp/aa$cdbbyeelone@yee:/tmp/aa/bb$su密码:root@yee:/tmp/aa/bb#touchoneroot@yee:/tmp/aa/bb#ll总计8drwxr-sr-x2yeeloneyeelone40962011-03-2215:44./drwxr-xr-x3yeeloneyeelone40962011-03-2215:44../-rw-r--r--1rootyeelone02011-03-2215:44oneroot@yee:/tmp/aa/bb#

这样子,即使是root创建的文件,我的普通用户yeelone也可以查看。

最后一个,SBIT权限,这个是用在other权限位的,而且是应用 在目录上的操作。

在linux上,最典型的应用就是/tmp目录,当多个用户同时登录到系统上时,都会在/tmp目录下生成自己 的文件,为了不让别的用户随便删除自己的文件,所以在/tmp目录中设置了SBIT位。

yeelone@yee:/tmp/aa$ll-dl/tmpdrwxrwxrwt13rootroot40962011-03-2215:17/tmp/yeelone@yee:/tmp/aa$

当设置了t位,只有创建这个文件的用户才可以删除自己的文件,其它用户 是不可以删除的。

记忆像是倒在手心里的水,不论是摊平还是握紧,

linux  SUID/SGID/SBIT权限推荐

相关文章:

你感兴趣的文章:

标签云: