Запретить другим процессам и пользователям доступ к файлу - PullRequest
0 голосов
/ 04 мая 2018

У меня есть служба Windows, написанная на C #, работающая на машине, и она создает и использует несколько файлов. Есть ли способ запретить пользователю на машине, включая администраторов, связываться с этими файлами (перемещение, редактирование, переименование, удаление) из кода?

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

РЕДАКТИРОВАТЬ: Позвольте мне перефразировать базу вопросов и комментарии ниже. Есть ли способ настроить ACL таким образом, чтобы только моя служба могла получить доступ к файлам? Я также согласился бы, если бы только сервисы могли обращаться к файлам (я видел упоминание о группе безопасности «Все сервисы» в Microsoft Docs, но не могу найти ее в системе или в .net).

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Я не хочу постоянно открывать файлы

Но держать их открытыми - это хороший способ, который точно соответствует вашим намерениям и требованиям.

Пока речь идет не о сотнях и более, это кажется лучшим вариантом.

Другой способ - установить свойства безопасности (ACL), но это грязно и требует более высоких привилегий.

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

0 голосов
/ 04 мая 2018

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

В первой части я пытаюсь ответить непосредственно на ваш вопрос ( "Как предотвратить ..." ), но во второй части я попытался наметить другой подход (сделать ваше приложение устойчивым: сохранить резервное копирование).

Как предотвратить ...

Предполагая, что вы работаете в Windows, чтобы другие пользователи не связывались с ними, вы должны:

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

  • Изменить ACL на Запретить Full access на Users и Administrators группу. Лучше, если вы выберете вишню и просто оставите Read разрешения. По умолчанию Windows выбирает наиболее строгую политику, даже если пользователь принадлежит к двум группам, тогда это фактически остановит всех на запись этого файла (если вы также откажете разрешения Read, они даже не смогут видеть его содержимое, но см. позже).

  • Создайте специальную группу (с необходимыми разрешениями и только для них) с одним пользователем. Убедитесь, что пользователь не был автоматически добавлен в группу Users.
  • Измените ваше приложение, чтобы выдавать себя за этого пользователя при записи этих файлов. Если вы оставили разрешения Read на месте, тогда код для чтения не будет затронут.

Не забудьте проверить с разными версиями и выпусками Windows (HomeUsers постоянно подпрыгивает.) Если ваше приложение является службой Windows, то все может быть немного проще, см. комментарий eryksun .

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

Несколько очевидных недостатков:

  • Администратор ВСЕГДА может делать то, что он хочет, тогда они могут найти эти файлы и отменить разрешения. Я думаю (я не уверен), что System Installer имеет некоторые специальные привилегии, чтобы предотвратить это, но я не уверен (и я не могу представить, как это сделать).
  • Установка намного сложнее (и она вам понадобится, если у вас ее нет). Вы можете сделать это, когда приложение выполняется в первый раз, но тогда вам потребуются административные привилегии (только один раз, но, вероятно, хуже).
  • Ваш код более сложный.
  • Больше настроек означает больше вещей, которые могут пойти не так, сбалансируйте это с усилиями вашей команды технической поддержки.
  • Обновления (и работа службы технической поддержки) будут более сложными.
  • Пользователи с определенными привилегиями не будут затронуты (см. другой комментарий ), но это действительно хорошая вещь, и вам не следует каждый раз пытаться обойти это.

Резервное копирование - это ключ!

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

Я думаю, но я не знаю вашего конкретного варианта использования, что, возможно, вы подходите к проблеме с неправильной точки зрения. Если вы хотите помешать пользователю испортить ваши файлы данных (преднамеренно или нет), то вам нужен BACKUP . Сохраняйте копии в разных местах каждый раз, когда вы пишете их, пометьте их как hidden и живите счастливо. Если они не слишком большие, вы можете даже сохранить контент прямо в Реестре Windows . Для зашифрованных / хешированных / контрольных сумм ваше приложение может легко обнаружить, когда они повреждены или отсутствуют: просто восстановите резервную копию, и все готово.

0 голосов
/ 04 мая 2018

2 Другие варианты

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

  • Если все рассматриваемые файлы будут созданы вашим приложением, вы можете проверить параметры в CreateFile , где вы можете установить для параметров общего доступа значение 0x00000000, чтобы "Запретить другие процессы". от открытия файла или устройства, если они запрашивают удаление, чтение или запись ".

Если вы хотите использовать CreateFile Я думаю, вам придется pinvoke it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...