Linux ruid@euid@suid

real user ID (uid): 实际用户ID,指的是进程执行者是谁
effective user ID (euid): 有效用户ID,指进程执行时对文件的访问权限
saved set-user-ID (saved uid): 保存设置用户ID。是进程刚开始执行时,euid的副本。在执行exec调用之后能重新恢复原来的effectiv user ID.
上面这三个ID是相对于进程而言的.

set-user-ID (suid)/set-group-ID(sgid):设置用户ID,这是相对于文件来说的.设置了set-user-ID位的可执行程序,执行时,进程的effective user ID与saved set-uesr-ID都为程序文件所属用户的ID. 时real user ID与effective user ID就不一定相等了.这类程序称之为SUID程序,这类程序有特殊的用途.典型的例子:passwd程序,ping程序等.

对应文件存取标志的s位就是通常说的SUID位,另外可以看到所有用户都有执行的这个程序权力。当level18用户执行passwd命令的时候。Shell会fork出一个子进程,此时进程的EUID还是level18,然后exec程序/usr/bin/passwd。exec会根据/usr/bin/passwd的SUID位会把进程的EUID设成root,   此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而level18用户可完成密码的修改。 exec退出后会恢复level18用户的EUID为steve.这样就不会使steve用户一直拥有root权限。

注意:s小写表示为x+s (有执行权限)

         S大写表示为-+s   (没执行权限)


RUID, 用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.

EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。

SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。

ruid、euid和suid的区别:http://blog.csdn.net/hunanchenxingyu/article/details/9956997

    

ref:http://elsila.blog.163.com/blog/static/173197158201241104049660/


setresuid()函数的使用

函数被执行条件:

  • 当前进程的euid是root

  • 三个参数,每一个等于原来某个id中的一个

如果setresuid满足以上条件中的任一个,则可正常执行,将进程的id设置成对于的id

其他函数:setuid()、seteuid()、setruid()—-详细man下


linux 特殊权限

ref:http://www.cnblogs.com/dubaokun/p/3451730.html