Linux特殊权限之SUID

       我们都知道,在执行某个程序时,默认情况下用户发起一个进程,进程的属主是进程的发起者,也就是说这个进程是以发起者的身份运行。
思考:
       当root下有一个文件其权限为"---------",在不添加任何权限情况下使得其它用户也能访问该文件中的数据?下面则讲述如何解决该类问题。

SUID:
        功用:用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。
        作用:只作用于二进制文件中。
        示例:在/data目录下创建一个test文件,并设置权限为"---------"且属主和属组都是root(如图):

2.png

        此时只有root用户对"test"文件可以进行操作,如cat等操作。接下来用其它用户来对"test"文件进行操作,观察其变化。
首先将/bin目下的cat二进制文件复制到data目录下,其属主(rwx)、属组(rx)、其它用户(rx)权限,如图:
3.png

        su - xiaomei2:切换至xiaomei2用户。
        /bin/cat test:使用xiaomei2用户查看test文件内容。
4.png

        此时提示权限不够,无法cat该文件。
        我们在重新切换到root用户并对/data目录下cat二进制文件赋予SUID权限,如图:
        chmod u+s cat:为cat二进制文件添加SUID权限。
5.png

       这里我们可以看到该cat二进制文件的所属主权限中多了个s,这个s就代表着二进制文件具有SUID权限(这里显示的小s是因为属主本身具有执行权限,所以显示的为小s,假如属主没有执行权限,那么显示的是大S)。接下来我们切换到xiaomei2用户再去cat test文件看是否能查看其内容。
        su - xiaomei2
       /data/cat test
Linux特殊权限之SUID_第1张图片
6.png

       这里我们可以看到,为cat二进制文件添加SUID权限后,即使每一类用户对test文件没有任何权限,使用其它用户也可查看"test"文件中的数据,通过以上操作可以发现:
              1)、只作用在二进制程序文件中(如作用在普通文件中没有任何意义)。
              2)、在默认情况下,用户发起一个进程,该进程的属主是发起者,而并非是文件的属主,此时进程是以发起者的身份去运行。
              3)、如果给二进制程序文件添加了SUID权限后,用户发起一个进程,该进程的属主为程序文件所属的属主,而并非是发起者。

你可能感兴趣的:(Linux特殊权限之SUID)