C # создайте файл так, чтобы только пользователь, создавший файл, имел к нему доступ - PullRequest
3 голосов
/ 03 мая 2011

Мне нужно создать файл, который будет использоваться для хранения конфиденциальных данных;цель состоит в том, чтобы получить ACL, который ограничивает доступ к домену \ пользователю, работающему во время создания.Но по умолчанию, по-видимому, также разрешается неограниченный доступ для SYSTEM и для администратора.

Два вопроса: во-первых, есть ли что-то в Windows или .NET, которое ужасно ломается, если SYSTEM и Administrator отказывают в доступе к файлу?

Во-вторых, из C # как я могу получить нужные разрешения?Я просто делаю File.Create ("myFile.dat") прямо сейчас;Ясно, что версия API не та, которую я должен использовать.Я нашел очень сложную альтернативу, но, похоже, предполагается, что я знаю текущее доменное имя и имя пользователя;это единственный способ сделать это?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 03 мая 2011

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

посмотрите на четвертую перегрузку для System.Io.File.Create. Четвертый аргумент - это объект System.Security.AccessControl.FileSecurity. Это должно сработать.

2 голосов
/ 03 мая 2011

Насколько я знаю, это невозможно.

Если я не ошибаюсь, СИСТЕМА имеет доступ ко всему, и точка. Я уверен, что в этом все дело. Администраторы схожи по мощности, они не могут быть очень хорошими администраторами, если они даже не могут получить доступ к файлам, которые могут иметь те, у кого есть меньше разрешений (конечно, существуют исключения). Но если SYSTEM не удалось получить доступ к файлу, как будут выполняться какие-либо операции с ним?

Думая об этом логически, я бы сказал: «Нет, это невозможно». Хотя возможно и то, что я неверен.

1 голос
/ 03 мая 2011

Я предлагаю вам проверить Зашифрованную Файловую Систему. Он встроен в XP Pro, Vista и Windows 7. (а также в серверные продукты.)

Это позволяет вам делать именно то, что вы пытаетесь сделать. Только пользователь, которому вы зашифровали файл (то есть учетные данные, связанные с запущенным приложением), сможет получить доступ к рассматриваемому файлу. Даже локальные администраторы не могут прочитать файл, независимо от разрешений файловой системы.

Вы можете использовать System.IO.File.Encrypt / Decrypt для выполнения операции. Самое приятное, что пользователь может просто дважды щелкнуть файл, чтобы открыть его. Нет пароля Пользовательское приложение не требуется.

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

0 голосов
/ 03 мая 2011

Почему бы вам не использовать метод симметричного шифрования и сохранить ключ для каждого пользователя в базе данных или реестре?

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