Почему я могу перейти в неисполняемые каталоги, смонтированные с помощью sshfs?

391
iFreilicht

Я заметил, что могу переходить в неисполняемые каталоги, которые монтируются с помощью sshfs.

Сначала я создал каталоги со всеми восемью возможными режимами:

$ pwd /mnt/remote $ for i in ; 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 ; do cd test_$i; echo $?; cd /mnt/remote; done 0 0 0 0 0 0 0 0 

Так cdполучается даже для неисполняемых каталогов, что должно быть невозможно. *

Согласно предложению в комментариях, я также попытался перечислить каталог после открытия его:

$ for i in ; 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 ; 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 

Так что это дает ожидаемые результаты там.

0
Предполагая, что вы не входили в систему с правами суперпользователя как root, я предполагаю, что sshfs не проверяет разрешения до тех пор, пока ему не придется что-то делать в каталоге. Попробуйте добавить ls после компакт-диска и посмотреть, если это удастся - я думаю, что не будет. Michael Kohne 6 лет назад 0
Да, я захожу как обычный пользователь. Я добавил этот эксперимент к вопросу. TL: DR; `ls` не заботится о разрешении на выполнение, только о чтении. Таким образом, поведение такое же, как и при листинге вне каталога. iFreilicht 6 лет назад 0
Технически вы можете ls ... Быть неисполняемым действительно мешает вам получить доступ к инодам файлов под ним. Таким образом, `ls / path / to / nonexec` даст вам имена файлов, но не более того, поскольку для этого ему необходим доступ к индексам файлов, а это невозможно, поскольку каталог находится в не-exec. `ls` и` ls .` не работают, потому что использование `.` требует обхода каталога. xenoid 6 лет назад 0
@iFreilicht разрешения на чтение и исполнение для каталога - две разные вещи. Non-read запрещает вам перечислять содержимое, а non-exec не позволяет использовать этот каталог в пути для доступа к его дочерним элементам. С + x / -r вы можете использовать детей, если знаете их имена. xenoid 6 лет назад 1
@xenoid А, так что при дальнейшем исследовании `ls` делает мягкий провал. Он ничего не перечисляет, даже если в каталоге есть файлы, но завершится с кодом 0. Очень интересно. iFreilicht 6 лет назад 0
Действительно, на странице man для sshfs сказано, что чтение по умолчанию асинхронно, поэтому я думаю, что на самом деле чтение не выполняется до тех пор, пока в этом нет необходимости, и поэтому не перестает работать с 'ls'. djsmiley2k 6 лет назад 0
`-o async_read выполнить чтение асинхронно (по умолчанию) -o sync_read выполнить чтение синхронно` djsmiley2k 6 лет назад 0
В дополнение к тому, что было сказано, `sshfs` является файловой системой FUSE, и, как таковая, она по своей природе« принадлежит »пользователю, который ее запустил, независимо от того, что говорят разрешения для файла. Есть такие опции, как `-o allow_root` и` -o allow_others`, но у них есть интересные ошибки, и другие интересные вещи случаются, если root запускает `sshfs`. Поэтому я не удивлен, что разрешения не совсем соответствуют ожиданиям, хотя я не могу точно указать детали и причины. dirkt 6 лет назад 2

0 ответов на вопрос

Похожие вопросы