我们都知道,在执行某个程序时,默认情况下用户发起一个进程,进程的属主是进程的发起者,也就是说这个进程是以发起者的身份运行。
思考:
当root下有一个文件其权限为"---------",在不添加任何权限情况下使得其它用户也能访问该文件中的数据?下面则讲述如何解决该类问题。
SUID:
功用:用户运行某个程序时,如果该程序有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而是程序文件所属的属主。
作用:只作用于二进制文件中。
示例:在/data目录下创建一个test文件,并设置权限为"---------"且属主和属组都是root(如图):
此时只有root用户对"test"文件可以进行操作,如cat等操作。接下来用其它用户来对"test"文件进行操作,观察其变化。
首先将/bin目下的cat二进制文件复制到data目录下,其属主(rwx)、属组(rx)、其它用户(rx)权限,如图:
su - xiaomei2
:切换至xiaomei2用户。/bin/cat test
:使用xiaomei2用户查看test文件内容。此时提示权限不够,无法cat该文件。
我们在重新切换到root用户并对/data目录下cat二进制文件赋予SUID权限,如图:
chmod u+s cat
:为cat二进制文件添加SUID权限。这里我们可以看到该cat二进制文件的所属主权限中多了个s,这个s就代表着二进制文件具有SUID权限(这里显示的小s是因为属主本身具有执行权限,所以显示的为小s,假如属主没有执行权限,那么显示的是大S)。接下来我们切换到xiaomei2用户再去cat test文件看是否能查看其内容。
su - xiaomei2
/data/cat test
这里我们可以看到,为cat二进制文件添加SUID权限后,即使每一类用户对test文件没有任何权限,使用其它用户也可查看"test"文件中的数据,通过以上操作可以发现:
1)、只作用在二进制程序文件中(如作用在普通文件中没有任何意义)。
2)、在默认情况下,用户发起一个进程,该进程的属主是发起者,而并非是文件的属主,此时进程是以发起者的身份去运行。
3)、如果给二进制程序文件添加了SUID权限后,用户发起一个进程,该进程的属主为程序文件所属的属主,而并非是发起者。