最近在看面试题的时候看到setuid,记忆不是那么深刻,所以记下来。
关于ruid和euid
首先我们要知道Linux中ruid和euid的概念
进程中都会有ruid和euid。
ruid(real user ID):
ruid可以理解为真实用户ID,当前用户执行,则ruid就是当前用户。
euid(effective user ID):
当进程执行时间,操作系统会对euid进行识别,以此来判断到底用什么权限来执行这个进程。
也就是说操作系统实际上是通过判断进程的euid来给予权限,然而在大多数情况下,euid和suid是相等的。
setuid
setuid系统提供的一个标志位,其实际意义是set一个progress的euid为这个可执行文件或程序的拥有者的uid,也就是说当setuid位被设置之后,当文件或程序执行时,操作系统会赋予文件所有者的权限,因为其euid是文件所有者的uid。
通俗的来讲
setuid的作用是将文件执行时的权限更换为文件拥有者的权限,而不是当前用户所拥有的权限。
举例
setuid的方法是使用Linux的chmod指令,在设置文件权限的同时设置setuid位,
chmod 4 750 Filename
or
chmod u+s Filename
可以发现文件test权限的 x 变为了 s ,说明setuid已经被设置,之后任何用户执行这个文件的时候(用户需要有该文件的执行权限),都会以root的权限运行(文件的owner是root用户)。所以,针对一个需要被很多user以root权限执行的文件,我们可以通过setuid来进行操作,这样就不必为所有的user都使用sudo指令。
借鉴自Linux中的setuid简介
请大佬多多指正