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


15

从chown(2):

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

此限制的原因是什么?为什么没有特权的用户不能更改其拥有的文件的文件所有权(即,没有/ etc / shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

Answers:


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...

8

这是linux的设计师只是个人的选择不会允许它-一切伪安全原因,给予,是似是而非的,因为有UNIX系统,使这一点。

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

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

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

    非发行:更改“所有者”会清除所有“ setXid”位(U / G)

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

    但是,这并不是真正的“安全风险”,但是可能在允许更改用户的系​​统上,如果位于您自己的目录中,则可以将其更改回原来的状态,否则明智的做法是:“小心”!

  • 似乎有人在创建给定文件。

    它仍将位于您可写的目录中。也就是说,除非将其打开以便写入您的组或所有组(或者特别是如果有ACL的情况下,您可以打开),则您无法将其移入其homedir。

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

    再次,这是行不通的-因为crondirs属于用户所有,甚至没有被其他用户读取,更不用说可写了。

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

    否:仅当用户“拥有”包含该文件的目录时。也就是说,我可以将名为“ passwd”的文件提供给root用户,但是除非获得对/ etc /的写许可,否则我无法将其移至/ etc /中。

  • 配额

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

我似乎记得有一些“权衡”,允许“放弃文件”……例如,在允许这样做的系统上,Linux不允许的其他事情,但是不记得发生了什么手...

我想说上面的“答案”应该没有标记为答案,因为它不是真正的答案。IT只是设计上的决定-我只是不知道要进行哪些折衷。

可能存在以上未提出的安全问题,这是合理的考虑,但以上问题无效。

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

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


配额始终基于文件所有权而不是位置。否则有人会把所有东西都留在里面/tmp
user1686 2011年

+1,您似乎该死的:)。在OpenSolaris系统(实际上是System V的后代)上,可以通过一个mount选项进行设置(因此,此设置可以限制为单个安装点,而不是按照系统可设置的值建议在系统范围内rstchown进行设置):(缺省值)以将文件所有者更改限制为root用户,norstchown以允许非特权用户更改其自己文件的所有者(他们不能将其更改回)。
WhiteWinterWolf

6

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


2
对。我修改了这个问题,以明确我指的是用户拥有的文件,而不是任何文件。
亚历山德鲁

1
@Alexandru:想到一个恶意用户正在更改myTrojan.sh为由root拥有并具有SUID标志。
本杰明·班尼尔 Benjamin Bannier)2010年

@honk:现在有意义。
亚历山德鲁

5

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

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.