Выполнять бит чтения. Как работают права на каталоги в Linux?

В моей CMS я заметил, что каталогам нужен исполняемый бит (+x), установленный для того, чтобы пользователь мог их открыть. Почему требуется разрешение на выполнение для чтения каталога и как работают права на каталоги в Linux?

324 голоса | спросил Nick.h 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2011 16:13:16 +0400 2011, 16:13:16

7 ответов


301

При применении разрешений к каталогам в Linux биты разрешений имеют разные значения, чем обычные файлы.

  • Бит чтения позволяет затронутому пользователю перечислить файлы в каталоге
  • Бит записи позволяет затронутому пользователю создавать, переименовывать или удалять файлы в каталоге и изменять атрибуты каталога
  • Бит выполнения позволяет затронутому пользователю войти в каталог и получить доступ к файлам и каталогам внутри
  • В липком бите указано, что файлы и каталоги в этом каталоге могут быть удалены или переименованы их владельцем (или root)
ответил Chris Down 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2011 16:33:55 +0400 2011, 16:33:55
221

Сначала подумайте: что такое каталог? Это всего лишь список элементов (файлов и других каталогов), которые живут внутри. Итак: directory = список имен.

Бит чтения = Если установлен, вы можете прочитать этот список. Так, например, если у вас есть каталог с именем poems:

  • Вы можете ls poems, и вы получите список предметов, живущих внутри (-l не будет раскрывать никаких подробностей!).
  • Вы можете использовать завершение командной строки, т. е. touch poems/so <TAB> poems/somefile.
  • Вы не можете сделать poems свой рабочий каталог (т. е. cd).

Бит записи = Если установлено, вы можете изменить этот список, т. е. вы можете {добавлять, переименовывать, удалять} имена на нем. Но! Вы можете сделать это только в том случае, если бит выполнения установлен слишком.

Выполнять бит = Сделать этот каталог вашей рабочей директорией, то есть cd. Вам нужно это разрешение, если вы хотите:

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

Интересный случай 1 . Если у вас есть права на запись + выполнение в каталоге, вы можете {delete, rename} элементы, живущие внутри, даже если у вас нет пиринга писем по этим элементам. (используйте этот липкий бит для предотвращения этого)

Интересный случай 2 . Если у вас есть разрешение на выполнение (но не запись) в каталоге. У вас есть разрешение на запись в файл, находящийся внутри, вы не можете удалить файл (потому что он включает удаление его из список). Однако вы можете удалить его содержимое, например. если это текстовый файл, вы можете использовать vi, чтобы открыть его и удалить все. Файл все равно будет, но он будет пустым.

Резюме:

Бит чтения = Вы можете прочитать имена в списке.
Бит записи = Вы можете {добавлять, переименовывать, удалять} имена в списке, если бит выполнения также установлен.
Выполнять бит = Вы можете сделать этот каталог своим рабочим каталогом.

PS: Статья, упомянутая KAK, хорошо читается.

ответил Baldrick 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2011 20:24:49 +0400 2011, 20:24:49
38

Вот хорошая статья об этом.

Резюме:

Каталог с его битом x позволяет пользователю cd (сменить каталог) в этот каталог и получить доступ к файлам в нем.

Подробнее:

  • Чтение (r)

      

    Возможность читать имена файлов, хранящихся в этом каталоге.

  • Write (w)

      

    Возможность переименовывать файлы в каталоге, создавать новые файлы или удалять существующие файлы, если у вас также есть разрешения Execute. Если у вас нет выполнения perms, тогда писать perms бессмысленно.

  • Выполнить (x)

      

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

Вот несколько примеров, которые должны облегчить понимание:

# "Full Access".  Reegen can list, create, delete, rename, delete,
# and stat any files in dir.
# Access to file contents is subject to the permissions
# of the file itself.
# New files can be created, any file can be deleted, regardless of
# file permissions.
drwx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except create,
# delete, or rename files in this directory.
dr-x------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen can do everything in the "Full Access" list except list the
# filenames in this directory.  If she suspects there is a file
# named "program" she can list it, but cannot do an 'ls'
# of the directory itself.  She can access any file (file
# permissions permitting) if she knows its name.  She can
# create new files, or rename/delete existing ones.
d-wx------  1 reegen    reegen          4096 Jan 01 2003  dir

# Reegen cannot create or delete any files in this directory.
# She can access any file (permissions permitting) if she
# knows its name already.
d--x------  1 reegen    reegen          4096 Jan 01 2003  dir

Более подробная информация содержится в взломанной статьи Linux .

ответил Kusalananda 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 22 Sep 2011 16:36:18 +0400 2011, 16:36:18
31

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

 разрешения каталога Linux

(*) Только имена файлов : другие атрибуты, такие как размер или дата, недоступны. Например. вы можете использовать ключ табуляции для автозаполнения, но не команду ls.

Некоторые мысли :

  • С X unset , R и W в основном бесполезны.
  • X отключает RW дает ложное ощущение безопасности, поскольку вы можете слепо читать и записывать содержимое файла и получать доступ к подкаталогам. Вы должны быть уверены, что все прямые дочерние элементы каталога имеют явные разрешения.
  • Редко вы будете использовать другие значения, чем:
    • 0 : нет доступа.
    • 1 : минимальный доступ, разрешающий перемещение.
    • 5 . Разрешить чтение /запись, но не изменять структуру самого дерева каталогов.
    • 7 : полный доступ.
ответил David 19 +03002016-10-19T15:11:30+03:00312016bEurope/MoscowWed, 19 Oct 2016 15:11:30 +0300 2016, 15:11:30
1

Из книга Роберта Любви «Программирование систем LINUX» глава 1 раздел разрешений

 введите описание изображения здесь>> </a> </p></body></html>

ответил alhelal 29 32017vEurope/Moscow11bEurope/MoscowWed, 29 Nov 2017 16:57:18 +0300 2017, 16:57:18
0

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

Возьмите путь /a/b/c.txt в качестве примера, скажем, у пользователя есть 1) разрешение на выполнение на / и /a; 2) имеет разрешение на чтение по /a/b; 3) разрешение на чтение и запись на /a/b/c.txt.

  • Пользователь не сможет прочитать (список) /a, поскольку он не имеет разрешения на чтение. Но разрешение пути не прерывается.

  • Пользователь сможет читать (список) /a/b, поскольку у пользователя есть разрешение на выполнение в /, /a и /a/b и имеет разрешение на чтение по /a/b. Обратите внимание, что при чтении /a/b отображается имя файла c.txt, но метаданные (например, размер файла) и контент отсутствуют, поскольку имя файла сохраняется с каталогом, а не с файлом, но метаданные хранятся в inode файла.

  • Пользователь не сможет прочитать /a/b/c.txt, потому что при разрешении пути от / до /a to /a/b, он не работает в /a/b, так как пользователь не имеет разрешения на выполнение.

См. также как путь к файлу разрешен в файл .

ответил Dagang 21 AMpSat, 21 Apr 2018 01:02:51 +030002Saturday 2018, 01:02:51
-1

Значение Execute для каталогов совершенно очевидно. Поскольку разрешения на траверс нет, в отличие от Windows, вы должны что-то перегрузить. Дизайнеры выбрали Execute, что вызывает бесконечную путаницу. Как парень по компьютерной безопасности, назначающий права Execute на что-то, чего вы не намерены выполнять Execute, выглядит изворотливым.

ответил NemoX 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 26 Sep 2017 22:31:58 +0300 2017, 22:31:58

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132