具有 +x 权限的目录,没有它的父母。这什么时候有用?

Ame*_*ina 11 permissions

假设我有一个folder在以下路径中调用的文件夹:

my_path = /a/b/c/d/e/folder
Run Code Online (Sandbox Code Playgroud)

以及file在该文件夹中调用的文件。

然后,假设我运行此命令以删除 /a/ 下的组权限

> chmod g-rwx -R /a/
Run Code Online (Sandbox Code Playgroud)

现在,假设我授予以下+rx权限folder

> chmod g+rx /a/b/c/d/e/folder
Run Code Online (Sandbox Code Playgroud)

然后,如果我组中的第二个用户运行:

> ls /a/b/c/d/e/folder
Run Code Online (Sandbox Code Playgroud)

或者

> cat /a/b/c/d/e/folder/file 
Run Code Online (Sandbox Code Playgroud)

她得到许可错误,据我所知,这是因为我需要提供g+xfolder. 我的问题则,当或为什么会它曾经是有用的给+x权限的目录中的父对象不是有吗?

谢谢

skr*_*ler 7

您需要对任何和所有父目录的 +x 权限才能 cd 或访问目录中的文件。

您需要目录中的 +r 权限才能列出文件。所以这是一个例子:

你可以发出这些命令来设置一些东西:

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

没有权利:

pwd
/a$ pwd
/a
/a$ chmod -rwx b
/a$ ls -l
d---------  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
ls: : Permission denied
/a$ cat b/file1
cat: b/file1: Permission denied
Run Code Online (Sandbox Code Playgroud)

仅执行

/a$ chmod +x b
/a$ ls -l
total 0
d--x--x--x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: b: Permission denied
/a$ cat b/file1
a
/a$ ls -l b/file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 b/file1
Run Code Online (Sandbox Code Playgroud)

现在阅读:

/a$ chmod +r b/
/a$ ls -l
/a$ ls -l
total 0
dr-xr-xr-x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
total 16
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file2
Run Code Online (Sandbox Code Playgroud)

这部分可能有点混乱,但只有读取而不执行,您实际上可以列出目录中的文件,但不能读取 inode 元数据,因此您将获得权限被拒绝但仍然能够看到文件列表在如下目录中..

/a$ chmod -x b/
/a$ ls -l
total 0
dr--r--r--  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: file1: Permission denied
ls: file2: Permission denied
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@skrewler。你说:“你需要对 **any 和 all** 父目录的 +x 权限才能 cd 或访问目录中的文件”,这就是我的想法。我的问题是:**为什么**你会给一个目录 +x 权限给 **parents** **没有 ** 拥有 +x 权限的目录? (2认同)

Bru*_*uno 6

大多数情况下,如果您想阻止对整个目录(包括其子目录)的访问和使用,您可以通过删除它(非递归)来实现-x。因此,您可能在子目录中留下了+x,而不会造成任何伤害。

出于多种原因,保留对子目录的权限可能很有用(尤其是在-x不适用于所有人但至少有一个用户仍然可以执行某些操作时)。

例如,您可以暂时阻止容器目录的使用,同时对该目录结构中的权限进行其他更改,然后在一次操作中重新启用对整个树的访问(提供+x给顶级目录)。

您还可能遇到这样的情况:脚本(不一定由所有者运行)将目录树备份到临时位置(其他人不应读取)并将所有内容放在 tar 文件中,从而保留目录的内容。