Папка ТОЛЬКО с правом записи бесполезна… верно?

10

Проработав годами с Linux и обнаружив, что у меня есть немного свободного времени, я решил вернуться к некоторым основам. Поэтому я перечитал материал о разрешениях (без проверки исходного кода) и его особых случаях для папок и придумал новый (по крайней мере для меня ...) способ мышления о разрешениях для папок (для конкретного пользователя / group / others): я представляю папку в виде таблицы с двумя столбцами, например:

filename | inode    
foo      | 111  
bar      | 222 

Разрешение на чтение означает, что вы можете читать (и перечислять) левый столбец таблицы, разрешение на запись соответствует добавлению и удалению записей в таблице, а разрешение на выполнение соответствует возможности перевода из имени файла в индекс; т.е. вы можете получить доступ к содержимому папки.

Я провел несколько экспериментов, и все результаты соответствуют моему «мировоззрению», но один вывод кажется неизбежным: папка с разрешениями d-w-------совершенно бесполезна. Разработка: вы не можете перечислить его содержимое, вы не можете прочитать любые файлы, которые, как вы знаете, существуют внутри (потому что вы не можете перевести имена в inode), вы не можете удалить или переименовать или добавить файлы, потому что опять-таки это подразумевает перевод , и вы даже не можете добавить жесткие ссылки (потому что, я полагаю, это будет означать добавление имени, а также номера индекса, что означает, что вы будете знать и то, и другое, что, в свою очередь, опять же предположительно, нарушает цель отмены разрешения на выполнение) , И, конечно, если есть файлы внутри одной такой папки, то вы не можете удалить эту папку либо, потому что вы не можете удалить его содержимое.

Итак ... Я хотел бы задать два вопроса:

  1. Верна ли моя аналогия, или это большая ошибка?
  2. Независимо от предыдущего ответа, есть ли ситуация, когда уместно иметь папку с разрешениями, как описано?
wmnorth
источник
3
Возможно, что не каждая комбинация полезна. Например, в английском у нас есть слова, эти слова состоят из букв, а не все комбинации составляют правильные слова. например, aoeuidhtns
ctrl-alt-delor
Таким образом, вы не могли, например, создать файл? Вы запрашиваете в файловой системе пространство и индекс, а после пишете имя и индекс в таблицу каталогов. У вас должна быть только проблема, чтобы иметь 2 файла с одинаковыми именами, но разными индексами в одном каталоге ...
Hastur
@Hastur: Я тоже так думал, но после того, mkdir foo ; chmod 200 foo ; touch foo/barкак получил touch: cannot touch ‘foo/bar’: Permission denied. Это происходит, даже если foo / bar уже существует. Я тестирую в bash (Arch Linux).
wmnorth
По моей вине я думал, что вы переписываете систему из исходного кода системы ... у нас не может быть двух файлов с одинаковыми именами в одном каталоге, поэтому по логике запрещено создавать возможность его создания.
Хастур
Да, это бесполезно. Разрешение inode требует также «x» и «r», поэтому в каталогах даже один «rw» бесполезен.
Петер - Восстановить Монику

Ответы:

3

Ваше понимание в значительной степени верно. Лучший способ думать о разрешении на выполнение состоит в том, что оно позволяет вам выполнять действия с именем файла или каталога в каталоге (кроме простого чтения самого имени). Большинство из этих вещей включают перевод имени в индекс, но также включает создание новых имен и удаление существующих имен.

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

Barmar
источник
1
  1. Верна ли моя аналогия, или это большая ошибка?

Я думаю, что это правильно, вам нужно разрешение wx, чтобы иметь возможность записи в папку.

  1. Независимо от предыдущего ответа, есть ли ситуация, когда уместно иметь папку с разрешениями, как описано?

У вас может быть процесс, который записывает информацию в папку, а другой использует ее, но вам нужно запретить автору читать другую информацию, хранящуюся в этом месте.

Описанная выше ситуация полезна в автоматических установках контроля скорости. Эти подразделения должны пройти процесс проверки, где государственный служащий должен минимизировать возможности фальсификации. Некоторые устройства автоматического контроля скорости имеют внешнюю карту памяти SD, на которой система хранит регистры нарушений. Но он также может хранить «волшебный» конфигурационный файл, который незаконно изменяет поведение проверенного устройства. Таким образом, процесс, который записывает регистр нарушений, не должен иметь возможность читать что-либо с карты памяти SD.

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

Смонтировать устройство

root@leon:/media# mount -o umask=527,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/media# ls /media/pen/ -la
total 44
d-w-r-x--- 10 enforcer ftp  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

затем с пользователем принудительным попытаться написать новый файл

enforcer@leon:~$ touch /media/pen/hola
touch: cannot touch ‘/media/pen/hola’: Permission denied

размонтировать и перемонтировать с помощью wx

root@leon:/media# umount /dev/sdb1
root@leon:/media# mount -o umask=427,uid=enforcer,gid=ftp /dev/sdb1 /media/pen/
root@leon:/home/jjorge# ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer wim  4096 Dec 31  1969 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..

Попробуйте еще раз

enforcer@leon:~$ touch /media/pen/hola
enforcer@leon:~$ ls /media/pen/
ls: cannot open directory /media/pen/: Permission denied
enforcer@leon:~$ cat /media/pen/hola
cat: /media/pen/hola: Permission denied

ftp@leon:/home/jjorge$ ls /media/pen/ -la
total 44
d-wxr-x--- 10 enforcer ftp  4096 Oct 20 10:20 .
drwxr-xr-x  8 root     root 4096 Oct 17 16:14 ..
--wxr-x---  1 enforcer wim     0 Oct 20 10:20 hola

С этой конфигурацией вы теперь можете написать

Хавьер Хорхе
источник