在我的 CMS 中,我注意到目录需要+x
为用户设置可执行位 ( ) 才能打开它们。为什么读取目录需要执行权限,Linux 中的目录权限是如何工作的?
如果我有一个具有某些限制权限的根文件夹,比如说 600,如果子文件夹/文件有 777 权限,即使根文件夹有 600,每个人都可以读/写/执行子文件吗?
假设我有一个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+x
对folder
. 我的问题则,当或为什么会它曾经是有用的给+x
权限的目录中的父对象不是有吗?
谢谢
事实上,我想问一个更一般的问题——“目录的写权限究竟允许你做什么?” - 但让我们用一个具体的例子来解决它。
这是一个很长的问题,如果您急于阅读粗体- 它应该涵盖主要部分。
不同的来源(好问题,还有一个,grymoire 的)对目录权限的描述类似于以下内容:
r, read -- 读取目录的内容(里面的文件名)
w, write -- 改变目录的属性(例如修改时间)并在里面创建/重命名/删除条目
x, search -- 访问里面的文件,你可以访问文件的inode,因此你可以访问它的实际内容
我的问题是关于w
. 它允许您访问哪些目录的属性?我不能创建/重命名/删除文件,只写权限的目录里:我做一个目录(tdir/
),并在文件中,( ),afile
, chmod -x-r tdir/
,,mv tdir/afile tdir/af
-所有的失败,并允许拒绝,除非我设置权限的目录,以及.rm tdir/afile
touch tdir/newfile
x
并且x
单独不会授予您在目录中创建/重命名/删除文件的权限。
为了做到这一点,您需要x
和w
。
但是只touch tdir
更改目录的修改时间w
。
我会以这种方式重新表述上面的来源以符合问题:目录r
允许您查看里面的文件名,但不能访问实际文件(到 inode);x
允许您访问文件的 inode(这意味着您可以查看它们的权限,并根据它可以访问内容),但您仍然无法更改目录中的任何内容;目录实际上是某种文件,要更改其中的某些内容,您需要获得w
许可。
因此,当您更改目录中的某些内容时,您需要w
获得许可。如果您的更改需要目录中文件的 inode - 您也需要 …
我有一些目录,具有以下权限:
drwxr-xr-x 18 user1 root 4096 Oct 27 11:25 /home/test1/test2
drwxr-xr-x 24 user1 root 4096 Oct 21 08:38 /home/test1
drwxr-xr-x 492 root root 12288 Nov 17 01:31 /home
drwxr-xr-x 23 root root 4096 Nov 6 18:46 /
Run Code Online (Sandbox Code Playgroud)
我的问题:
如果我的理解对不对,许可/home
说,只有root用户可以在该目录中添加/删除文件(或目录),但后来有目录test1
,其具有user1
作为其所有者。这意味着用户user1
可以在/home/test1
. 这是否意味着 的目录权限/home
仅在其直接子级而不是其所有后代(孙子等)之前有效?
并且必须只有 root 让它user1
成为其子项的所有者,/home/test1
然后user1
才能控制其子项(以及所有后代)的所有者?
如果我有一个受 say 限制的文件夹600
,因此无法访问group
or everyone
,但该文件夹包含带有 的文件777
,这是否安全?
尽管文件位于文件夹中,但是否有任何解决方法可以将777
文件作为group
或访问?everyone
600