Можно ли ограничить права вызываемой внешней программы на чтение только файловых операций? - PullRequest
0 голосов
/ 09 апреля 2009

Я использую следующий код:

...
ProcessStartInfo processStartInfo = new ProcessStartInfo();
...
Process process = new Process();
process.StartInfo = processStartInfo;
bool processStarted = process.Start();
...

Возможно ли в .Net ограничить права вызываемой внешней программы на чтение только файловых операций?

Ответы [ 3 ]

2 голосов
/ 09 апреля 2009

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

При создании процесса возможность доступа к файлам действительно контролируется ОС. А именно с помощью различных токенов, связанных с процессом, и их соответствующих уровней доступа. Это концепция безопасности Win32.

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

Модель безопасности CLR вам не поможет. Конечно, вы можете поиграть и убедиться, что чисто управляемые процессы не могут получить доступ к файлам. Однако вы не можете гарантировать, что Process.Start действительно запускает управляемый процесс или что управляемый процесс, следовательно, не вызывает PInvoke в собственный код, который записывает в файл.

2 голосов
/ 09 апреля 2009

Лучший вариант, который я знаю в BCL, - запускать процесс под учетной записью пользователя с ограниченными учетными данными, используя эту перегрузку Process.Start ().

Для полного контроля вы можете использовать P / Invoke и вызывать CreateProcess , устанавливая атрибуты безопасности (в частности, дескриптор безопасности в атрибутах безопасности), чтобы соответствующим образом ограничивать процесс.

1 голос
/ 08 августа 2011

Если все сделано правильно, вы можете добавить SID DenyOnly к токену процесса, который используется для создания нового процесса через P / Invoke.

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