> CentOS > CentOS入门 >

CentOS下三种特殊权限详述

1,三种特殊权限详述
Linux引入suid、sgid、sticky这三种特殊权限,能够更加方便、有效和安全地控制文件。
    当在一个目录或文件上加入suid特殊权限时,如过原来目录或文件的属主具有x(执行)权限,就会用小写的s来替代x;如果原来文件或目录不具有x(执行)权限,就会用大写的S来代替x。
    同样,sgid和suid相同,如过原来目录或文件的属组具有x(执行)权限,就会用小写的s来替代x;如果原来文件或目录不具有x(执行)权限,就会用大写的S来代替X。
    同样,如果在一个文件或目录上加入sticky权限时,若原文件或目录的其他用户有x(可执行)权限时,就用小写t代替x;如果原文件或目录没有x权限时,就用大写T替代x权限。下例说明。
    可以chmod的字符或数字的方式修改特殊权限,下例以数字方式实现。
   其中:suid针对的是user       ,s=4
             sgid针对的是 group      , g(s)=2
             sticky针对的是 other     , t=1
相关权限:rwx
                 r=4
                 w=2
                 x=1
列子一:
        -rwsr-sr-x                    6755
         user=rws =rwx+s=7和4 (此时s=4,因为s现在属于user)
         g=r-s=r-x+s=5和2(此时s=2)
         other=r-x=5
         s=4,s=2
         所以(s+s)755=6755
列子二:
           -rwsr-xr-x                   4755
 
先看看这两个文件的权限:
[root@localhost ~]# ls -ld /usr/bin/passwd  /tmp
drwxrwxrwt 4 root root  4096 Jun  2 17:33 /tmp
-rwsr-xr-x 1 root root 22984 Jan  7  2007 /usr/bin/passwd
 
这里的s和t是针对执行权限来讲的。
这个s权限,是为了让一般使用者临时具有该文件所属主/组的执行权限。就比如/usr/bin/passwd在执行它的时候需要去修改/etc/passwd和/etc/shadow等文件,这些文件除了root外,其他用户都没有写权限,但是又为了能让普通用户修改自己的密码,只能时临时让他们具有root的权限。所以这个s权限就是用来完成这个特殊任务的。s权限只能应用在二进制的可执行文件上。
如果你不想让普通用户修改自己的密码,只需要
[root@localhost ~]# chmod u-s /usr/bin/passwd  或者
[root@localhost ~]# chmod 0755 /usr/bin/passwd
0755最前面的0表示不使用任何特殊权限,该位上的数字可以是0,1(--t),2(-s-),3(-st),4(s--),5(s-t),6(ss-),7(sst)
那个t权限只针对目录生效,它表示只能让所属主以及root可以删除(重命名/移动)该目录下的文件。比如/tmp目录本来就是任何用户都可以读写,如果别人可以任意删除(重命名/移动)自己的文件,那岂不是很危险。所以这个t权限就是为了解决这个麻烦的。下面举一个例子,说明一下这个权限的用法:
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir test
[root@localhost tmp]# chmod 1777 test
[root@localhost tmp]# ls -ld test
drwxrwxrwt 2 root root 4096 Jun  2 18:10 test
[root@localhost tmp]# su test1
[test1@localhost tmp]$ touch test/1.txt
[test1@localhost tmp]$ ls -l test
total 4
-rw-r--r-- 1 test1 test 0 Jun  2 18:12 1.txt
[test1@localhost tmp]$ exit
[root@localhost tmp]# su www
[www@localhost tmp]$ ls -l test/1.txt
-rwxrwxrwx 1 test1 test 6 Jun  2 18:12 test/1.txt
[www@localhost tmp]$ rm test/1.txt
rm: cannot remove `test/1.txt': Operation not permitted
提示不能删除1.txt
[www@localhost tmp]$ exit
[root@localhost tmp]# chmod -t test
去掉t权限。
[root@localhost tmp]# ls -ld test
drwxrwxrwx 2 root root 4096 Jun  2 18:13 test
[root@localhost tmp]# su www
[www@localhost tmp]$ rm -f test/1.txt
再次删除,则删除成功。
[www@localhost tmp]$ ls test/1.txt
ls: test/1.txt: No such file or directory
 
-----------------------------------------------------------------------------------------------
 
2,特殊权限使用
前面我们学习过linux的基本权限,但如果只有基本权限,可能无法满足各式各样的要求
例如:建立一个公共目录 任何人都可以在目录里建立自己的文件,但只能删除自己的文件,此时基本权限就无能为力了.
如果你想要完成这种需求就必须要借助linux的特殊权限;特殊权限可以更精密的定义文件的权限;
之前我们看到的umask0022,其中第一个0就是描述的特殊权限.
这类特殊权限共有三种;
suid  sgid  sticky
 
那现在来看下第一个特殊权限 suid
         限定:只能设置在二进制可执行程序上,对目录无效和文本无效
         功能:不管谁来执行程序,linux都以程序的拥有者身份进入权限获取流程中从而决定存取权限,相当于权限下发
         特征:uesr位的x显示为Ss,s代表包含了x权限,S代表未包含x权限
试验演示:
         试验一: 用户修改密码借助root身份
  # ll /usr/bin/passwd
             -rwsr-xr-x 1 root root  /usr/bin/passwd
         # chmod u-s /usr/bin/passwd
         # ll /usr/bin/passwd
             -rwxr-xr-x 1 root root  /usr/bin/passwd
         # su - aming
         $ passwd
             Changing password for user seker.
             Changing password for seker
             (current) UNIX password:
             passwd: Authentication token manipulation error
         $
         试验二:用户无法读取/etc/shadow,借用root身份使用cat命令则可
         # ll /etc/shadow
          ---------- 1 root root  /etc/shadow
         # su - aming
         $ cat /etc/shadow
             cat: /etc/shadow: 权限不够
         $ exit
             logout
         # chmod u+s /bin/cat
         # su - aming
         $ cat /etc/shadow
             root:$1$EV/a2BnK$pRN0qjwqLf8zvpK8w1MFT.:14360:0:99999:7:::
了解了suid,我们再来看看sgid
         限定:sgid既可以作用于二进制文件又可以作用于目录,但两者的意义却截然不同
         功能:
         先说在二进制文件上,与前面讲的SUID类似:不管是谁来执行,都以文件的所属组身份来决定权限
         大家自己测试,跟suid一样
         再说作用于目录上:默认情况下用户建立文件时,文件的所属组是用户的主组,如果在设置了SGID目录下建立文件,则文件的所属组是继承目录的属组,并且新建立的目录也继承g+s权限
         特征:group位的x显示为Ss,s代表包含了x权限,S代表未包含x
         试验一:
         # mkdir /public
         # chmod 777 /public
         # chmod g+s /public
         # su - lishiming
         $ cd /public
         $ mkdir lishiming
         $ ls -l lishiming -d
             -rwxr-xr-x 1 lishiming root lishiming
         $ touch sgid_yes
         $ ll sgid_yes
             -rw-rw-r-- 1 lishiming root sgid_yes

sticky 冒险位(黏贴位)
         限定:只作用于目录
         功能:任何人都可以在一个目录下建立文件,却只有root和建立者本人才可以删除文件
         特征:other位的x显示为Tt,t代表包含了x权限,T代表未包含x权限
         
         # chmod o+t /public
              drwxrwxrwt 5 root root /public
         # su - lishiming
         $ cd /public
              -rw-r--r-- 1 leiqin leiqin test-file
         $ rm -rf test-file
              rm: 无法删除 test-file: 不允许的操作 (充分说明lishiming这个账户在/public目录下无法删除leiqin这个用户的文件,虽然/public的目录权限是777)


(责任编辑:IT)