Доступ к файлам в каталоге без разрешения x?

У меня возникли проблемы с пониманием того, что означает разрешение на выполнение для каталогов. Правильно ли я понимаю, что что-либо в каталоге, для которого пользователь не имеет x-прав, недоступен, даже если вещи внутри каталога предоставляют определенные права пользователю?

Или пользователь будет по-прежнему иметь прямой доступ к вещам в каталоге, но просто не может указать, что находится в каталоге?

(Я действительно пытаюсь понять, насколько безопасен каталог от доступа от других пользователей, если у них нет разрешения x для него.)

x бит для каталога также называется битом поиска. Фактически, он позволяет вам обращаться к inodes файлов, перечисленных внутри папки. Поэтому, если вы хотите получить доступ к /home/user/foo/bar.txt, тогда у вас должен быть доступ к поиску на каждом предке bar.txt

Цитата из страницы

Поскольку каталоги не используются так же, как обычные файлы, разрешения работают немного (но только слегка) по-разному. Попытка перечислить файлы в каталоге требует разрешения на чтение для каталога, но не для файлов внутри. Попытка добавить файл в каталог, удалить файл из каталога или переименовать файл, все требуют разрешения на запись для каталога, но (возможно, удивительно) не для файлов внутри. Разрешение на выполнение не распространяется на каталоги (каталог также не может быть программой). Но этот бит разрешения используется для каталогов для других целей.

Выполнить разрешение необходимо в каталоге, чтобы иметь возможность записывать в него (т. Е. Сделать какой-то каталог текущей рабочей директорией).

Выполнение необходимо в каталоге для доступа к информации inode файлов внутри. Вам нужно это для поиска в каталоге, чтобы прочитать inodes файлов внутри. По этой причине разрешение на выполнение в каталоге часто называется поисковым разрешением.

Разрешение поиска требуется во многих распространенных ситуациях. Рассмотрим команду cat / home / user / foo. Для этой команды явно требуется разрешение на чтение для файла foo. Но если у вас нет разрешения на поиск в каталогах /, / home и / home / user, кошка не может найти inode foo и, следовательно, не может его прочитать! Для доступа к индексному дескриптору любого файла (или каталога) требуется разрешение на поиск в каждом каталоге предков, и вы не можете прочитать файл, если вы не можете получить его inode.

Подробнее читайте в разделе каталога разрешений файлов.

Обновление: Лео поднял очень хороший вопрос. Если мы знаем индексный дескриптор, то можем ли мы получить доступ к файлу из каталога, в котором его бит не установлен? Я считаю, мы не должны этого делать. Я не тестировал его с помощью программы 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.

пишите: пишите в директора. т.е. создание файлов или подкаталогов.

execute означает: введите в эту директорию.

права на чтение и выполнение могут быть немного сложными для каталогов.

Например, если у вас есть разрешения на чтение, но не выполняются, вы можете перечислить содержимое каталога, но не можете его вставить. Также вы не можете перечислить определенные файлы или каталоги, даже если вы знаете их имена.

Если у вас есть разрешение на выполнение, но не прочитано, вы можете войти в него, но не можете напрямую перечислить файлы. Но если вы знаете имена файлов или каталогов, вы можете их перечислить.

Разрешение на каталоги означает:

Возможность записи cd в этот каталог и доступ к файлам в этом каталоге.

Если у вас нет права 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 File Permission Confusion pt 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