linux 特殊权限

来源:互联网 发布:知乎北大软微虚拟现实 编辑:程序博客网 时间:2024/05/17 21:52

在unix/linux中文件或者目录的安全性都是通过其权限属性来控制的,大家都知道,常见的权限有:读(r),写(w),执行(x)这三种。用单一字母表示文件权限。u表示属主,g表示组,o表示其它组,a表示属主、组、其它组三者,r表示读权限,w表示写权限,x表示执行权限, 还有一种s表示设置属主身份(setuid, Set User ID)权限和设置组身份(setgid, Set Group ID)权限,这两个属性允许某个程序可以更改自己的进程标识为程序文件属主或组,因而就可以具备该程序文件属主或属组的访问权限,而不再仅仅是启动进程的 用户的访问权限,这样就能完成特定的任务。很多系统程序,例如su,就是通过这个特性来完成从执行进程时的普通用户身份到root用户身份的转化的,因此 这两个属性对于系统安全至关重要。不是必要的系统程序,不能具备这些属性。t表示Sticky有粘粒性,意思是只有该文件的属主才有权限删除此文件,一般性含有t属性的文件都被放在交换区(虚内存)。更改方法有+、-、=。如u+r位属主拥有读权限,g=w表示组权限为只写,o-x为其它组 失去执行权限,a=rwx表示所有人权限都为可读可写可执行。如果要设置Set Uid、Set Gid、Sticky,则应该分别写成u+s、g+s、 o+x。
        如果用ls -l察看文件,可以看到用字母串表示的文件权限,如-rw-r--r--。第一位为文件类型,-表示文件,d表示目 录,l表示链接,b表示块文件,p表示管道文件,c表示字符文件。以后的位每三位一组,对应属主、组、其它组。r--表示只读,-w-表示只写,--x表 示只可执行,而rwx则表示可读可写可执行。而特殊权限在第四、七、十位。Set Uid在第四位,用S表示。如果该位原先已经有x,则用s表示。 Set Gid在第七位,用S表示。如果原先已有,则用s表示。Sticky在第十位,用T表示。如果原先已有,则用t表示。如普通文件为-rw-r-- r--,普通目录为drwxr-x-r-x,普通可执行文件为-rwxr-xr-x,而/usr/bin/passwd为-rwsr-xr-x。
      suid意味着如果某个用户对属于自己的s h e l l脚本设置了这种权限,那么其他用户在执行这一脚本时也会具有其属主的相应权限。于是,如果根用户的某一个脚本设置了这样的权限,那么其他普通用户在执行它的期间也同样具有根用户的权限。同样的原则也适用于g u i d,执行相应脚本的用户将具有该文件所属用户组中用户的权限。
      为什么要使用这种类型的脚本?这里有一个很好的例子。我管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。我写了几个脚本,并设置了它们的g u i d,这样我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。有相当一些U N I X命令也设置了s u i d和g u i d。如果想找出这些命令,可以进入/ b i n或/ s b i n目录,执行下面的命令:
$ ls -l | grep '^...s'
上面的命令是用来查找s u i d文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找s u i d和g u i d的。现在我们明白了什么是s u i d,可是如何设置它呢?下面就来介绍这问题。如果希望设置s u i d,那么就将相应的权限位之前的那一位设置为4;如果希望设置g u i d,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。一旦设置了这一位,一个s将出现在x的位置上。记住:在设置s u i d或g u i d的同时,相应的执行权限位必须要被设。例如,如果希望设置g u i d,那么必须要让该用户组具有执行权限。如果想要对文件l o g i n设置s u i d,它当前所具有的权限为rwx rw- r-- (741),需要在使用c h m o d命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为rwsrw- r - -。



a - setuid位, 如果该位为1, 则表示设置setuid4---

b - setgid位, 如果该位为1, 则表示设置setgid2---

c - sticky位, 如果该位为1, 则表示设置sticky1---

原创粉丝点击