Разрешения на уровне приложения C # больше, чем у пользователя? - PullRequest
0 голосов
/ 31 августа 2009

Может ли пользователь schmoe_j запустить приложение, которое копирует файлы в каталог, в который schmoe_j не может записать?

Ответы [ 6 ]

2 голосов
/ 31 августа 2009

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

См. Добавление манифеста UAC к управляемому коду .

2 голосов
/ 31 августа 2009

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

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

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

1 голос
/ 31 августа 2009

Может ли он запустить приложение? Да. Он выдаст UnauthorizedAccessException при попытке скопировать эти файлы, но не раньше.

1 голос
/ 31 августа 2009

Приложение будет работать с правами пользователя, если пользователь не может этого сделать, приложение не может этого сделать.

ОДНАКО приложение может пытаться выдать себя за другого пользователя, и в этом случае оно сможет получить доступ к этому каталогу. Это вовлекло приложение, временно получающее права другого пользователя. именно так ASP.NET работает довольно часто.

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

Статья демонстрирующая это.

1 голос
/ 31 августа 2009

Я думаю, что обычно такой способ заключается в использовании службы (или приложения-службы), которая работает с повышенными правами, но с очень небольшой площадью поверхности и без графического интерфейса. Пользователь взаимодействует с приложением, работающим с более низкими разрешениями, которое будет делать то, что может делать учетная запись пользователя - помещать файлы в раскрывающуюся папку, записывать в базу данных и т. Д. Подумайте, IIS, MMC, TrustedInstaller и т. Д.

0 голосов
/ 31 августа 2009

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

Например, согласно MSDN, при вызове File.Create и File.Copy , UnauthorizedAccessException будет выброшено, если у вызывающей стороны нет необходимых разрешений.

...