为什么我可以通过 cd 进入使用 sshfs 挂载的不可执行目录?

为什么我可以通过 cd 进入使用 sshfs 挂载的不可执行目录?

我注意到我可以通过 cd 进入使用 挂载的不可执行目录sshfs

首先,我创建了包含所有八种可能模式的目录:

$ pwd
/mnt/remote
$ for i in {0..7}; do mkdir test_$i; chmod $i$i$i test_$i; done
$ ll
total 32K
d--------- 2 <user> <user> 4,0K Okt 19 12:39 test_0
d--x--x--x 2 <user> <user> 4,0K Okt 19 12:39 test_1
d-w--w--w- 2 <user> <user> 4,0K Okt 19 12:39 test_2
d-wx-wx-wx 2 <user> <user> 4,0K Okt 19 12:39 test_3
dr--r--r-- 2 <user> <user> 4,0K Okt 19 12:39 test_4
dr-xr-xr-x 2 <user> <user> 4,0K Okt 19 12:39 test_5
drw-rw-rw- 2 <user> <user> 4,0K Okt 19 12:39 test_6
drwxrwxrwx 2 <user> <user> 4,0K Okt 19 12:39 test_7

然后,我简单检查了一下我是否可以cd进入每一个。

$ for i in {0..7}; do cd test_$i; echo $?; cd /mnt/remote; done
0
0
0
0
0
0
0
0

因此,cd即使对于不可执行的目录也会成功,这应该是不可能的。*

根据评论中的建议,我还尝试在打开目录后列出它:

$ for i in {0..7}; do cd test_$i && ls >/dev/null; echo $?; cd /mnt/remote; done
ls: reading directory .: Permission denied
2
ls: reading directory .: Permission denied
2
ls: reading directory .: Permission denied
2
ls: reading directory .: Permission denied
2
0
0
0
0

这里有趣的目录是test_4和,test_6因为它们具有读取权限,但没有执行权限。但是,ls对于它们两个都成功了。对于缺少读取权限的test_0到,它确实失败了。test_3

为什么会发生这种情况?


*:为了证实这一点,我在本地机器上做了同样的实验:

$ for i in {0..7}; do cd test_$i; echo $?; cd ~/work/permission_tests; done
cd: permission denied: test_0
1
0
cd: permission denied: test_2
1
0
cd: permission denied: test_4
1
0
cd: permission denied: test_6
1
0

因此它确实给出了预期的结果。

相关内容