在没有x-permission的情况下访问目录中的文件?

我在理解执行权限对目录的含义时遇到了一些麻烦。 我是否正确理解,即使目录中的内容为用户提供了特定权限,用户没有x权限的目录中的任何内容都是不可访问的?

或者用户是否仍然可以直接访问目录中的内容,但根本无法列出目录中的内容?

(我真正想要了解的是,如果目录没有x权限,那么目录来自其他用户的访问权限是多么安全。)

目录的x位也称为搜索位。 实际上,它使您可以访问文件夹中列出的文件的inode。 因此,如果您想访问/home/user/foo/bar.txt,那么您必须在bar.txt的每个祖先都拥有搜索访问权限。

从页面引用

由于目录的使用方式与常规文件不同,因此权限略有不同(但略有不同)。 尝试列出目录中的文件需要对目录具有读取权限,但不需要对其中的文件具有读取权限。 尝试将文件添加到目录,从目录中删除文件或重命名文件都需要对目录具有写入权限,但(可能令人惊讶地)不是对于其中的文件。 执行权限不适用于目录(目录也不能是程序)。 但是该权限位可以用于其他目的的目录。

目录上需要执行权限才能进入cd(即,将某个目录作为当前工作目录)。

在目录上需要执行以访问其中的文件的inode信息。 您需要它来搜索目录以读取其中的文件的inode。 因此,目录的执行权限通常称为搜索权限。

在许多常见情况下都需要搜索权限。 考虑命令cat / home / user / foo。 此命令显然需要文件foo的读取权限。 但除非您对/,/ home和/ home / user目录具有搜索权限,否则cat无法找到foo的inode,因此无法读取它! 您需要在每个祖先目录上具有搜索权限才能访问任何文件(或目录)的inode,除非您可以访问其inode,否则无法读取文件。

请在文件权限目录部分阅读更多内容。

更新: Leo提出了一个非常好的问题。 如果我们知道inode,那么我们可以从一个没有设置x位的目录中访问文件吗? 我相信,我们不应该这样做。 我没有用c程序测试它,而是用一些方便的bash命令来确认它。

user@user-desktop:~/test$ ls -lart total 12 drwxr-xr-x 49 user user 4096 2011-11-30 22:37 .. drwxr-xr-x 3 user user 4096 2011-11-30 22:37 . drwxr-xr-x 2 user user 4096 2011-11-30 22:38 level1 user@user-desktop:~/test$ ls -lart level1/ total 12 drwxr-xr-x 3 user user 4096 2011-11-30 22:37 .. drwxr-xr-x 2 user user 4096 2011-11-30 22:38 . -rw-r--r-- 1 user user 8 2011-11-30 22:38 file1 user@user-desktop:~/test$ stat level1 File: `level1' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: 808h/2056d Inode: 95494 Links: 2 Access: (0755/drwxr-xr-x) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2011-11-30 22:46:16.576702105 +0530 Modify: 2011-11-30 22:38:12.386701913 +0530 Change: 2011-11-30 22:46:08.876702102 +0530 user@user-desktop:~/test$ stat level1/file1 File: `level1/file1' Size: 8 Blocks: 8 IO Block: 4096 regular file Device: 808h/2056d Inode: 60775 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user) Access: 2011-11-30 22:38:19.846701917 +0530 Modify: 2011-11-30 22:38:16.366701915 +0530 Change: 2011-11-30 22:38:16.366701915 +0530 user@user-desktop:~/test$ chmod -x level1 user@user-desktop:~/test$ stat level1/file1 stat: cannot stat `level1/file1': Permission denied user@user-desktop:~/test$ ls -lart level1/ ls: cannot access level1/..: Permission denied ls: cannot access level1/.: Permission denied ls: cannot access level1/file1: Permission denied total 0 -????????? ? ? ? ? ? file1 d????????? ? ? ? ? ? .. d????????? ? ? ? ? ? . user@user-desktop:~/test$ cat level1/file1 cat: level1/file1: Permission denied user@user-desktop:~/test$ find . -inum 95494 ./level1 user@user-desktop:~/test$ find . -inum 60775 user@user-desktop:~/test$ find ./level -inum 60775 find: `./level': No such file or directory user@user-desktop:~/test$ find ./level1 -inum 60775 

既然你要求目录:

read意思是:读取内容,即用ls列出它们。

写意思:写入导演。 即创建文件或子目录。

执行意味着:进入该目录。

读取和执行权限对于目录来说可能有点棘手。

例如,如果您具有读取权限但未执行,则可以列出目录的内容但不能删除。 即使您知道其名称,也无法列出特定文件或目录。

如果您具有执行权限但未读取,则可以删除但不能直接列出文件。 但是,如果您知道文件或目录的名称,则可以列出它们。

目录的执行权限意味着:

能够进入此目录,并访问此目录中的文件。

如果您的目录中没有x权限,则不能:

  • 进入目录(即: cd
  • 无法访问此目录中的任何文件(即使您知道该名称)。

例:

 $ ls -ld testdir drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir $ cd testdir bash: cd: testdir: Permission denied $ cat testdir/a cat: testdir/a: Permission denied $ chmod 700 testdir $ cat testdir/a Some text. 

阅读Linux文件权限混乱第2页,以获得有关该主题的详细介绍。

x权限似乎唯一没有阻止的是访问该目录中文件的名称

例:

 $ ls -ld testdir drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir $ ls testdir ls: cannot access testdir/a: Permission denied ls: cannot access testdir/b: Permission denied ab