我对问题中提到的概念相对较新,从不同来源阅读它们只会让它们更加混乱。这就是我到目前为止的理解:
当我们获得文件的权限时,它们看起来像这样:
-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin
user2
我们假设该组中的用户users
尝试执行file.bin
.如果未设置 setuid 位,则意味着 的 RUID 和 EUID 都file.bin
等于 的 UID user2
。但由于设置了 setuid 位,这意味着 RUID 现在等于 的 UID user2
,而 EUID 是文件所有者的 UID user1
。
我的问题是:
- 文件所有者 和 之间有什么区别
root
?是否root
拥有与所有者相同的权限?或者我们需要在权限列表中单独输入一个条目吗root
? - RUID 和 EUID 之间的区别?
- 据我了解,RUID 和 EUID 仅适用于进程。如果是这样的话,为什么他们有用户 ID 的值?
- 如果RUID是创建进程的用户,EUID是当前运行进程的用户,那么这个第一个答案的第一句问题对我来说没有任何意义。
- 我是否正确理解了 setuid 位的作用?
答案1
答案如下:
root
一直满的访问文件和目录。文件的所有者通常也拥有它们,但情况并非总是如此。例如:-r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
user1
是个所有者;然而他们只能读和执行,但root
仍然具有完全访问权限(读写) 到文件。
- RUID 是真实用户ID而且它(几乎)永远不会改变。如果
user2
登录到系统,则会启动 shell,其真实 ID 设置为user2
。它们从 shell 启动的所有进程都会继承真实 IDuser2
作为它们的真实 ID。
EUID 是有效用户ID,它会针对用户执行的已设置setuid位。
如果user2
执行file.bin
,则 RUID 为user2
,启动进程的 EUID 为user1
。
让我们使用以下情况passwd
:
-rwsr-xr-x 1 root root 45396 may 25 2012 /usr/bin/passwd
当
user2
想要更改他们的密码,他们执行/usr/bin/passwd
。RUID 将为 ,
user2
但该进程的 EUID 将为root
。user2
可以用来passwd
改变仅有的他们自己的密码,因为内部passwd
会检查 RUID,如果不是root
,其操作将被限制为真实用户的密码。EUID 是必要
root
的,passwd
因为该过程需要写到/etc/passwd
和/或/etc/shadow
。