В моей CMS я заметил, что каталогам нужен установленный исполняемый бит ( +x
), чтобы пользователь мог их открыть. Почему разрешение на чтение требуется для чтения каталога, и как работают разрешения на каталоги в Linux?
linux
permissions
directory
Nick.h
источник
источник
chmod 771 dirOne
), вы не можете перечислить содержимое dirOne. НО, если он содержит подкаталог "dirTwo" с правами, установленными как (chmod 774 dirTwo
), вы можете фактически перечислить его содержимое!Ответы:
При применении разрешений к каталогам в Linux биты разрешений имеют другое значение, чем в обычных файлах.
r
) позволяет пораженный пользователю список файлов в директорииw
) позволяет пораженному пользователю создавать, переименовывать или удалять файлы в каталоге, и изменять атрибуты справочникаx
) позволяет пораженный пользователю войти в каталог, а также доступ к файлам и каталогам внутриT
или ,t
если выполнить бит установлен для других) утверждает , что файлы и директории в этом каталоге могут быть удалены только или переименовать их владельцем (или корень)источник
+x
каталог предоставляет доступ к файлам inode через этот конкретный каталог (ни меньше, ни больше, ну… может быть, тожеchdir
нужно+x
). Для чтения или записи содержимого одного файла пользователю также необходимо+r
/+w
для этого файла, но это разные права (они ничего не переопределяют).+x
в каталоге предоставляет доступ к файлам inode" - это похоже на хороший nemonic, но, возможно, не рассказывает всю историю? Без установленного в каталоге бита выполнения вы не можете изменить имя файла в этом каталоге. Мне интересно, почему это так, потому что имя файла хранится в записи каталога, а не в inode.Сначала подумайте: что такое каталог? Это просто список элементов (файлов и других каталогов), которые находятся внутри. Итак: каталог = список имен.
Читать бит = Если установлено, вы можете прочитать этот список. Так, например, если у вас есть каталог с именем
poems
:ls poems
и вы получите список предметов, живущих внутри (-l
не раскрывать никаких деталей!).touch poems/so <TAB> poems/somefile
.poems
свой рабочий каталог (то естьcd
в него).Бит записи = если установлено, вы можете изменить этот список, т.е. вы можете {добавлять, переименовывать, удалять} имена в нем. Но! На самом деле вы можете сделать это, только если установлен бит выполнения.
Выполнить бит = Сделать этот каталог вашим рабочим каталогом, т.е.
cd
в него. Вам нужно это разрешение, если вы хотите:Интересный случай 1. Если у вас есть права на запись + выполнение для каталога, вы можете {удалить, переименовать} элементы, находящиеся внутри, даже если у вас нет разрешения на запись для этих элементов. (используйте липкий бит, чтобы предотвратить это)
Интересный случай 2 : если у вас есть разрешение на выполнение (но не на запись) в каталоге и у вас есть разрешение на запись в файл, находящийся внутри, вы не можете удалить файл (поскольку он предполагает удаление его из списка). Однако вы можете удалить его содержимое, например, если это текстовый файл, вы можете использовать vi, чтобы открыть его и удалить все. Файл все еще будет там, но он будет пустым.
Резюме:
Читать бит = Вы можете прочитать имена в списке.
Бит записи = Вы можете {добавлять, переименовывать, удалять} имена в списке, ЕСЛИ бит выполнения тоже установлен.
Выполнить бит = Вы можете сделать этот каталог вашим рабочим каталогом.
PS: Статья, упомянутая Кусаланандой, хорошо читается.
источник
x
бит для любого доступа к этому файлу: дляcat a/b/c/d
, мне нуженx
бит для всехa
,b
иc
, даже если я не использую их как cwd.x
разрешение на каталог, если у вас нетx
разрешения на файл внутри, вы не сможете «выполнить» файл. Вы можете толькоcat
это, например, но вы не можете запустить сам файл.ls -l
работать для папки, нужны оба разрешенияr
иx
разрешение.Я подготовил эту таблицу со всеми возможными разрешениями и их практическим эффектом.
(*) Только имена файлов : другие атрибуты, такие как размер или дата, недоступны. Например, вы можете использовать клавишу табуляции для автозаполнения, но не команду ls.
Некоторые мысли :
источник
-W-
функционально эквивалентным---
для каталогов. Не очень интуитивно понятно. Конечно, эти типы битов низкого уровня часто нет.-W-
я мог переименовать каталог (в каталог с наклейкой), но не с---
. В этом, кажется, разницаВот хорошая статья по этому вопросу.
Резюме:
Каталог с
x
установленным битом позволяет пользователюcd
(сменить каталог) в этот каталог и получать доступ к файлам в нем.Подробности:
Читать (
r
)Написать (
w
)Execute (
x
)Вот несколько примеров, которые должны облегчить понимание:
Еще больше информации в статье Hacking Linux Exposed .
источник
Из книги Роберта Лава «Системное программирование LINUX», глава 1, раздел-
источник
Для любой операции, обращающейся к файлу или каталогу, он должен сначала разрешить путь к файлу или каталогу. Разрешение требует, чтобы пользователь имел разрешение на выполнение для всех каталогов вдоль пути, кроме конечного компонента пути. Таким образом, для каталогов вы можете думать, что бит выполнения означает «разрешаемый».
Возьмите путь
/a/b/c.txt
в качестве примера, скажем, пользователь имеет 1) разрешение на выполнение/
и/a
; 2) имеет разрешение на чтение/a/b
; 3) разрешение на чтение и запись/a/b/c.txt
.Пользователь не сможет читать (список)
/a
, потому что у него нет разрешения на чтение. Но разрешение пути не подведет.Пользователь будет иметь возможность читать (список)
/a/b
, потому что пользователь имеет разрешение на выполнение/
,/a
и права на чтение/a/b
. Обратите внимание, что при чтении/a/b
имя файлаc.txt
является видимым, но метаданные (например, размер файла) и содержимое - нет, поскольку имя файла хранится в каталоге, а не в файле, но метаданные хранятся в индексе файла.Пользователь не сможет прочитать
/a/b/c.txt
, потому что при разрешении пути от/
к/a
к/a/b
он терпит неудачу,/a/b
так как у пользователя нет разрешения на выполнение.Смотрите также, как путь разрешается в файл .
источник
Полезная аналогия - думать о каждом файле как о книге, а каждый каталог - как о комнате, где хранятся книги.
Существуют правила, позволяющие перечислить все имена в комнате: бит чтения для каталогов. Правила удаления книги из комнаты: бит записи для каталогов. И правила, чтобы войти в комнату и изучить: результирующий каталог выполнить бит.
Эти правила являются отдельными и отличаются от правил для каждой книги. Существуют правила, позволяющие кому-либо открывать книгу и читать ее содержимое: биты чтения для каждого файла. Существуют правила для изменения содержимого книги: бит записи для каждого файла. И для выполнения файла: биты выполнения для каждого файла.
Я пишу бит (ы), потому что есть три бита для каждого действия. Существует один бит чтения для владельца, один бит чтения для группы (групп) и бит чтения для всех остальных (других). Если какой-либо из этих трех битов установлен для конкретного пользователя, этот пользователь имеет активный бит чтения. Это не имеет значения , как было установлено , что бит быть активными либо ˙U Ser или г Роапом или о Ther, он имеет те же эффективные результаты.
Таким образом, пользователю может быть разрешено входить в комнату и удалять книги из библиотеки, но ему запрещено читать содержимое той же книги.
Вот почему требуется бит чтения для каталогов: чтобы контролировать, кому разрешено перечислять содержимое комнаты (названия книг).
И выполнить бит используется для управления , которые могут войти в комнату книг.
источник
Смысл Execute для каталогов вполне понятен. Поскольку в отличие от Windows нет разрешения Traverse, вы должны что-то перегрузить. Дизайнеры выбрали Execute, что вызывает бесконечную путаницу. Как парень из компьютерной безопасности, назначающий права на выполнение чего-то, что вы на самом деле не собираетесь выполнять, выглядит глупо.
источник
GENERIC_EXECUTE
и того, чем он является.