在上述例子中,当其他用户执行test3这个程序时,他的身份将由于这个程序而暂时变成该test3程序的拥有者(由于chmod命令中使用了s选项),所以他就能够读取test3.c文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。在整个系统中特别是root本身,最好不要过多地设置这种类型的文件(除非必要),这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。
数字设定法
数字设定法是与文字设定法功能等价的设定方法,只不过比文字设定法更加简便。数字表示的属性的含义为:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)、(g)、(o)。其他的与文字设定法基本一致。
如果想让某个文件的属主有“读/写”二种权限,须要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式为:chmod[mode]文件名。图3给出使用该数字设定法的例子:
▲图3.chmod命令数字设定法示意
可以看到,图3中设定文件test1的属性为:文件属主(u)拥有读、写权限;与文件属主同组人用户(g)拥有读权限;其他人(o)拥有读权限,而设定test2这个文件的属性为:文件主本人(u)具有可读/可写/可执行权限;与文件主同组人(g)可读/可执行权;其他人(o)没有任何权限。
2、更改文件/目录的所有权
该命令用来更改某个文件或目录的属主和属组。举个例子,root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。
该命令的使用形式为:chown[选项]用户或组文件
Chown的功能是将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。该命令的选项为:
R:递归地改变指定目录及其下面的所有子目录和文件的拥有者。
v:显示chown命令所做的工作。
图4给出了使用该命令的例子,笔者把文件test1的所有者改为super,把目录./test_dir及其下面的所有文件和子目录的属主改成super,属组改成super。
▲图4.chown命令使用示意
3、改变文件的执行权限
通过前面的介绍我们知道,Linux系统中的每一个文件都有一个所有者,表示该文件是谁创建的。同时,该文件还有一个组编号,表示该文件所属的组,一般为文件所有者所属的组。并且,在一般情况下,我们也可以通过设定对文件的权限来控制对其的相关操作。
在此情况中,如果是一个可执行文件,那么在执行时,一般该文件只拥有调用该文件的用户具有的权限。而setuid/setgid则可以来改变这种设置:
setuid:设置使文件在执行阶段具有文件所有者的权限。典型的文件是/usr/bin/passwd。如果一般用户执行该文件,则在执行过程中,该文件可以获得root权限,从而可以更改用户的密码
setgid:该权限只对目录有效。目录被设置该位后,任何用户在此目录下创建的文件都具有和该目录所属的组相同的组。
stickybit:该位可以理解为防删除位。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件。则可以对文件使用stickybit位。设置该位后,j即便用户对目录具有写权限,也不能删除该文件。
在前面我们讨论了通过文字设定和数字设定的方法来设定文件/目录的访问权限问题,同样的道理,下面我们通过这两种方法来介绍如何操作这些标志。操作这些标志与操作文件权限的命令是一样的,都是使用chmod命令来进行:
文字设定法
chmodu+sfilename:为文件filename加上setuid标志。
chmodg+sdirname:为目录dirname目录加上setgid标志。
chmodo+tfilename:为文件filename加上sticky标志。
数字设定法
对一般文件通过三组八进制数字来置标志,如444、777、644等。如果设置这些特殊标志,则在这组数字之前外加一组八进制数字。如4666、4777等。这一组八进制数字三位的意义如下:
setuid位:如果该位为1,显示为“S”,则表示设置setuid,其显示在原来的x标志位上;
setgid位:如果该位为1,显示为“S”,则表示设置setgid,其显示在原来的x标志位上;
sticky位:如果该位为1,显示为“T”,则表示设置sticky,其显示在原来的x标志位上。
设置完这些标志后,可以用ls–l命令来查看。如果有这些标志,则会在原来的执行标志位置上显示。如下所示:
r-srw-r--:表示有setuid标志;
rwxrwsrw-:表示有setgid标志;
rwxrw-rwt:表示有sticky标志。
如果本来在该位上有x,则这些特殊标志显示为小写字母(s,s,t)。否则,显示为大写字母(S,S,T)。
另外非常值得读者注意的是,虽然setuid/setgid机制非常方便实用,但是由于提升了执行者的权限,因而不可避免地存在许多安全隐患和风险,所以作者并不太赞成广大读者广泛使用,并且,在实际的系统管理过程中,我们还经常需要找出设置有这些标志的文件,并对他们进行检查和清理,那么,一般我们可以使用如下命令来对系统中的具有特殊标志的文件进行寻找:
(责任编辑:)