2009-08-31 4 views
0

Может ли пользователь schmoe_j запускать приложение, которое копирует файлы в каталог, к которому не может писать schmoe_j?Разрешения на уровне приложения C#, превышающие пользовательские?

+0

Какая версия окон? Сетевой диск или локальная машина? Ответ может отличаться в зависимости от ответов на эти вопросы. –

+0

Windows Server 2003, на сетевом диске. – 2009-08-31 18:27:13

ответ

2

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

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

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

0

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

В качестве примера, в соответствии с MSDN, при вызове File.Create и File.Copy, UnauthorizedAccessException будет сгенерирован, когда абонент не имеет необходимые разрешения.

2

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

См. Adding a UAC Manifest to Managed Code.

+1

Vista-специфический, но хороший ответ. – dnord

1

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

1

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

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

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

Article, демонстрирующий это.

1

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

Смежные вопросы