Caspol.exe (средство настройки политики управления доступом для кода)

Программа для настройки политики разграничения доступа кода (Caspol.exe) позволяет пользователям и администраторам изменять политику безопасности на уровне компьютера, пользователя и предприятия.

Важно!

Начиная с платформа .NET Framework 4, Caspol.exe не влияет на политику CAS, если <элемент legacyCasPolicy> не имеет значение true. Все параметры, отображаемые или изменяемые программой CasPol.exe, будут влиять только на приложения, для которых явно задано использование политики CAS.

Примечание

Безопасность доступа к коду (CAS) является устаревшей во всех версиях платформа .NET Framework и .NET. В последних версиях .NET заметки CAS не учитываются и при использовании API, связанных с CAS, возникают ошибки. Разработчикам следует искать альтернативные способы выполнения задач безопасности.

Примечание

На 64-разрядных компьютерах присутствуют и 64-разрядная, и 32-разрядная версии политики безопасности. Чтобы проверить возможность применения политики к 32-разрядным и 64-разрядным приложениям, запустите 32-разрядную и 64-разрядную версии программы Caspol.exe.

Средство настройки политики управления доступом для кода автоматически устанавливается вместе с .NET Framework и Visual Studio. Caspol.exe можно найти в %windir%\Microsoft.NET\Framework\version в 32-разрядных системах или %windir%\Microsoft.NET\Framework64\version в 64-разрядных системах. (Например, в 64-разрядной системе расположение для .NET Framework 4 будет следующим: %windir%\Microsoft.NET\Framework64\v4.030319\caspol.exe.) Если на компьютере одновременно работает несколько версий .NET Framework, на нем могут быть установлены разные версии программы. Программу можно запустить из каталога установки. Однако рекомендуется использовать командную строку разработчика Visual Studio или PowerShell разработчика Visual Studio, для которого не требуется переходить в папку установки.

В командной строке введите следующее.

Синтаксис

caspol [options]

Параметры

Параметр Описание
-addfulltrustassembly_file

или

-afassembly_file
Добавляет сборку, реализующую настраиваемый объект безопасности (например, настраиваемое разрешение или настраиваемое условие членства), в список сборок с полным доверием для заданного уровня политики. Аргумент assembly_file задает добавляемую сборку. Этот файл должен быть подписан строгим именем. Для подписи сборки строгим именем используется программа строгих имен (Sn.exe).

При добавлении в политику набора разрешений, который содержит настраиваемое разрешение, сборка, реализующая настраиваемое разрешение, должна быть добавлена в список полного доверия этого уровня политики. Сборки, реализующие настраиваемые объекты безопасности (например, настраиваемые группы кодов или условия членства), применяемые в политике безопасности (например, политике компьютера), должны быть добавлены в список сборок с полным доверием. Осторожностью: Если сборка, реализуя пользовательский объект безопасности, ссылается на другие сборки, необходимо сначала добавить сборки, на которые есть ссылки, в список сборок с полным доверием. Настраиваемые объекты безопасности, созданные с помощью Visual Basic, Visual C++ или JScript, ссылаются на "Microsoft.VisualBasic.dll", "Microsoft.VisualC.dll" и "Microsoft.JScript.dll" соответственно. По умолчанию эти сборки не входят в список сборок с полным доверием. Нужно добавить соответствующую сборку в список полностью доверенных, прежде чем добавлять пользовательский объект безопасности. Невыполнение этого требования нарушит целостность системы безопасности, в результате чего ни одна из сборок не сможет быть загружена. В этом случае параметр Caspol.exe -all -reset не исправит безопасность. Для ее исправления необходимо вручную редактировать файлы безопасности для удаления объекта безопасности.
-addgroup {parent_label | parent_name} mship pset_name [флаги]

или

-ag {parent_label | parent_name} mship pset_name [флаги]
Добавляет новую группу кода в иерархию групп кода. Можно задать parent_label или parent_name. Аргумент parent_label указывает метку (например, 1. или 1.1.) группы кода, которая является родительской для добавляемой группы кода. Аргумент parent_name задает имя группы кода, являющейся родительской по отношению к добавляемой группе кода. Поскольку аргументы parent_label и parent_name взаимозаменяемы, программа Caspol.exe должна их различать. Поэтому parent_name не может начинаться с числа. Кроме того, аргумент parent_name может состоять только из символов A–Z, 0–9 и символов подчеркивания.

Аргумент mship задает условие членства для новой группы кода. Дополнительные сведения см. в таблице аргументов mship ниже.

Аргумент pset_name задает имя набора разрешений, связанного с новой группой кода. Кроме того, для новой группы можно задать один или несколько аргументов flags. Дополнительные сведения см. в таблице аргументов flags ниже.
-addpset {psfile | psfile pset_name}

или

-ap {named_psfile | psfilepset_name}
Добавляет в политику новый именованный набор разрешений. Набор разрешений должен быть создан на языке XML и храниться в XML-файле. Если XML-файл содержит имя набора разрешений, необходимо указать только имя файла (psfile). Если XML-файл не содержит имя набора разрешений, необходимо указать имя XML-файла (psfile) и имя набора разрешений (pset_name).

Все разрешения, используемые в наборе разрешений, должны быть определены в сборках, содержащихся в глобальном кэше сборок.
-a[ll] Указывает, что параметры, следующие за этим параметром, применяются к политикам компьютера, пользователя и предприятия. Параметр -all всегда относится к политике текущего пользователя, вошедшего в систему. Чтобы сослаться на политику пользователя, отличного от текущего, задайте параметр -customall.
-chggroup {label |name} {mship | pset_name |

Флаги}

или

-cg {label |name} {mship | pset_name |

Флаги}
Изменяет условие членства в группе кода, набор разрешений или параметры флагов exclusive, levelfinal, name или description. Можно задать аргумент label или name. Аргумент label указывает метку (например, 1. или 1.1.) группы кода. Аргумент name задает имя изменяемой группы кода. Поскольку аргументы label и name взаимозаменяемы, программа Caspol.exe должна их различать. Поэтому аргумент name не может начинаться с цифры. Кроме того, аргумент name может состоять только из символов A–Z, 0–9 и символов подчеркивания.

Аргумент pset_name задает имя набора разрешений, связываемого с группой кода. Сведения об аргументах mship и flags см. в таблицах ниже.
-chgpsetpsfile pset_name

или

-cppsfile pset_name
Изменяет именованный набор разрешений. Аргумент psfile предоставляет новое определение для набора разрешений; это сериализованный файл набора разрешений в формате XML. Аргумент pset_name задает имя набора разрешений, который необходимо изменить.
-customallpath

или

-capath
Указывает, что параметры, следующие за этим параметром, применяются к политикам компьютера, предприятия и настраиваемым политикам указанного пользователя. Требуется задать расположение файла конфигурации безопасности пользователя в аргументе path.
-cu[stomuser] path Позволяет администрировать настраиваемую политику пользователя, которая не принадлежит пользователю, от имени которого в настоящее время выполняется Caspol.exe. Требуется задать расположение файла конфигурации безопасности пользователя в аргументе path.
-enterprise

or

-en
Указывает, что все параметры, следующие за этим параметром, применяются к политике уровня предприятия. Пользователи, не являющиеся администраторами предприятия, не имеют достаточных прав на изменение корпоративной политики, хотя и могут ее просматривать. В сценариях, отличных от предприятия, эта политика по умолчанию не влияет на политику компьютера и пользователя.
-e[xecution] {on | off} Включает и отключает механизм проверки разрешений до выполнения кода. Примечание. Этот параметр не поддерживается в .NET Framework 4 и более поздних версиях.
-f[orce] Отключает проверку инструмента на самоуничтожение и изменяет политику в соответствии с заданными пользователем параметрами. Как правило, Caspol.exe проверяет, не будут ли изменения политики препятствовать правильной работе самого Caspol.exe; Если это так, Caspol.exe не сохраняет изменение политики и выводит сообщение об ошибке. Чтобы принудительно внести изменения в политику, даже если они нарушат работу программы Caspol.exe, следует указать параметр -force.
-h[elp] Отображает синтаксис команд и параметров программы Caspol.exe.
-l[ist] Отображает иерархию групп кода и наборы разрешений для уровней указанного компьютера, пользователя, предприятия или для всех уровней политик. Caspol.exe сначала отображает метку группы кода, за которой следует имя, если оно не равно NULL.
-listdescription

or

-ld
Отображает список описаний всех групп кода для указанного уровня политики.
-listfulltrust

or

-lf
Отображает список сборок с полным доверием для указанного уровня политики.
-listgroups

or

-lg
Отображает группы кода для указанного уровня политики или всех уровней политики. Caspol.exe сначала отображает метку группы кода, за которой следует имя, если оно не равно NULL.
-listpset или -lp Отображает наборы разрешений для указанного уровня политики или всех уровней политики.
-m[achine] Указывает, что все параметры, следующие за этим параметром, применяются к политике уровня компьютера. Пользователи, которые не являются администраторами, не имеют достаточных прав на изменение политики компьютера, хотя они могут просматривать ее. Для администраторов параметр -machine задан по умолчанию.
-polchgprompt {on | off}

или

-pp {on | off}
Разрешает или запрещает выдачу запроса, появляющегося при запуске программы Caspol.exe с параметрами, которые могут изменить политику.
-quiet

or

-q
Временно блокирует вывод запроса, отображаемого при выборе параметров, которые могут изменить политику. Это не влияет на вывод запроса при внесении глобальных изменений. Этот параметр следует использовать только для отдельных команд, чтобы не допустить вывод запроса для всех команд программы Caspol.exe.
-r[ecover] Восстанавливает политику из файла резервной копии. При изменении политики старая политика программы Caspol.exe сохраняется в файле резервной копии.
-remfulltrustassembly_file

или

-rfassembly_file
Удаляет сборку из списка сборок с полным доверием для уровня политики. Эту операцию следует выполнить, если политика больше не использует набор разрешений, содержащий настраиваемое разрешение. Однако следует удалить сборку, реализующую пользовательское разрешение, из полного списка доверия только в том случае, если сборка не реализует другие пользовательские разрешения, которые по-прежнему используются. При удалении сборки из списка следует удалить все сборки, которые от нее зависят.
-remgroup {label |name}

или

-rg {label | name}
Удаляет группу кода, заданную меткой или именем. Если указанная группа кода имеет дочерние группы кода, они также будут удалены.
-rempsetpset_name

или

-rppset_name
Удаляет указанный набор разрешений из политики. Удаляемый набор разрешений задается аргументом pset_name. Caspol.exe удаляет набор разрешений, только если он не связан с какой-либо группой кода. Наборы разрешений по умолчанию (встроенные) нельзя удалить.
-reset

or

-rs
Восстанавливает политику в состояние по умолчанию и сохраняет ее на диске. Этот параметр полезен, если измененную политику проще не исправлять, а создать заново из состояния по умолчанию. Возврат к политике по умолчанию также целесообразен при создании файлов конфигурации безопасности на основе файлов, используемых по умолчанию. Дополнительные сведения см. в разделе Ручная настройка файлов конфигурации безопасности.
-resetlockdown

or

-rsld
Возвращает политику к более строгой версии состояния по умолчанию и сохраняет ее на диске; создает резервную копию предыдущей политики компьютера и сохраняет ее в файле с именем security.config.bac. Заблокированная политика похожа на политику по умолчанию за тем исключением, что эта политика не предоставляет разрешений коду из зон Local Intranet, Trusted Sites и Internet, а соответствующие группы кода не имеют дочерних групп кода.
-resolvegroupassembly_file

или

-rsgassembly_file
Отображает группы кодов, к которым принадлежит указанная сборка (assembly_file). По умолчанию отображаются политики уровня компьютера, пользователя и предприятия, к которым принадлежит сборка. Чтобы отобразить только один уровень политики, задайте параметр -machine, -user или -enterprise.
-resolvepermassembly_file

или

-rspassembly_file
Отображает все разрешения, которые будут предоставлены сборке при указанном уровне политики безопасности или уровне политики безопасности по умолчанию, если выполнение сборки будет разрешено. Сборка задается аргументом assembly_file. Если указан параметр -all, разрешения вычисляются на основе политики пользователя, компьютера и предприятия; в противном случае применяются правила поведения по умолчанию.
-s[ecurity] {on | off} Включает и выключает управление доступом для кода. Параметр -s off не отключает безопасность на основе ролей. Примечание. Этот параметр не поддерживается в .NET Framework 4 и более поздних версиях. Осторожностью: Если безопасность доступа к коду отключена, все требования к доступу к коду будут выполнены успешно. При выключении системы управления доступом для кода система становится уязвимой для атак таких вредоносных программ, как вирусы и "черви". Отключение системы безопасности повышает дополнительную производительность, но ее следует выполнять только в том случае, если были приняты другие меры безопасности, чтобы гарантировать, что общая безопасность системы не нарушена. К другим мерам предосторожности, связанным с безопасностью, относится отключение от общедоступных сетей, физическая защита компьютера и т.п.
-u[ser] Указывает, что все параметры, следующие за этим параметром, применяются к политике уровня пользователя для пользователя, от имени которого запущена программа Caspol.exe. Для пользователей, не являющихся администраторами, параметр -user задан по умолчанию.
-? Отображает синтаксис команд и параметров программы Caspol.exe.

Аргумент mship, определяющий условия членства в группе кода, может применяться с параметрами -addgroup и -chggroup. Каждый аргумент mship реализуется как класс .NET Framework. Чтобы задать аргумент mship, следует использовать один из приведенных ниже аргументов.

Аргумент Описание
-allcode Задает весь код. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.AllMembershipCondition.
-appdir Задает каталог приложения. Если в качестве условия членства задано -appdir, URL-свидетельство кода сравнивается со свидетельством каталога приложения этого кода. Если значения свидетельств совпадают, условие членства выполнено. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.ApplicationDirectoryMembershipCondition.
-customxmlfile Добавляет настраиваемое условие членства. Обязательный аргумент xmlfile задает XML-файл, содержащий XML-сериализацию настраиваемого условия членства.
-hash hashAlg {-hexhashValue-file | assembly_file } Задает код с указанным хэшем сборки. Чтобы использовать хэш в качестве условия членства в группе кода, укажите значение хэша или файл сборки. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.HashMembershipCondition.
-pub { -certcert_file_name |

-filesigned_file_name | hex hex_string }
Задает код указанного издателя программного обеспечения, определенного файлом сертификата, подписью файла или шестнадцатеричным представлением сертификата X509. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.PublisherMembershipCondition.
-sitewebsite Задает код с указанным исходным веб-сайтом. Пример:

-site** www.proseware.com

Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.SiteMembershipCondition.
-strong -filefile_name {name-noname | } {version-noversion | } Задает код с указанным строгим именем (определяется по имени файла), имя сборки в виде строкового значения и версию сборки в формате основная.вспомогательная.сборка.редакция. Пример:

-strong -file myAssembly.exe myAssembly 1.2.3.4

Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.StrongNameMembershipCondition.
URL-адрес -url Задает код, полученный с указанного URL-адреса. URL-адрес должен включать протокол, например http:// или ftp://. При необходимости задать несколько сборок с определенного URL-адреса используется подстановочный знак (*). Примечание: Так как URL-адрес можно идентифицировать с помощью нескольких имен, использование URL-адреса в качестве условия членства не является безопасным способом определения идентификатора кода. Там, где это возможно, используйте условие членства строгого имени, условие членства издателя или условие членства хэша.

Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.UrlMembershipCondition.
-zonezonename Задает код с указанной исходной зоной. Аргумент zonename может принимать одно из следующих значений: MyComputer, Intranet, Trusted, Internet или Untrusted. Дополнительные сведения об этом условии членства см. в разделе с описанием класса ZoneMembershipCondition.

Аргумент flags, который может использоваться с параметрами -addgroup и -chggroup, определяется с использованием одного из следующих аргументов.

Аргумент Описание
-description "description" В сочетании с параметром -addgroup задает описание добавляемой группы кода. В сочетании с параметром -chggroup задает описание редактируемой группы кода. Аргумент description должен быть заключен в двойные кавычки.
-exclusive {on|off} Если задано значение включено, указывает, что только набор разрешений, связанный с добавляемой или изменяемой группой кода, учитывается, если некоторый код соответствует условию членства в группе кода. С аргументом off указывает, что должны обрабатываться наборы разрешений всех соответствующих групп кода на данном уровне политики.
-levelfinal {on|off} С аргументом on исключает из рассмотрения все уровни политики ниже того, на котором расположена добавляемая или редактируемая группа кода. Этот параметр обычно используется на уровне политики компьютера. Например, если этот флаг указан для группы кода на уровне политики компьютера, политика уровня пользователя не будет вычислена и применена к коду, удовлетворяющему условию членства в этой группе.
-name "name" В сочетании с параметром -addgroup задает имя скрипта для добавляемой группы кода. В сочетании с параметром -chggroup задает имя скрипта для редактируемой группы кода. Аргумент name должен быть заключен в двойные кавычки. Аргумент name не может начинаться с цифры и должен состоять только из символов A–Z, 0–9 и символов подчеркивания. К группам кода можно обращаться по этому аргументу name вместо их цифровой метки. Кроме того, аргумент name очень удобен в работе со сценариями.

Примечания

Политика безопасности задается на трех уровнях: компьютера, пользователя и предприятия. Набор разрешений, получаемый сборкой, определяется пересечением наборов разрешений, предоставляемых этими тремя уровнями политики. Каждый уровень политики представлен иерархической структурой групп кода. У каждой группы кода имеется условие членства, по которому определяется принадлежность кода к группе. С каждой группой кода также связан именованный набор разрешений. Этот набор разрешений задает разрешения, предоставляемые исполняющей средой коду, который удовлетворяет условию членства. Иерархия групп кода и связанный с ней именованный набор разрешений определяют и поддерживают уровни политики безопасности. Чтобы задать уровень политики безопасности, используются параметры -user, -customuser, -machine и -enterprise.

Дополнительные сведения о политике безопасности и предоставлении коду разрешений исполняющей средой см. в разделе Управление политикой безопасности.

Ссылки на группы кода и наборы разрешений

Параметр -list, отображающий список групп кода с цифровыми метками (1, 1.1, 1.1.1 и т. д.), упрощает создание ссылок на группы кода в иерархии. Другие функции командной строки, работающие с группами кода, также используют цифровые метки для ссылки на группы кода.

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

Поведение программы Caspol.exe

Все параметры, кроме -s[ecurity] {on | off}, используют версию платформа .NET Framework, с которым был установлен Caspol.exe. Изменения, внесенные программой Caspol.exe, которая установлена с версией X среды выполнения, будут влиять только на эту версию. В другие параллельные установки среды выполнения, при их наличии, изменения вноситься не будут. Если программа Caspol.exe запущена из командной строки в каталоге, отличном от каталога среды выполнения требуемой версии, программа выполняется из каталога первой версии среды выполнения в пути (обычно это каталог последней установленной версии).

Параметр -s[ecurity] {on | off} является операцией на уровне компьютера. При отключении управления доступом для кода отключается проверка безопасности для всего управляемого кода и всех пользователей компьютера. Проверки безопасности отключаются для всех установленных на компьютере параллельных версий .NET Framework, если они имеются. Хотя параметр -list и сообщает о том, что система безопасности отключена, никаких других признаков, по которым другие пользователи могли бы узнать об этом, не существует.

При запуске программы Caspol.exe пользователем без прав администратора все изменения вносятся в политику уровня пользователя, если не задан параметр -machine. При выполнении программы Caspol.exe администратором все изменения вносятся в политику уровня компьютера, если не задан параметр -user.

Для правильной работы программе Caspol.exe требуется набор разрешений, аналогичный Everything. Защитный механизм программы позволяет избежать внесения в политику изменений, препятствующих работе программы. При попытке внесения таких изменений будет выдано уведомление о том, что изменения не были внесены, так как они нарушат работу программы. Этот защитный механизм для данной команды можно отключить с помощью параметра –force .

Ручная настройка файлов конфигурации безопасности

Трем уровням политики безопасности (уровни пользователя, компьютера, предприятия), поддерживаемым программой Caspol.exe, соответствуют три файла конфигурации безопасности. Эти файлы создаются на диске только в том случае, если программа Caspol.exe изменяет политики уровня компьютера, пользователя или предприятия. С помощью параметра -reset можно сохранять установленную по умолчанию политику безопасности на диск, если это необходимо.

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

Примеры

-addfulltrust

Допустим, что в политику компьютера был добавлен набор разрешений с настраиваемым разрешением. Настраиваемое разрешение реализовано в программе MyPerm.exe. Программа MyPerm.exe ссылается на классы программы MyOther.exe. Обе сборки должны быть добавлены в список сборок с полным доверием. Чтобы добавить сборку MyPerm.exe в список сборок с полным доверием политики компьютера, используется следующая команда.

caspol -machine -addfulltrust MyPerm.exe

Чтобы добавить сборку MyOther.exe в список сборок с полным доверием политики компьютера, используется следующая команда.

caspol -machine -addfulltrust MyOther.exe

-addgroup

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

caspol -machine -addgroup 1.  -zone Internet Execution

Следующая команда добавляет дочернюю группу кода, которая предоставляет разрешения локальной интрасети для действий share \\netserver\netshare.

caspol -machine -addgroup 1. -url \\netserver\netshare\* LocalIntranet

-addpset

Следующая команда добавляет набор разрешений Mypset в политику пользователя.

caspol -user -addpset Mypset.xml Mypset

-chggroup

Следующая команда изменяет набор разрешений в политике пользователя группы кода с меткой 1.2. на набор разрешений Execution.

caspol -user -chggroup 1.2. Execution

Следующая команда изменяет условие членства в политике по умолчанию группы кода с меткой 1.2.1. и изменяет параметр флага exclusive. В качестве условия членства задано происхождение кода из зоны Internet и наличие включенного флага exclusive.

caspol -chggroup 1.2.1. -zone Internet -exclusive on

-chgpset

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

caspol -chgpset Mypset newpset.xml

-force

Следующая команда связывает корневую группу кода (метка 1) политики пользователя с набором разрешений Nothing. Выполнение этой команды препятствует работе программы Caspol.exe.

caspol -force -user -chggroup 1 Nothing

-recover

Следующая команда восстанавливает последнюю сохраненную политику уровня компьютера.

caspol -machine -recover

-remgroup

Следующая команда удаляет группу кода с меткой 1.1. Если у этой группы кода имеются дочерние группы кода, эти группы также будут удалены.

caspol -remgroup 1.1.

-rempset

Следующая команда удаляет набор разрешений Execution из политики пользователя.

caspol -user -rempset Execution

Следующая команда удаляет набор разрешений Mypset из политики уровня пользователя.

caspol -rempset MyPset

-resolvegroup

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

caspol -machine -resolvegroup myassembly

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

caspol -customall "c:\config_test\security.config" -resolvegroup myassembly

-resolveperm

Следующая команда вычисляет разрешения для сборки testassembly на основе политик уровня компьютера и пользователя.

caspol -all -resolveperm testassembly

См. также