如果我输入:
ls -l file.txt
我看到该文件的权限相当于“456”:
- 4 = 所有者 (r--)
- 5 = 组(接收)
- 6 = 其他(RW-)
有哪些权利根在这种情况下?有777吗?
是否可以更改权限以使 root 的权限少于所有者?
答案1
我会检查此页出。它深入讨论了文件权限。
但直接回答你的问题,不:
超级用户“root”能够访问系统上的任何文件。
例如,在您的示例中,如果该文件由 say 拥有bob
,并且组所有者也是bob
,那么您会看到类似这样的内容:
-r--r-xrw-. 1 bob bob 8 Jan 29 18:39 test.file
第三位组 (rw) 也适用于根,因为根是该others
组的一部分。如果您尝试以 root 身份编辑该文件,您会发现这样做没有问题。
但为了进一步测试你的理论,如果该文件由 root 拥有:
-r--r-xrw-. 1 root root 8 Jan 29 18:40 test.file
然后你再次去编辑该文件,你会发现编辑它仍然没有问题。
最后,如果你做了极端:
chmod 000 test.file
ls -lh test.file
----------. 1 root root 8 Jan 29 18:41 test.file
然后您再次编辑您将看到的文件(至少在 vi/vim 中)"test.file" [readonly]
。但您仍然可以编辑该文件并强制将其保存为:wq!
.
使用 shell 脚本文件测试 @Stéphane Chazelas 的声明:
#!/bin/sh
echo "I'm alive! Thanks root!"
[root ~]# ls -lh test.sh
----------. 1 atgadmin atgadmin 31 Jan 30 10:59 test.sh
[root ~]# ./test.sh
-bash: ./test.sh: Permission denied
[root ~]# sh test.sh
I'm alive! Thanks root!
@Shadur 已经说过了,所以我只是引用而不是重述:
注意:检查执行位是否存在,而不是检查它是否适用于 root。
答案2
根据设计,根用户可以完全访问系统上的每个文件。如果您想保护文件免遭意外删除,您可以使用
chattr +i file
这将在 GNU/Linux 上设置不可变标志。您可以使用-i
而不是删除它+i
。
在 FreeBSD 上,您可以使用
chflags schg file
替代noschg
品schg
撤消它。
如果您希望防止文件被 root 看到,您应该将文件存储在不同的系统上,或者使用加密作为最后的手段。
答案3
是否可以更改权限以使 root 的权限少于所有者?
Shure,很简单,只需更改 passwd 文件,使 root 的 uid 不为零即可。另一方面,不要这样做,这是个坏主意。
您不是第一个问这个问题的人,其中一些人提出了功能的想法,但我们稍后会讨论这个问题,首先让我们从了解权限系统的工作原理开始。
启动进行访问检查的计算机部分并不知道您的姓名,而是通过号码识别您,该号码称为 uid 或用户标识符。以类似的方式,它不知道您所属组的名称,只知道 gid。 uid 和 name 之间的映射位于 passwd 文件中,而 gid 则映射在 groups 文件中。
现在,当您想要打开文件时,会进行四项检查:您是否有权跳过检查,您是否作为用户被允许这样做,您是否作为组成员被允许,以及您作为其他人是否被允许被允许。我在这里跳过一些内容,例如名称服务开关和访问控制列表以及读写执行,但您感兴趣的部分是第一个测试。
有时您可以跳过文件权限测试。为什么?以及(非常重要)什么时候?现在,有时需要完成一些您不希望任何人都可以做的事情,并且它们不太适合文件权限模型。各种各样的事情,比如在低端口上打开网络连接、安装分区或跳过权限检查。如今,这些东西被称为能力。在过去,UID0 拥有所有这些功能,您对此无能为力,现在您可以向其他用户提供功能,或者放弃它们,但默认是旧的行为。
另一种限制 root 的方法是使用 selinux 之类的东西,但那是另一个蜡球。
答案4
在这种情况下,root 的权利是什么?有777吗?
是的。
如前所述,不会对 root 强制执行读写权限。但是,仍会检查执行权限是否存在,因此如果未设置执行标志,root 将无法执行该文件。这里的情况并非如此,因为该组有x
旗帜。
另请注意,无论是否授予写权限,root 或任何人都将被拒绝对存储在只读文件系统上的文件进行写访问。
如果文件存储在远程安装的目录(如 NFS)上,根用户的权限也可能比所有者少。
最后,请注意,符号链接权限本质上是没有意义的。