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


11

假设我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
您确定要跑步chmod +grx -R /a/b/c/d/e/folder吗?是错误的,正确的执行方式是:chmod g+rx -R /a/b/c/d/e/folder
nozimica 2011年

3
不会直接回答这个问题,但建议您阅读背景知识:目录权限的说明
Gilles'SO- stop

Answers:


6

在大多数情况下,如果要阻止访问和使用整个目录(包括其子目录),可以通过删除(非递归)来进行-x。因此,您可能留下了带有的子目录+x,而没有造成任何伤害。

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

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

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


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

仅执行

/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
谢谢@skrewler。您说:“您需要对任何父目录和所有父目录具有+ x权限,才能cd或访问目录中的文件”,这就是我的想法。那么我的问题是:为什么你会永远给+ X权限的目录,其父母不会有+ X的权限?
Amelio Vazquez-Reina

我能想到的唯一一件事就是,如果您想直接在此处进行绑定安装,而绕开没有执行权限的父目录。如果那没有道理,我将举一个例子。
skrewler 2011年

上面应该更清楚了。具有所有父目录权限的root用户可以进行此绑定安装,以允许其他用户访问该目录。由于它们可以到达/ a / b / c / d / e,其中只有d或e具有全局执行能力,因此您可以从/ mnt / d-> / a / b / c / d / e进行绑定安装,并且用户可以到达通过转到挂载点。这与在目录树深处进行硬链接(否则无法访问)的想法相同。但是,符号链接无法像这样工作,需要绑定安装。
skrewler 2011年

2

您要+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下的每个文件和目录授予组执行权限。这是不必要的,对于文件,可能是错误的。


1

在您面临的特定情况下,问题在于,即使folder具有您自己组中的某些用户可以访问的适当权限,如果folder该用户无法访问的任何父文件夹,那么他也将无法访问内部对象(folder在您的示例中称为内部对象)。

如果执行:

chmod g-rwx -R /a/

然后a所有的孩子都将获得该许可。

当您执行时:

chmod g+rx -R /a/b/c/d/e/folder

folder其所有子代也将获得该许可。但是,使用此稍后的命令,文件夹a/a/b等等,直到a/b/c/d/e不会更改其权限。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.