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

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

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

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

24
задан 29 November 2011 в 21:28

3 ответа

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

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

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

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

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

Разрешение на поиск требуется во многих распространенных ситуациях. Рассмотрим команда cat / home / user / foo. Эта команда явно требует чтения разрешение для файла foo. Но если у вас нет разрешения на поиск Каталоги /, / home и / home / user, cat не может найти индексный дескриптор foo и поэтому не может его прочитать! Вам необходимо разрешение на поиск для каждого каталог-предок для доступа к индексному дескриптору любого файла (или каталога), и вы не сможете прочитать файл, если не сможете добраться до его 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
24
ответ дан 29 November 2011 в 21:28

Разрешение на выполнение для каталогов означает:

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

Если у вас нет 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
a  b
2
ответ дан 29 November 2011 в 21:28

Поскольку вы запрашиваете каталоги:

чтение означает: читать содержимое, т.е. перечисление их с помощью ls.

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

выполнение означает: войти в этот каталог.

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

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

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

5
ответ дан 29 November 2011 в 21:28

Другие вопросы по тегам:

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