suid 和 sgid的应用
我们先去建立几个用户和组,当然还要有一个共享目录,好了我们现在去搭建环境。
要先创建组
# groupadd -g 1000 group1
#groupadd -g 1002 group2
接着我们去创建用户
# useradd -g group1 user1
# useradd -g group1 user2
# useradd -g group2 user3
最后我们去创建一个目录
# mkdir /share(如果存在就不需要创建了)
# chown :group1 /share
#chmod g+w /share
#chmod u+w /share
好了,环境已经搭建好了,呵呵…….
现在我们先来做一下suid吧!
#cp /etc/passwd /share
# cp /root/anaconda-ks.cfg /share
我们此时以user1登陆去看一下
# su - user1
$ cd /share
$rm passwd
$ ls -l
-rwS--r-- 1 root root 1921 Feb 6 02:23 passwd
可以看到我们们有权限删除这个文件,那么我们一定要user1去删除他呢,我们怎么做呢,此时我们用到了suid
# chmod u+s /share/passwd
好了此时我们以user1登陆
$ cd /share
$ ls -l
$ vim passwd
我们可以打开这个文件且可以添加内容因为这是文件因此在系统中有一个umask
$ umask
0022
$ vim anaconda-ks.cfg
此时我们是没有权限打开的,呵呵,不错吧!
此时其他用户也可以打开passwd 但是都不能删除这个文件这就是umask所做的决定文件只有 可读可写 没有执行权因此显出了 S
如果我们给目录这样做的,那么我们可以删这个文件
怎么样还行吧,接着我们去做一下sgid
我们在用user1登陆去创建几个文件(以下九个文件都是在/share下创建的)
$ touch 1 2 3
我们在用user2登陆
$touch a b c
我们在用user2登陆
$touch A B C
现在用user1登陆,我们找到
$cd /share
$rm a A
这两个文件都被我们删除了这就有些乱了,谁都可以删文件了。
我们应该怎么做呢,现在我们用一下gid
#chmod g+s /share
我们以user2登陆
$ cd /share
$ rm 1
文件1被删除了,对吧。
$ rm B
我们没有能力删除文件B,
我们以user3登陆
$ cd /share
$ rm 1 c
我们没有能力删除文件1 c ,是吧,此时大家应给清楚gid的作用了
user1 user2 在同一组
属于同一个组的可以删除同组里的文件,而其他组的不可删除这些文件。
有人觉得这样还不好我们还可以设置粘滞位,这样每个用户只能删除自己的文件,这里就不再详细介绍了。