Доступ для записи без доступа для чтения

15

Возможно ли для пользователя иметь доступ на запись к файлу и не иметь возможности его прочитать? Как это возможно?

Я попробовал следующие команды:

debianbox@debian:~/posix/io$ touch filetest
debianbox@debian:~/posix/io$ ls -l filetest
-rw-r--r-- 1 debianbox debianbox 0 14 oct.  03:10 filetest

debianbox@debian:~/posix/io$ echo "Hello World" > filetest
debianbox@debian:~/posix/io$ cat filetest
Hello World

debianbox@debian:~/posix/io$ chmod u-r filetest
debianbox@debian:~/posix/io$ cat filetest
cat: filetest: Permission forbidden

debianbox@debian:~/posix/io$

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

Dimitri
источник

Ответы:

18

Это не ошибка, это особенность TM (также, просто следствие универсального подхода Unix к разрешениям).

Помимо поведения, подобного dropbox, в случае каталогов (как описано в BillThor), доступ только для записи необходим для некоторых специальных (псевдо) файлов под /procи /sys. Такие файлы используются для установки некоторых свойств драйвера или ядра или запуска системных действий. Вы не можете прочитать их, потому что они используются только для односторонней сигнализации - вы можете только передать им некоторый текст / данные. Чтобы найти такие файлы, вы можете использовать

find /proc/[^0-9]* /sys -perm /222 ! -perm /444

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

rozcietrzewiacz
источник
21

Основная причина разрешения доступа на запись без доступа на чтение заключается в том, что это упрощает управление разрешениями как внутри ядра, так и в пользовательских программах. Есть два разрешения, одно для чтения и одно для записи, и они управляются независимо. Это не ошибка, поскольку задокументированное поведение совпадает с фактическим поведением, и нет веских причин требовать другого поведения.

Наличие прав на запись без прав на чтение не имеет большого смысла для обычных файлов. Это имеет смысл для различных специальных файлов.

  • Некоторые системы допускают файлы только для добавления. Это полезно для файлов журнала, например. Может иметь смысл разрешать многим пользователям создавать записи в журнале, но не позволять им стирать или перезаписывать существующие записи (отсюда: разрешение на запись, но атрибут только для добавления), а также разрешать им читать записи других пользователей (следовательно: нет разрешение на чтение).
  • Программе может быть разрешено выполнять запись в именованный канал без возможности чтения из нее.
  • Некоторые устройства предназначены только для записи. Например, устройство вывода звука, подключенное к громкоговорителю, но без микрофона, не должно иметь разрешения на запись, но не должно иметь разрешения на чтение.
  • Существуют различные специальные файловые системы, в которых чтение или запись в файл имеет непосредственный эффект вместо извлечения или добавления данных в хранилище. Например, в Linux есть различные файлы в /procи /sysчто позволит космическим программам пользователя для отправки команд на ядро путем записи конкретного файла. Если эта команда не предоставляет никакой обратной связи, специальный файл становится доступным только для записи.
Жиль "ТАК - прекрати быть злым"
источник
2

Нет, это не ошибка. Тем не менее, я не вижу, что это обычно применяется к файлам.

Я чаще всего видел доступ только для записи в каталоги dropbox. Пользователи могут добавлять файлы в каталог, но не могут видеть, какие файлы существуют.

Для обычного текстового файла доступ только для записи будет подходящим для доступа типа dropbox.

Настройка доступа только для записи для себя не будет ужасно полезной, но не допускание этого усложнит код разрешений.

РЕДАКТИРОВАТЬ: файлы Dropbox вряд ли будут полезны. Однако это может быть полезно для журналов без полномочий root, поскольку это затруднит перезапись записей журнала. Если вы можете прочитать файл, гораздо проще определить, куда записывать заменяющую запись в журнале. Однако я не знаю никого, кто бы настраивал свои журналы таким образом. Обычно используется удаленное ведение журнала, чтобы предотвратить локальное изменение записей журнала.

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

BillThor
источник
«Файл dropbox» на самом деле не имеет большого смысла. Его можно использовать только для записи некоторых данных, и даже если в какой-то момент его можно будет прочитать, его содержимое не покажет реального следа того, что с ним происходит, поскольку его можно было ранее стереть или удалить.
rozcietrzewiacz