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的特殊权限;特殊权限可以更精密的定义文件的权限;
之前我们看到的umask是0022,其中第一个0就是描述的特殊权限.
这类特殊权限共有三种;
suid sgid sticky
那现在来看下第一个特殊权限 suid
限定:只能设置在二进制可执行程序上,对目录无效和文本无效
功能:不管谁来执行程序,linux都以程序的拥有者身份进入权限获取流程中从而决定存取权限,相当于权限下发
特征:在uesr位的x显示为S或s,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显示为S或s,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显示为T或t,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) |