这里我不想讲解各种关于setUid,setGid的定义.
我们通过一系列例子来看看setUid,setGid都干了些什么.
下面我介绍时: # 开头表示的是root账户,$ 表示的是我的一个普通账号fengfulee
# ls -l `which touch`
# -rwxr-xr-x 1 root root /bin/touch
这是目前系统内部 touch程序的权限和所有者.
# ls -ld /root
# dr-xr-x--- 4 root root /root
切换到普通用户.
$ touch a.txt
提示权限不够.
解释:当然了啊,目前该/root目录普通用户不具有写权限.无法创建文件.
$ su root
# chmod u+s /bin/touch
给touch程序一个setUid.
# ls -l /bin/touch
-rwsr-xr-x root root /bin/touch
然后再切换到普通账户
#exit
$ touch a.txt
创建成功!
$ ls -l a.txt
$ -rw-r--r-- root fengfulee a.txt
注意:这里的权限为644,观察文件的所有者为root账户,但是所属组为普通账户.
②下面来做第二个实验.我将touch文件的所有者修改为普通账户,看看创建文件的情况.
$ su root
# chown fengfulee:fengfulee /bin/touch
# ls -l /bin/touch
# -rwxr-xr-x fengfulee fengfulee /bin/touch
这里要注意一点,之前的s消失了.之前设置的setUid失效了. 现在我重新设置它的setUid
# chmod u+s /bin/touch
# ls -l /bin/touch
# -rwsr-xr-x fengfulee fengfulee /bin/touch
切换账户
#exit
$ touch b.txt
无法创建b.txt,权限不够.
我又切换到该普通用户的家目录.
$ cd ~
$ touch b.txt
$ -rw-r--r-- fengfulee fengfulee b.txt
这里似乎不能说明什么内容,因为我就是这个普通用户.
于是 我切换到root账户.
$ su root
# touch c.txt
# ls -l c.txt
# -rw-r--r-- fengfulee root c.txt
这里就能说明一点东西了.这里说明setUid其实是使用该程序的所有者的权限执行程序的,于是创建的文件就是属于该程序的所有者.
③
# chmod g+s /bin/touch
# ls -l /bin/touch
# -rwsr-sr-x 1 fengfulee fengfulee /bin/touch
# touch d.txt
# ls -l d.txt
# -rw-r--r-- fengfulee fengfulee d.txt
这个似乎能说明了setGid的作用.
我还是没哟确定,我又做了一件事.
# chown fengfulee:spider /bin/touch
# ls -l /bin/touch
# -rwxr-xr-x fengfulee spider /bin/touch
这里千万要记住一点,之前我修改/bin/touch程序所属的时候,其setUid, 会消失.这里也是一样的结果.
# chmod u+s,g+s /bin/touch
# touch e.txt
# ls -l e.txt
# -rw-r--r-- fengfulee spider e.txt
现在看出点什么了吧.对,setGid和setUid类似,
总结一下,只要任何对该程序有执行权限的用户执行该程序,如果设置了setUid或者setGid的话,
其执行时,都会按照该程序实际所有者,所属组来执行文件...
④这里我又做了一个实验
# exit 切换到普通用户.
$ cd /root/
$ touch f.txt
无法创建f.txt,权限不足.
这里显示权限不足,当然啦.该程序的所有者是fengfulee,执行者还是fengfulee,尽管设置了setUid,但是按照程序所有者的权限执行的话,还是无法创建文件的.
受到启发,
$ su root
# touch f.txt
无法创建,权限不足.
我擦,这就对了...现在还是设置了setUid,并且程序所有者为 fengfulee, 虽然执行的是root账户,但是执行时时具有fengfulee权限的,但是
/root账户是不允许其他账户写入内容的.
好啦,初步探测就写到这里了.
多多关照...