为什么需要执行权限才能写入或列出目录中的文件?

为什么需要执行权限才能写入或列出目录中的文件?

对于目录,一些参考资料说:

  • r:我们可以列出目录内容
  • w:我们可以在目录上写入
  • x:我们可以切换到目录(cd 进入目录)。

但在我的测试中我遇到了以下情况:

  • 我的用户马特乌斯适用于他人许可。
  • x 是目录

仅在r他人许可的情况下 ( chmod 704):

如果我在目录中发出 ls -l ,我会得到这个疯狂的输出:

mateus@engsrv:/tmp$ ls -l x/
ls: cannot access 'x/file_teste': Permission denied
total 0
-????????? ? ? ? ?            ? file_teste
mateus@engsrv:/tmp$

我也无法“cat”该文件。

mateus@engsrv:/tmp$ cat x/haha
cat: x/haha: Permission denied

好吧,让我们看看只有在w其他人允许的情况下会发生什么(chmod 702

mateus@engsrv:/tmp$ touch x/file_test2
touch: cannot touch 'x/file_test2': Permission denied
mateus@engsrv:/tmp$

如果我授予执行(chmod 703),我可以写入该文件夹:

mateus@engsrv:/tmp$ touch x/file_test2

读取权限也会发生同样的情况(chmod 705)

mateus@engsrv:/tmp$ ls -l x
total 4
-rw-rw-r-- 1 mateus mateus 0 Oct  3 17:45 file_test2
-rw-r--r-- 1 root   root   3 Oct  3 17:31 file_teste

那么,执行 (x) 总是必要的吗?但为什么?后台还有什么需要执行权限的吗?

答案1

在文件夹中创建(写入)文件时需要进入(执行)文件夹。因为 OS/shell 正在移动到该文件夹​​中以创建文件。更改文件夹正在执行它(不是直接执行)。

解决这个问题的一个好观点是,当您将文件夹视为文件(在 Linux 系统中)时 - 它与文件相同,但执行它时您将位置更改为文件夹内部而不是运行(例如脚本、程序)它。

但是:您可以更改文件夹名称,即使它没有写入权限(写入用于文件夹内部 - 创建文件)。没有执行权限,您无法进入文件夹。如果您可以执行文件夹,那么您可以根据权限只读或稍后在其中写入。

编辑:它是这样设计的。

答案2

这只是因为。

当您更改目录时,您不会在后台执行任何操作。执行一个目录并没有真正的意义,所以它可以自由地以任何方式解释。就这样决定了。不是因为执行了任何代码。 sys_chdir 系统调用检查权限但不执行任何操作。

相关内容