我偶然发现了FreeBSD上令人惊讶的(对我而言)许可行为。假设我以非root用户身份运行。我创建一个文件,将其权限设置为只读,然后尝试写入该文件:
$ touch f
$ chmod 400 f
$ ls -l f
-r-------- 1 user wheel f
$ echo a >> t
t: Permission denied.
到现在为止还挺好。现在,我执行与root相同的操作,并将其写入文件:
# ls -l f2
-r-------- 1 root wheel f2
# echo a >> f2
# echo $?
0
它是错误还是预期的行为?我可以安全地认为这可以在任何Unix&Linux上使用吗?
root总是需要能够写入文件的原因是因为在传统的UNIX文件系统(ext4,zfs等)上,文件许可权是文件的一部分。因此,如果root无法写入文件,则NOBODY可以使只读文件再次写入,因为
—
slebetman '16
chmod
无法写入该文件。
@slebetman您无需具有对文件的写访问权限即可更新权限。只需
—
user253751 '16
touch somefile; chmod 0000 somefile; chmod 0644 somefile
以普通用户身份尝试即可。
@immibis:您拥有的。根目录需要能够更改其不拥有的文件的权限
—
slebetman
@slebetman是的...但是您谈论的是更改无法写入的文件的权限,而不是更改不拥有的文件的权限。
—
user253751 '16
CAP_DAC_OVERRIDE
都可以执行此操作。在几乎所有Linux系统上,这都意味着root可以执行此操作,因此这是故意的。不能说FreeBSD部分,但我想他们有类似的设置。