Предотвращение удаления и изменения файла

#c# #file #locking

#c# #файл #блокировка

Вопрос:

У меня есть текстовый файл. Мне нужно следующее:
1. Запретить удаление файла.
2. Предотвратите внесение изменений в файл.
Даже если программа не запущена. Возможно ли это? Может быть, с помощью сервиса?
Пользователи приложения могут добавлять новые данные в файл.

Общие сведения: мне нужно предотвратить удаление моего файла и любые изменения (за пределами моего приложения).
Спасибо.

Комментарии:

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

2. Это не проблема программирования. Вы не решите эту проблему, написав программу или службу Windows. Вместо этого вы решаете проблему с помощью групповой политики и других параметров безопасности. Windows поставляется с готовой поддержкой подобных вещей, гораздо менее хрупкой, чем все, что вы могли бы реализовать самостоятельно. Задавайте вопросы о тех, кто находится в ошибке сервера .

3. Это не ваша система, это чья-то другая, они принимают решения по своей собственной системе. Вы можете назначить ACL только файлу, но пользователь всегда может удалить его с правами администратора. Зачем вам нужно предотвращать изменения в файле?

4. В вашем вопросе отсутствует самая важная часть. Кому запретить удаление файла? Это вопрос безопасности, но вы не учли угрозу и злоумышленника. Кроме того, помните: ваше приложение выполняется от имени вашего пользователя. Пользователь несет ответственность; приложение является его слугой, а не хозяином. Если ваш пользователь хочет уничтожить ваш файл, это их дело; позвольте им. Они владеют машиной, а не вы.

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

Ответ №1:

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

Если приложение не запущено, оно не сможет защитить сам файл. Запуск приложения как службы позволил бы ему продолжать работать, что позволило бы ему выполнять некоторые защитные действия над файлом, но вам понадобилось бы второе приложение для взаимодействия с пользователем, и вы также выполняли бы работу операционной системы. Повысить права внутри приложения C # намного проще, чем пытаться делать то, что вы делаете, с помощью кода.

Комментарии:

1. Это верно лишь частично. Привилегированные пользователи (администраторы, суперпользователи) смогут удалить файл независимо от установленных разрешений. Та же проблема, хотя, если вы создали службу, гарантирующую замену файла в случае удаления, привилегированные пользователи могут прекратить работу службы. Не существует надежного способа сделать это на 100%, но если вы будете помнить об этом при разработке своего решения, вы можете достичь приемлемого компромисса.

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

Ответ №2:

Вы можете использовать Windows RBS, чтобы гарантировать, что файл может быть изменен или удален только администраторами и конкретным системным пользователем, которого создает ваша программа и который может быть запущен в этом контексте.

НИКОГДА не блокируйте доступ администраторов к файлам; вы попадете на семь уровней ада от пользователей вашего приложения, которые не смогут удалить этот файл (и, следовательно, не смогут удалить папку установки) при удалении вашего приложения.