为什么非特权用户不能更改文件所有权?

Ale*_*dru 15 linux chown

来自 chown(2):

只有特权进程(Linux:具有 CAP_CHOWN 功能的进程)可以更改文件的所有者。文件的所有者可以将文件的组更改为该所有者是其成员的任何组。特权进程(Linux:带有 CAP_CHOWN)可以任意更改组。

这个限制的原因是什么?为什么非特权用户无法更改其拥有的文件的文件所有权(即没有 /etc/shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

Chr*_*ava 27

通过允许用户“赠送”文件,您会违反操作系统的各种功能。如:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...
Run Code Online (Sandbox Code Playgroud)


小智 8

这只是 linux 设计者的个人选择不允许它 - 所有伪安全原因,给定,都是似是而非的,因为有允许这样做的 unix 系统。

我认为此功能归结为您的 unix 行为是否遵循“System-V”(AT&T)或 Berkeley 的 unix(BSD)...

至于提到的其他安全问题:

  • 通过 setuid 模拟另一个用户(甚至 root)。

    非问题:更改“所有者”会清除任何“setXid”位 (U/G)

  • 没有足够的权限撤消错误的 chown

    不是真正的“安全风险”,但是,它可能在允许更改用户的系​​统上,如果它在您拥有的目录中,您可以将其更改回来,否则:“小心”!

  • 看起来是其他人创建了给定的文件。

    它仍将位于您可写的目录中。即你不能将它移动到他们的主目录中,除非它打开以写入你的组或所有(或者你特别是如果 ACL 可用)。

  • 设置 cron 作业以在其他用户的帐户上运行。

    同样,这行不通——因为 crondirs 归用户所有,甚至没有设置为其他用户可读,更不用说可写了。

  • 如果任何人都可以更改所有权,那么任何人都可以更改权限以访问系统上的任何文件。

    不:仅当用户“拥有”包含该文件的目录时。即,我可以将名为“passwd”的文件提供给 root,但除非我对 /etc/ 具有写入权限,否则我无法将其移动到 /etc/ 中。

  • 配额

    一个潜在的有效点——如果您使用配额,但如果您通过 home-dir 汇总磁盘空间似乎很容易检测到;唯一的问题是在多个用户可写的目录中。在这种情况下,可能是该“目录”的所有者。这可能是这些系统上的情况下支持“放弃”的文件,你只能在目录中做到这一点,你“自己”的,但它是一个很长的时间,因为我实际上是一个系统,允许这个,所以我不记得确切的限制。

我似乎记得允许“赠送文件”有一些“权衡”......手...

我想说上面的“答案”应该取消标记为答案,因为它不是真正的答案。它更像是一个设计决策——我只是不知道权衡是什么。

上面没有提出的安全问题可能是有效的问题,但上面的问题是无效的。

IMO,它应该是“/proc”中系统可设置的“值”,但总的来说,我认为大多数人并不那么在意。

如果强烈需要它,可以对“chown”进行安全增强和修改以允许它,然后设置 w/setuid 'root' 以使其能够实施这样的策略。


Hel*_*o71 6

好吧,如果任何人都可以更改所有权,那么任何人都可以更改权限以访问系统上的任何文件。这不仅从恶意软件的角度(不需要 sudo)而且从系统管理员的角度来看都是糟糕的。如果任何用户可以更改任何文件,则文件权限是无用的。

  • 对。我修改了问题以明确我指的是用户拥有的文件而不是任何文件。 (2认同)

小智 5

因为这样用户就可以逃避文件系统配额。如果我有 100MB 的配额而你有 100MB 的配额,我可以上传 100MB,chmod a+r,chown 你,然后再上传 100MB。