Проработав годами с 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).