一、为什么要使用特殊权限?
比如系统中假如有超过四类人然而每一类人都需要一种独特权限.只有三种独特权限的基础权限系统就会明显不够用.特殊权限可以扩展系统基础权限的功能,使得linux权限更加强大灵活
二、SUID
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
1)SUID工作原理
linux中有一个二进制程序vim,属主属组均为root
linux中有一个系统文件/etc/shadow,属主属组均为root
我们创建一个普通用户叫zm
zm具有对vim的执行权限
zm 不具有对/etc/shadow的任何权限
zm执行vim,系统创建一个vim进程,进程的属主属组取程序发起者,也就是zm:zm
vim进程访问/etc/shadow,由于进程属主属组是zm:zm,与/etc/shadow的属组属主都不匹配,所以被拒绝访问.
zm执行vim.系统创建一个vim进程,进程的属主取vim的属主,属组取程序发起者,就是root:zm
vim进程访问/etc/shadow,由于进程属主是root,与/etc/shadow的属主匹配,所以被允许编辑.
2)例子
passwd命令是linux系统中用来修改密码的命令.系统中所有用户都可以使用.而passwd命令改密码的行为是通过修改/etc/shadow文件来实现
----------. 1 root root 908 7月 18 20:18 /etc/shadow
-rwsr-xr-x. 1 root root 30768 2月 22 2012 /usr/bin/passwd
不难发现passwd这个程序的属主位的执行位不是x而是s,说明passwd被设置了特殊权限SUID.;于是普通用户运行passwd命令,系统创建的passwd进程的属主由默认为"程序发起者"变为了passwd的属主;而passwd的属主是root,所以普通用户其实是在用root的权限修改/etc/shadow文件.最后passwd命令执行结束,passwd进程被关闭.
3)例子
给命令vim添加SUID,可以让普通用户自己把自己变为超级用户.
给vim加个SUID
[root@centos2 test]# ls -l /usr/bin/vim
-rwsr-xr-x. 1 root root 1967072 4月 5 2012 /usr/bin/vim
[root@centos2 test]#
登陆普通用户zhang;通常情况下zhang启动vim后,系统会创建一个以当前用户zhang为属主属组的vim进程,
此时vim进程的属主属组为zhang:zhang,由于无论是属主还是属组都不具有对/etc/passwd的编辑权限,所以这个vim进程无权编辑/etc/passwd.;而给/usr/bin/vim设置了SUID之后,zhang或任何用户启动vim程序时,系统创建的vim进程的属主则是取了/usr/bin/vim这个程序文件自身的属主root;所以此时vim进程的属主属组为root:zhang. 系统检查发现正好匹配了/etc/passwd的属主,于是放行vim进程.
[zhang@centos2 ~]$ vim /etc/passwd #修改uid=0
zhang:x:0:500::/home/zhang:/bin/bash
退出再次登陆;可以看出当前的用户是root
[root@centos2 test]# su - zhang
[root@centos2 ~]# whoami
root
[root@centos2 ~]#
验证。首先找一个属主属组都为root且o位无w的文件
[root@centos2 ~]# find / -name haha -type f -exec ls -l {} \;
-rw-r--r--. 1 root zhang 0 9月 14 22:18 /tmp/haha
[root@centos2 ~]#
[root@centos2 tmp]# cd /tmp/
[root@centos2 tmp]# mv haha didi
[root@centos2 tmp]# find / -name didi -type f -exec ls -l {} \;
-rw-r--r--. 1 root zhang 0 9月 14 22:18 /tmp/didi
[root@centos2 tmp]#
改名成功,说明ok
三SGID
-rwxr-sr-x. 1 root root 0 9月 14 21:14 test
1)例子
普通用户zhang在/tmp中创建一个目录叫zhangdir,添加SGID.权限777
[zhang@centos2 zhangdir]$ chmod 2777 /tmp/zhangdir/
[zhang@centos2 zhangdir]$ ll -d
drwxrwsrwx. 2 zhang zhang 4096 9月 14 21:53 .
[zhang@centos2 zhangdir]$
切换到普通用户ming,在zhangdir目录中创建一个文件和一个目录
[ming@centos2 ~]$ cd /tmp/zhangdir/
[ming@centos2 zhangdir]$ mkdir mingdir
[ming@centos2 zhangdir]$ ll
总用量 4
drwxrwsr-x. 2 ming zhang 4096 9月 14 22:00 mingdir
[ming@centos2 zhangdir]$
可以看出,ming在zhangdir目录下创建的文件和目录都自动继承了zhangdir的属组
而且新目录的权限也继承了SGID.;所以设定了SGID的目录中的所有新建文件和目录都会自动属于zhang组.
四、sticky
-rwx--x--t. 1 root root 0 9月 14 21:20 caiwu
1)例子
目的:希望在系统中创建一个很多用户可以共同使用的目录,但是要求用户之间不能互相删除改变对方的文件.
首先:创建一个777的/test/dir目录;分别用zhang和ming用户在/test/dir目录创建自己的文件和目录;可是任何用户都可以删除里面的内容。如何解决呢?
[root@centos2 dir]# ll
总用量 16
drwxrwxr-x. 2 ming ming 4096 9月 14 21:35 md1
drwxrwxr-x. 2 ming ming 4096 9月 14 21:35 md2
drwxrwxr-x. 2 ming ming 4096 9月 14 21:35 md3
-rw-rw-r--. 1 ming ming 0 9月 14 21:34 mf1
-rw-rw-r--. 1 zhang zhang 0 9月 14 21:34 zd1
-rw-rw-r--. 1 zhang zhang 0 9月 14 21:34 zd2
-rw-rw-r--. 1 zhang zhang 0 9月 14 21:34 zd3
drwxrwxr-x. 2 zhang zhang 4096 9月 14 21:34 zf1
[root@centos2 dir]#
要给/tmp这个文件夹设定一个Sticky位.
[root@centos2 test]# chmod 1777 dir/
[root@centos2 test]# ll -d dir/
drwxrwxrwt. 6 root root 4096 9月 14 21:35 dir/
[root@centos2 test]#
到这尝试登陆普通用户到这个目录下删除mf1等文件和目录。删除不了说明生效了。
注:普通用户在设定了Sticky位的目录下创建的子目录不会继承这个Sticky权限,所以要注意设定好自己目录的权限.