所有者/根和RUID / EUID之间的区别


24

我对问题中提到的概念还比较陌生,从不同的来源阅读它们只会使它们更加混乱。所以这是我到目前为止所了解的:

当我们获得文件权限时,它们如下所示:

-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

我的问题是:

  1. 文件的所有者和之间有什么区别root?是否root具有与所有者相同的权限?还是在权限列表中需要一个单独的条目root
  2. RUID和EUID之间的区别?
    • 据我了解,RUID和EUID仅适用于进程。如果是这样,为什么它们具有用户ID的值?
    • 如果RUID是创建流程的用户,而EUID是当前正在运行流程的用户,则此问题中第一个答案的第一句话对我来说没有任何意义。
    • 我是否正确理解setuid位的作用?

Answers:


35

答案如下:

  1. root始终具有文件和目录的完全访问权限。文件的所有者通常也拥有它们,但是并不总是如此。例如:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1所有者 ; 但是,它们只能读取执行,但root仍具有对该文件的完全访问权限(rwx)。

  2. RUID是真实用户ID,它永远(几乎)不变。如果user2登录到系统,那么将启动外壳并将其真实ID设置为user2。它们从外壳启动的所有进程都将继承真实ID user2作为其真实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,它的行动将仅限于真正的用户的密码。

  • 这是neccesary的EUID成为root在的情况下,passwd因为该过程需要写入/etc/passwd和/或/etc/shadow


谢谢!现在一切都更加清晰了。我还有一个问题。仅当用户执行设置了setuid位的进程时,EUID才会更改?还是在其他情况下也会改变?如果是这样,那是什么情况?
user1956190 2015年

1
我认为除了执行setuid设置了位的进程外,没有其他方法。
jcbermu 2015年

3
从“ setuid”程序运行的进程(即,具有有效UID≠实际UID的进程)可以将EUID设置回RUID。在某些情况下,它可以在EUID的初始值(即程序文件的所有者)和RUID之间来回切换。同样,它可能能够将其RUID设置为等于其EUID。…(续)
斯科特

2
(续)...特权过程(那些具有EUID = 0,又名root)可以设置EUID和RUID为任意值(例如,loginsu,和sudo程序做)。通常,特权进程将其UID更改为非零值后,就不再具有特权,也无法root再次拥有特权。请参见手册页setuid(2)seteuid(2)setreuid(2)
斯科特

1
(续)…它是作为解决一个问题的一种技巧而引入的,后来又以一种更广泛的方式加以解决。它可能已从Linux中删除,除了这样的修剪会破坏使用它的程序。迈克尔·凯里斯克,作者编程接口Linux的说,在他的版本的setfsuid(2)手册页,“ setfsuid()是时下不必要的,应在新的应用程序是可以避免的。”
斯科特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.