当我尝试使用 Linux(特别是 Ubuntu 14.04.1 上的 bash 4.3.11(1)-release)访问 AFS 挂载中的目录时,我遇到了一些意外行为。在某些情况下,我无法访问我应该能够访问的目录,而在其他情况下,我是能够访问一些我根本没有权限的目录。例如:
$ ls -l
total 24
drwxr-xr-x 9 70296 root 6144 Jan 12 14:44 look_inside
drwx------ 278 someadmin operator 10240 Jan 17 17:54 private
<output truncated>
$ cd look_inside
-bash: cd: look_inside: Permission denied
$ ls look_inside
ls: cannot open directory look_inside: Permission denied
我不是所有者,也不在群组 中root
,因此所有人权限应该适用于 look_inside。每个人都拥有及其所有父目录r-x
的权限look_inside
,但我无法使用cd look_inside
或ls look_inside
。另一方面,我能访问private
,即使我没有权限:
$ getfacl private
# file: private
# owner: cbl
# group: operator
user::rwx
group::---
other::---
$ ls -l private
total 560
<output truncated>
我也不是 的所有者private
。我属于 组operator
,但这并不重要,因为该组对 没有任何权限private
。但是,我可以访问 private。也就是说,无论我是否有r-x
权限,我都无法访问其中的任何目录(请参见下文)。当然,这是有道理的,因为我没有其父级的 x 权限。 中没有常规文件private
(或者至少,当我运行 时只显示目录ls
),所以我不知道常规文件会受到怎样的影响。
$ cd private
$ ls -l
total 560
drwx------ 3 someadmin operator 2048 Jan 16 14:11 someuser
drwxr-xr-x 3 otheradmin operator 2048 Jan 16 14:11 otheruser
<output truncated>
$ ls -l someuser
ls: cannot open directory someuser: Permission denied
$ ls -l otheruser
ls: cannot open directory otheruser: Permission denied
什么原因导致了这种行为?我有什么办法可以访问look_inside
?我(或系统管理员)是否应该担心我能够访问private
?
答案1
AFS 不使用传统的 Unix 权限(尽管它确实记住了这些权限),也不使用 POSIX ACL(您在 中看到的权限getfacl
)。Unix 权限有一些例外(如果您删除全部访问读取或写入chmod
,我相信这确实会删除每个人的相关访问权限),但一般来说 AFS 使用自己的 ACL 系统。
假设您正在使用 OpenAFS,要查看文件或目录的权限,请运行fs listacl <path>
。要设置权限(如果您有访问权限),请运行。AFS ACL 授予的权限与 Unix样式权限、POSIX ACL 以及我所知道的任何其他访问系统fs setacl <path> <user> <perms>
都不同。它们有详细的解释chmod
这里,简而言之:您有 7 个权限,通常用一个字母表示。它们是:'r'ead、'l'ist、'w'rite、'i'nsert、'd'elete、'loc'k' 和 'a'dmin。
例如,您可以查看并读取文件的目录如下所示:
$ fs listacl somedir
Access list for somedir is
Normal rights:
system:anyuser rl
system:administrators rlidwka
这意味着“system:anyuser”(世界上的任何人)只能“读”目录内容,并“读”该目录中文件的内容。另一方面,“system:administrators”(用于管理员用户的组)可以执行任何操作。
您无法访问的目录可能如下所示:
$ fs listacl privdir
Access list for privdir is
Normal rights:
system:administrators rlidwka
foouser rlidwka
这意味着只有管理员和“foouser”可以对该目录执行任何操作。但是,如果您根本无法访问目录,我认为您也无法访问fs listacl
它,因此将显示一条错误消息。
如果您不使用 OpenAFS,而是使用上游 Linux 源代码树中的 AFS 实现(“kAFS”),那么您将无法使用该fs
命令。我认为不可能使用该实现查看 AFS ACL,但我可能错了。
答案2
访问控制列表可以做到这一点。你在 bash 会话中检查过你的用户名和组吗whoami
?groups