1. 我们之前有讲过文件属性与权限,文件包括属主、属组、其他用户,文件的权限有可读(r)、可写(w)、可执行(x)。有的人可能会有疑问,那不对呀,我还看到过有其他的。例如,使用ls -l `which passwd`,会显示出这样的结果:
-rwsr-xr-x 1 root root 23420 Aug 11 2010 /usr/bin/passwd
用户root的执行权限不是x,而是s,怎么会这样呢?那下面我们就来探究一下。
我们的linux系统中,所有的密码都记录在/etc/shadow中,文件权限为:
-r-------- 1 root root 1529 2011-07-30 /etc/shadow
你可以看出来这个文件只有root用户才能够读取,既然只有root能读取,那为什么我们用一般账号登录,使用passwd的时候,却可以更改密码呢?这就是SUID的功能。SUID设置在用户权限的执行位上,如果这个文件原本就有可执行的权限,那么它加上SUID的功能后,就显示s。如果没有可执行权限,那它就是S。也就是说,如果一个文件给了它SUID,在这个文件能够执行的情况下,无论什么用户当执行此文件时,并不是以用户自己的身份在运行,而是以文件属主的身份来运行。现在你明白了吧。
添加s权限:
chmod u+s file
但是要注意:SUID尽可用在二进制程序上,不能够用在shell script上面。这是因为shell script只是将很多的二进制执行文件调进来执行而已。所以SUID的全县部分,还是得要看shell script调用进来的程序的设置,而不是shell script本身。当然,SUID对于目录也是无效的。
2. s在用户组的x时,则称为SGID.SGID可以针对文件或目录来设置。目录有SGID属性的话,在目录里创建一个新文件,文件的属组跟目录的属组是同一个,不再是用户的基本组了。我就举个简单的例子来说吧。
一个公司要开发一个项目,成立一个项目组devgrp,在项目组里有一个共享的目录叫project,project里存放了开发项目的文件,这些文件是属于devgrp组的。项目组里有3个成员:redhat,centos,gentoo,他们分别可以访问此目录下的文件,并且可以创建自己文件。其他人则没有任何权限。
你可能会这样做:
先把用户添加到devgrp组中
usermod -a -G devgrp redhat
usermod -a -G devgrp centos
usermod -a -G devgrp gentoo
添加进去之后,把目录的属组改为devgrp
chown -R :devgrp /tmp/project
然后修改project的权限
chmod -R g=rwx,o=--- /tmp/project
这样之后,你就会认为大功告成,其实不是,如果你以redhat的身份,在project中建立文件,你会发现文件是属于redhat用户和redhat组,并不是我们所期望的devgrp组。那该怎么办呢?这里就要用到SGID的功能了。
添加s权限:
chmod g+s /tmp/project
添加过之后:
drwxrws--- 2 root devgrp 4096 Jul 30 2011 /tmp/project/
如果原本project里有的文件的权限,例如:a1.txt,a2.txt,a3.txt等。则会显示如下:
-rwxrws--- 1 root devgrp 0 2011-07-30 a1.txt
-rwxrws--- 1 root devgrp 0 2011-07-30 a2.txt
-rwxrws--- 1 root devgrp 0 2011-07-30 a3.txt
以redhat的身份创建redhat.txt文件,则会显示:
-rw-rw---- 1 redhat devgrp 0 2011-07-30 redhat.txt
现在明白了吧。
但是,你或许又发现问题了,我以redhat的身份可以随便删除文件。这就麻烦了,该怎么办呢?这就要用到3. 另一个性的特殊权限SBIT
SBIT,它设置的是其他用户的x,使用t。那它的用途是什么呢?当用户对此目录具有w,x权限时,即具有写入的权限时,用户在此目录下创建的文件或目录,只有root和用户自己才能删除,其他用户则无法删除。也就是说redhat只能删除自己所建的文件或目录,其他人则无法删除。这就增加了安全性。
添加t权限
chmod o+t /tmp/project
SUID/SGID/SBIT也可以用数字表示
SUID:4
SGID:2
SBIT:1
因此我们也可以用一条命令来实现SGID和SBIT的设置
chmod -R 3770 /tmp/project
3:就表示,对SGID和SBIT进行设置。后面的数字你应该很清楚了吧,我就不多说了。
阅读(1682) | 评论(0) | 转发(0) |