Проработав годами с Linux и обнаружив, что у меня есть немного свободного времени, я решил вернуться к некоторым основам. Поэтому я перечитал материал о разрешениях (без проверки исходного кода) и его особых случаях для папок и придумал новый (по крайней мере для меня ...) способ мышления о разрешениях для папок (для конкретного пользователя / group / others): я представляю папку в виде таблицы с двумя столбцами, например:
filename | inode
foo | 111
bar | 222
Разрешение на чтение означает, что вы можете читать (и перечислять) левый столбец таблицы, разрешение на запись соответствует добавлению и удалению записей в таблице, а разрешение на выполнение соответствует возможности перевода из имени файла в индекс; т.е. вы можете получить доступ к содержимому папки.
Я провел несколько экспериментов, и все результаты соответствуют моему «мировоззрению», но один вывод кажется неизбежным: папка с разрешениями d-w-------
совершенно бесполезна. Разработка: вы не можете перечислить его содержимое, вы не можете прочитать любые файлы, которые, как вы знаете, существуют внутри (потому что вы не можете перевести имена в inode), вы не можете удалить или переименовать или добавить файлы, потому что опять-таки это подразумевает перевод , и вы даже не можете добавить жесткие ссылки (потому что, я полагаю, это будет означать добавление имени, а также номера индекса, что означает, что вы будете знать и то, и другое, что, в свою очередь, опять же предположительно, нарушает цель отмены разрешения на выполнение) , И, конечно, если есть файлы внутри одной такой папки, то вы не можете удалить эту папку либо, потому что вы не можете удалить его содержимое.
Итак ... Я хотел бы задать два вопроса:
- Верна ли моя аналогия, или это большая ошибка?
- Независимо от предыдущего ответа, есть ли ситуация, когда уместно иметь папку с разрешениями, как описано?
источник
mkdir foo ; chmod 200 foo ; touch foo/bar
как получилtouch: cannot touch ‘foo/bar’: Permission denied
. Это происходит, даже если foo / bar уже существует. Я тестирую в bash (Arch Linux).Ответы:
Ваше понимание в значительной степени верно. Лучший способ думать о разрешении на выполнение состоит в том, что оно позволяет вам выполнять действия с именем файла или каталога в каталоге (кроме простого чтения самого имени). Большинство из этих вещей включают перевод имени в индекс, но также включает создание новых имен и удаление существующих имен.
Разрешение на запись в каталог без выполнения, следовательно, довольно бесполезно, так как на самом деле вы ничего не можете написать, если не можете получить доступ к файлам в нем.
источник
Я думаю, что это правильно, вам нужно разрешение wx, чтобы иметь возможность записи в папку.
У вас может быть процесс, который записывает информацию в папку, а другой использует ее, но вам нужно запретить автору читать другую информацию, хранящуюся в этом месте.
Описанная выше ситуация полезна в автоматических установках контроля скорости. Эти подразделения должны пройти процесс проверки, где государственный служащий должен минимизировать возможности фальсификации. Некоторые устройства автоматического контроля скорости имеют внешнюю карту памяти SD, на которой система хранит регистры нарушений. Но он также может хранить «волшебный» конфигурационный файл, который незаконно изменяет поведение проверенного устройства. Таким образом, процесс, который записывает регистр нарушений, не должен иметь возможность читать что-либо с карты памяти SD.
Вот пример, сначала только для записи, а затем, как заставить его работать с wx:
Смонтировать устройство
затем с пользователем принудительным попытаться написать новый файл
размонтировать и перемонтировать с помощью wx
Попробуйте еще раз
С этой конфигурацией вы теперь можете написать
источник