Почему этот пример Code Access Security не работает?

Я знаю, что CAS имеет ограниченную ценность, но я все равно хочу узнать об этом.

Я не понимаю, какое поведение я вижу: CAS по умолчанию не работает вообще в моей обычной среде.

Возьмите этот пример класса:

using System;
using System.Security;
using System.Security.Permissions;

namespace CASNotWorkingExample
{
    class Program
    {
        static void Main(string[] args)
        {
            FileIOPermission perm = new FileIOPermission(PermissionState.Unrestricted);

            if (SecurityManager.IsGranted(perm))
                Console.WriteLine("granted");
            else
                Console.WriteLine("denied");

            Console.ReadKey();
        }
    }

}

Я строю это и ставлю exe, CASNotWorkingExample.exeна другом компьютере (IP-адрес 192.168.1.101) в общей папке "ненадежный". Затем я запускаю его из командной строки без прав администратора, используя \\192.168.1.101\untrusted\CASNotWorkingExample.exe, ожидая его возвращения "отказано". Это не; он возвращает "предоставлено".

Windows знает, что имеет дело с удаленным EXE сомнительной безопасности. Когда я запускаю ту же команду из диалогового окна "Пуск" меню "Пуск", я получаю обычное предупреждение системы безопасности "Не удалось проверить издателя. Вы уверены, что и т. Д. И т. Д.". Так что это не то, чтобы ошибочно думать, что исполняемый файл работает на локальной машине и неправильно назначает зону.

Более того, когда я смотрю на тот же самый exe-файл с помощью инструмента настройки.NET 2.0 (щелкните правой кнопкой мыши "Политика безопасности времени выполнения, выберите" Оценить сборку..."), я вижу, что.NET только назначает разрешения Internet_Zone для сборки, Эти разрешения НЕ включают FileIOPermission (изолированное хранилище является его собственным разрешением).

http://img5.imageshack.us/img5/2256/casperms.jpg

Данные, которые могут быть полезны для кого-то другого, но до сих пор не были для меня:

  • Я столкнулся с этим, работая над книгой MS Press для экзамена MCTS 70-536. Глава 11 посвящена CAS; Урок 1 / Пример 1 терпит неудачу для меня, в значительной степени, как описано выше. То, что вы видите здесь, является урезанным вариантом этого.
  • Я проверил, что такой EXE-файл действительно может записывать на диск, т.е. проверка IsGranted, вероятно, правильная.
  • Две машины работают под управлением Vista SP1 и WinXP. Поведение одинаково независимо от того, какой клиент, а какой файловый сервер, так что это не Vista.
  • Поведение идентично при работе от имени обычного непривилегированного пользователя и от имени администратора.
  • Не работает в домене AD.
  • То же имя пользователя и пароль на клиенте и файловом сервере, поэтому я могу получить доступ к файлу без необходимости использования net use предоставить полномочия.

Я уверен, что это будет один из тех "arrrgh" моментов... Чего мне не хватает?

2 ответа

Решение

Способ изменения заключается в том, что при запуске управляемого exe появляется новое свидетельство. Когда exe-файл запускается из Win32 CreateProcess API, непосредственно управляемому exe предоставляется полное доверие.

Конечно, инструмент конфигурации.net не запускает exe, а просто проверяет его. Это означает, что свидетельство отличается и влияет на назначенную ему группу кодов. Это, в свою очередь, влияет на разрешения.

Довольно запутанно.

Более подробную информацию можно найти здесь:

MSDN социальной

Блог Брэда Абрамса

Я не гуру CAS, но я подозреваю, что это может быть связано с изменением в.NET 3.5 SP1, которое позволяет коду с общего сетевого ресурса работать как Full Trust.

Изменить: Брэд Абрамс утверждает, что перекомпиляция / цель не нужна, чтобы воспользоваться этим. Я бы предположил, что он работает так же в обратном направлении - при таргетинге 2.0 вы не получите прежнего поведения, если на вашей машине установлен 3.5 SP1.

Существующее приложение не нужно перекомпилировать или изменять каким-либо образом, чтобы воспользоваться этим. Ваши текущие приложения 2.0 будут просто работать, вам не нужно нацеливать что-то новое в 3.5..

Я предполагаю, что новая установка (VM) только с 2.0 FX может быть в состоянии устранить это как причину.

Другие вопросы по тегам