在了解特殊权限和访问控制列表之前,让我们先来认识一下Linux的普通权限。

Linux系统中根据访问客户的不同身份,划分为属主,属组,和Other用户。我们通过#ls -l命令可以查看一个文件的详细信息。

142351682.png

依次显示每个文件的属性信息,链接数,属主,属组,文件大小,创建时间,文件名

其中属性的信息有10个字符表示。第一个字符表示文件的类型,d表示目录,-表示为文件,后面的九位每三位分别表示所属主的权限,所属组的权限,以及其他用户的权限。当我们实际运行一个文件的时候,系统会查看我们是否对这个文件有执行权限。如果有执行权限,这个文件才会被执行,如果这个文件的后面有参数,这个参数也是一个文件,系统还要判断我们对这个作为参数的文件是否有相应的权限。


下面我们来几个测试。创建user1和user2两个用户,将/bin/cat和/etc/fstab文件拷贝到/tmp/test目录下,将这个两个用户的所属主和所属组设置成user1。取消other用户对/tmp/test/fstab的所有权限。


测试一、user1和user2用户分别用/temp/test/cat命令来打开/tmp/test/fstab文件

user1的执行结果如下:

190828732.jpg


因为user1用户对./cat有可执行权限,并且对./fstab有可读权限。所以命令能被正确执行。

我们在来看看user2用户的执行结果:

191113601.jpg

user2是作为other用户尽管对/tmp/test/cat有执行权限,但是对/tmp/test/fstab没有访问权限所以显示没有权限。


但是在实际的应用过程中,只是有普通的权限设置是很不方便的,上例中。fstab对other用户来说已经没有可读权限了,那么无论我们是用cat还是less等命令去调用fstab,系统都会提示我们没有权限。有没有什么办法可以让other用户用cat命令来显示fstab的内容了,而其他的命令却不行了?答案是肯定的,这个时候你就需要使用到特殊权限中的suid了。继续我们的实验,给/tmp/test/cat赋予suid权限,看看suid是做什么的。

suid是做什么的了?

   如果一个文件被赋予了suid的权限那么他的所属主的x权限位会显示为s。当一个文件具有suid权限以后,这个文件被other用户调用时他具有了这个文件所属主的权限。

192507909.jpg


192654332.jpg

看到了吗?user2作为other用户,命令被成功执行。因为user2用户对/tmp/test/cat有执行权限,所以当他执行这个命令的时候他的身份发生了变化,他拥有了同user1一样的权限。而/tmp/test/fstab对user1用户而言是可读的。所以被正确执行。

其实Linux系统中passwd命令就是具有suid权限的。任何用户都可以执行。当普通用户修改了密码以后相关的信息会写入到/etc/shadow中去,但是普通用户并不能访问/etc/shadow。

在使用suid的时候需要注意:

1、suid权限只能用于具备执行权限的二进制文件中。(为脚本及文本文件赋予suid权限意思并不大。为什么说对脚本赋予suid权限意义不大了?如果给user1用户的脚本赋予了suid权限,一旦脚本中调用了其他命令,这个命令的属主和属组都是root的时候,uesr2用户在执行这个脚本中的这个命令的时候就又成为了other用户了,)

2、如果原文件本事具有x权限赋予suid权限以后会显示为小s。如果原文件没有x权限赋予suid权限以后会显示大S,而这时文件所属的主不能执行该文件,如果该文件属组和other用户具备x权限,可以正确执行。


              (以上内容如有不正确之处,请及时告知!谢谢)