Разрешения NTFS - Создание файлов и папок, но предотвращение удаления и изменения

10

Цель: общая папка, в которой пользователи могут создавать файлы, но не могут изменять или удалять их. Пользователи также должны иметь возможность создавать подпапки.

Я предоставил своей группе безопасности следующие расширенные разрешения NTFS:

  • Папка перемещения / Выполнить файл
  • Список папок / чтение данных
  • Читать атрибуты
  • Читать расширенные атрибуты
  • Создание файлов / запись данных
  • Разрешения на чтение

В процессе проб и ошибок я обнаружил, что, не предоставляя «Атрибуты записи», это предотвращает изменение / удаление существующих файлов пользователем (что я и хочу). Тем не менее, мне бы очень хотелось объяснить, почему именно это работает. Единственная теория, которая у меня есть, заключается в том, что удаление / изменение файла изменяет атрибуты файла? Здесь обсуждение в том же духе .

РЕДАКТИРОВАТЬ - Вторая часть моего вопроса не имеет значения, я думал, что я только выбрал «Создать файлы / Запись данных», но у меня также был выбран «Создать папки / Добавить данные».

Более того, я хочу, чтобы пользователи могли создавать подпапки в корне, и я обнаружил, что, предоставляя «Создание файлов / запись данных», это позволяет именно это. Но опять же, название предполагает, что это разрешение должно просто разрешать создание файлов, а не папок, поэтому я не понимаю, почему оно работает? Объяснение Microsoft для атрибута «Создать файлы / запись данных» : «Для папок указывает, может ли пользователь создавать файлы в папке. Для файлов указывает, может ли пользователь изменять файлы или перезаписывать данные». Там нет упоминания о возможности создания подпапок внутри папки?

В общем, я достиг того, что намеревался сделать, но не понимаю, почему это работает?

Фицрой
источник
Содержимое файла NTFS является «атрибутом»; а именно по умолчанию безымянный атрибут данных и, возможно, один или несколько именованных атрибутов данных.
kreemoweet
Также смотрите хороший ответ здесь: superuser.com/a/1145363/132727
CrazyTim

Ответы:

7

В процессе проб и ошибок я обнаружил, что, не предоставляя «Атрибуты записи», это предотвращает изменение / удаление существующих файлов пользователем (что я и хочу). Тем не менее, мне бы очень хотелось объяснить, почему именно это работает.

Это функция того, как именно происходит изменение файла. Когда вы изменяете файл, операционная система фактически не изменяет файл, который вы редактируете. Он заменяет редактируемый вами файл измененной копией. Таким образом, по существу, модификация файла берет копию исходного файла, загружает ее в память (где вы ее изменяете), удаляет исходный файл и создает новый файл с тем же именем в том же месте. Вот почему Deleteразрешения NTFS необходимы для изменения файлов - фактически, если вы проверяете Advanced permissionsобъект NTFS, Modifyразрешения нет - модификация - это на самом деле просто удаление и запись.

Итак, чтобы создать эту новую копию файла, он должен записать атрибуты файла этого нового файла ... и, конечно, для записи атрибутов требуется Write attributesразрешение NTFS. Вот почему вы не можете изменить файл без Write attributesразрешения NTFS.

В частности, благодаря чат с Фицрой , тем атрибут файла NTFS , которая должна быть написана под контексте безопасности пользователя (что не может быть, без Write Attributesразрешения), при изменении файла, но не при создании совершенно нового, будет быть файла LastModificationTime. Это часть Standard Informationатрибута, по словам одного из разработчиков Microsoft Core Team .

HopelessN00b
источник
1
«Именно поэтому для изменения файлов требуются разрешения на удаление NTFS - фактически, если вы проверяете расширенные разрешения для объекта NTFS, разрешения на изменение нет - изменение на самом деле является просто удалением и записью». Можете ли вы подтвердить это какими-либо фактами или ссылками? Потому что в ходе дальнейшего тестирования я обнаружил, что для изменения содержимого простого текстового файла (с помощью блокнота) я просто добавил следующие разрешения: запись атрибутов, запись расширенных атрибутов и создание папок / добавление данных. Я принимаю, что разные программы могут демонстрировать различное поведение при изменении файла ...
Фицрой
... однако, я думаю, что этот тест доказывает, что «Удалить» не требуется.
Фицрой
«Это функция того, как именно происходит изменение файла. Когда вы изменяете файл, операционная система фактически не изменяет файл, который вы редактируете. Он заменяет файл, который вы редактируете, на копию, которую вы изменили. Итак, по сути, модификация файла берет копию исходного файла, загружает ее в память (где вы ее изменяете), удаляет исходный файл и создает новый файл с тем же именем в том же месте ». - Э-э, довольно вводит в заблуждение и грубо неточно на многих технических уровнях .
user2864740
3

Это правда: отсутствие разрешения «Запись атрибутов» приводит к тому, что пользователь не может изменять свои файлы. И согласно документации Microsoft это не имеет смысла. Но изменение файла не подразумевает его удаления и восстановления. Когда приложение открывает файл для модификации, операционная система не удаляет файл. Но операционная система блокирует файл, чтобы предотвратить одновременное изменение. Я предполагаю, что блокировка файла подпадает под понятие «изменение атрибутов файла». Таким образом, неспособность изменить атрибуты приводит к невозможности изменить файл.

Что касается второй части вашего вопроса, я не могу воспроизвести это. Есть два разных разрешения, которые применяются к папке: «Создать файлы / ...» и «Создать папки / ...», и они работали согласно документации во время моих тестов.

drk.com.ar
источник
Drk - Просто перевариваю твой ответ. К вашему сведению - я пропустил разрешение в своем вопросе, я должен был также перечислить «Читать расширенные атрибуты». Без этого разрешения я обнаружил, что пользователи не могут просматривать содержимое файла (они получают ошибку «Доступ запрещен»). Я обновил свой вопрос соответственно.
Фицрой
Хорошо, для моего теста я предположил, что вы тоже даете это разрешение. Я обнаружил, что блокнот не может изменить файл даже с предоставленным разрешением «... / запись данных». Вот еще одна вещь, которую стоит отметить: разрешение на запись данных и добавление данных зависит от того, как ваше приложение открывает файл для изменения. Скорее всего, в блокноте открываются файлы для добавления данных всегда, даже если в этом нет необходимости.
drk.com.ar
Что касается второй части вашего вопроса, я не могу воспроизвести это. Есть два разных разрешения, которые применяются к папке: «Создать файлы / ...» и «Создать папки / ...», и они работали согласно документации во время моих тестов. Вы совершенно правы, моя ошибка, я думал, что выбрал только «Создать файлы / Запись данных», но у меня также был выбран «Создать папки / Добавить данные».
Фицрой