之前对linux下实际用户ID,有效用户ID和设置用户ID不是很了解,今天翻书看好又看到了,就整个时间给再了解下。
这几个ID进行概念性如下;
实际用户ID(RUID):用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.也有人这么说也许会比较准确:就是该进程的所有者,执行者;
有效用户ID(EUID):用于系统决定用户对系统资源的访问权限,通常情况下等于RUID;
设置用户ID(SUID):从程序自身来说用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。
上面这三个用户ID都是相对于进程来说的。记住这点的前提上有助于我们对它们的理解。
浏览了网上的一些文章,谈到理解它们很好的一个例子就是谈谈passwd文件。
我们知道/etc/passwd程序是用来修改用户的密码的,一般来说只用root用户才能修改用户密码,但是我们发现用户是可以修改自身的密码:
linshuqiang@linshuqiang-laptop:~$ passwd
更改 linshuqiang 的密码。
(当前)UNIX 密码:
因为passwd文件设置了set-usr-ID位且文件的所有者是root,所有用户在执行passwd时,用户就具有root的权力,这样就能去执行。passwd文件的属性如下:
linshuqiang@linshuqiang-laptop:~$ ll /usr/bin/passwd-r-s--x--x 1 root root 37140 2010-01-27 01:09 /usr/bin/passwd*
从上面我们可以看出文件属性第二个有个s,这个就是该文件set-usr-ID位。如果该文件没有设计ser-usr-ID位,那么在普通用户下是不能修改密码的,因为在执行的时候就没有root权限。
在root下改变passwd文件的权限:
linshuqiang@ubuntu:~$ sudo su
root@ubuntu:/home/linshuqiang# chmod u-s /usr/bin/passwd
root@ubuntu:/home/linshuqiang# ll /usr/bin/passwd
-rwxr-xr-x 1 root root 37140 2011-02-15 06:11 /usr/bin/passwd*
通过chmod改变文件的权限后,我们可以看到 /usr/bin/passwd文件少了set-usr-ID位,那么现在我们在普通用户下来执行passwd看看效果如何?
linshuqiang@ubuntu:~$ passwd
更改 linshuqiang 的密码。
(当前)UNIX 密码:
passwd:认证令牌操作错误
passwd: password unchanged
就出现了上述的认证令牌操作错误,原因是我们把set-usr-ID位给改过了,普通用户在执行passwd文件的时候,没有set-usr-ID位,那么有效用户就不能切换到超级用户,所以不能改。
上面的例子应该很容易的让我们理解到三个用户之间的区别和关系吧?本人也是刚刚接触linxu不久,这些都是在学习的基础上小结出来的,如有错,望指出。