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

Введите sudo service transmission-daemon stop в терминал

См.: TransmissionHowTo

16
задан 29 November 2011 в 23:28

3 ответа

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
18
ответ дан 25 May 2018 в 16:23
  • 1
    Итак, если у меня есть индекс inode файла / каталога внутри каталога без прав поиска, я мог бы получить к нему доступ, если разрешат его разрешения? (Получение номера inode без возможности сделать stat довольно сложно, хотя я полагаю.) – Leo 30 November 2011 в 14:22
  • 2
    @Leo Я считаю, что мы не должны этого делать. Я обновил ответ. Если у вас есть небольшая заглушка, пожалуйста, проверьте ее и сообщите нам. – Amey Jah 30 November 2011 в 23:22
  • 3
    @AmeyJah, На самом деле, я уверен, вы можете. Подумайте, что происходит, когда вы жестко связываете файл с другим каталогом, к которому у вас есть разрешение. Тот же индекс, но вы можете его прочитать. Другими словами, разрешение на чтение не зависит от системы, которая просматривает все папки, к которым может принадлежать индекс, и если у них есть бит x. Отличный ответ. Большое спасибо. – user1477 15 May 2014 в 22:34
  • 4
    @AmeyJah ls , stat и т. Д. Используйте stat (2) и т. Д. На всякий случай вы не знали. Я мог бы написать программу на C, но ваш тест сделает все, что будет показывать программа, хотя, конечно, это может сделать больше, то же самое: он использует системные вызовы (раздел 2). Библиотечные вызовы (раздел 3) являются более высокими, чем системные вызовы, но ничего не меняют (например, remove (3) использует rmdir (2) для каталогов и unlink (2) для файлов). – Pryftan 7 February 2018 в 00:45

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

read означает: читайте содержимое, то есть перечисляя их с помощью ls. пишите: пишите в директора. т.е. создание файлов или подкаталогов. execute означает: введите в эту директорию.

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

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

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

4
ответ дан 25 May 2018 в 16:23
  • 1
    Если у вас есть разрешение на чтение, но не выполняется, вы можете перечислить (ls) содержимое каталога, но не можете получить доступ (cat) к нему. Если у вас есть разрешение на выполнение, но не прочитано, и вы знаете имена файлов, к которым вы можете получить доступ (cat). – dash17291 3 July 2013 в 00:18

Разрешение на запуск в каталогах означает:

Возможность записи 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
a  b
2
ответ дан 25 May 2018 в 16:23

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

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