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

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

假设我有一个名为folder以下路径的文件夹:

my_path = /a/b/c/d/e/folder

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

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

> chmod g-rwx -R /a/

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

> chmod g+rx /a/b/c/d/e/folder

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

> ls /a/b/c/d/e/folder

或者

> cat /a/b/c/d/e/folder/file 

她收到权限错误,据我了解,这是因为我需要g+x向 的所有父母提供访问权限folder。那么我的问题是,何时或为何+x向其父目录授予权限是否有用不是有它?

谢谢

答案1

您需要对任何和所有父目录具有 +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

仅执行

/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

现在阅读:

/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

这部分可能有点令人困惑,但是只读取而不执行,您实际上可以列出目录中的文件,但不能读取 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

答案2

大多数时候,如果您想阻止对整个目录(包括其子目录)的访问和使用,您可以通过删除它(非递归地)来实现-x。因此,您可能已将子目录保留为+x,而不会造成任何损害。

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

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

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

答案3

您想+x在您给出的情况下使用非递归权限:

chmod g+x /a /a/b /a/b/c /a/b/c/d /a/b/c/d/e

(假设用户是每个目录组的成员。如果不是,则必须chmod o+x对任何此类目录执行此操作。)

为了使用户ls /a/b/c/d/e/folder成功执行操作,他必须具有执行权限每一个路径中的目录,并具有读取权限folder

如果你这样做了

chmod g+x -R /a

它会起作用,但你会授予组执行权限每一个/a 下的文件和目录。这是不必要的,对于文件来说,可能是错误的。

答案4

删除目录上的 x 位的常见情况是将用户锁定在其主目录中。受限制的炮弹可以选择不允许cd引用绝对路径名并不允许使用绝对路径执行程序。它们也无法cd ..访问其主目录的父目录,因此被有效锁定并且无法运行不在 $PATH 中的任何程序。

相关内容