假设我有一个名为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 中的任何程序。