Caspol.exe (средство настройки политики управления доступом для кода)
Программа для настройки политики разграничения доступа кода (Caspol.exe) позволяет пользователям и администраторам изменять политику безопасности на уровне компьютера, пользователя и предприятия.
Внимание
Начиная с платформа .NET Framework 4, Caspol.exe не влияет на политику CAS, если для устаревшего <элементаCasPolicy> не задано значение 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-разрядных системах. (Например, расположение — %windir%\Microsoft.NET\Framework64\v4.030319\caspol.exe для платформа .NET Framework 4 в 64-разрядной системе.) Если на компьютере выполняется несколько версий платформа .NET Framework параллельно, может быть установлено несколько версий средства. Программу можно запустить из каталога установки. Однако рекомендуется использовать командную строку разработчика Visual Studio или Visual Studio Developer PowerShell, которая не требует перехода к папке установки.
Введите в командной строке: .
Синтаксис
caspol [options]
Параметры
Вариант | Описание |
---|---|
-addfulltrust assembly_file or -af assembly_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 [флаги] or -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 psfile | pset_name} or -ap {name_psfile psfile | pset_name} |
Добавляет в политику новый именованный набор разрешений. Набор разрешений должен быть создан на языке XML и храниться в XML-файле. Если XML-файл содержит имя набора разрешений, необходимо указать только имя файла (psfile). Если XML-файл не содержит имя набора разрешений, необходимо указать имя XML-файла (psfile) и имя набора разрешений (pset_name). Все разрешения, используемые в наборе разрешений, должны быть определены в сборках, содержащихся в глобальном кэше сборок. |
-a[ll] | Указывает, что параметры, следующие за этим параметром, применяются к политикам компьютера, пользователя и предприятия. Параметр -all всегда относится к политике текущего пользователя, вошедшего в систему. Чтобы сослаться на политику пользователя, отличного от текущего, задайте параметр -customall. |
-chggroup {label |name} {mship | pset_name | flags } or -cg {label |name} {mship | pset_name | flags } |
Изменяет условие членства в группе кода, набор разрешений или параметры флагов exclusive, levelfinal, name или description. Можно задать аргумент label или name. Аргумент метки указывает метку (например, 1. или 1.1.) группы кода. Аргумент name задает имя изменяемой группы кода. Поскольку аргументы label и name взаимозаменяемы, программа Caspol.exe должна их различать. Поэтому аргумент name не может начинаться с цифры. Кроме того, аргумент name может состоять только из символов A–Z, 0–9 и символов подчеркивания. Аргумент pset_name задает имя набора разрешений, связываемого с группой кода. Сведения об аргументах mship и flags см. в таблицах ниже. |
-chgpset psfile pset_name or -cp psfile pset_name |
Изменяет именованный набор разрешений. Аргумент psfile предоставляет новое определение для набора разрешений. Это сериализованный файл набора разрешений в формате XML. Аргумент pset_name задает имя набора разрешений, который необходимо изменить. |
-customall path or -ca path |
Указывает, что параметры, следующие за этим параметром, применяются к политикам компьютера, предприятия и настраиваемым политикам указанного пользователя. Требуется задать расположение файла конфигурации безопасности пользователя в аргументе path. |
-cu[stomuser] path | Разрешает администрирование пользовательской политики пользователей, которая не принадлежит пользователю от имени Caspol.exe в настоящее время. Требуется задать расположение файла конфигурации безопасности пользователя в аргументе path. |
-enterprise or -en |
Указывает, что все параметры, следующие за этим параметром, применяются к политике уровня предприятия. Пользователи, которые не являются корпоративными администраторами, не имеют достаточных прав на изменение политики предприятия, хотя они могут просматривать его. В сценариях, отличных от предприятий, эта политика по умолчанию не влияет на политику компьютера и пользователя. |
-e[xecution] {on | } | Включает и отключает механизм проверки разрешений до выполнения кода. Примечание. Этот параметр не поддерживается в .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} or -pp {on | } |
Разрешает или запрещает выдачу запроса, появляющегося при запуске программы Caspol.exe с параметрами, которые могут изменить политику. |
-quiet or -q |
Временно блокирует вывод запроса, отображаемого при выборе параметров, которые могут изменить политику. Это не влияет на вывод запроса при внесении глобальных изменений. Этот параметр следует использовать только для отдельных команд, чтобы не допустить вывод запроса для всех команд программы Caspol.exe. |
-r[ecover] | Восстанавливает политику из файла резервной копии. При изменении политики старая политика программы Caspol.exe сохраняется в файле резервной копии. |
-remfulltrust assembly_file or -rf assembly_file |
Удаляет сборку из списка сборок с полным доверием для уровня политики. Эту операцию следует выполнить, если политика больше не использует набор разрешений, содержащий настраиваемое разрешение. Однако следует удалить сборку, реализующую пользовательское разрешение из списка полного доверия, только если сборка не реализует другие пользовательские разрешения, которые по-прежнему используются. При удалении сборки из списка следует удалить все сборки, которые от нее зависят. |
-remgroup {label |name} or -rg {label | name} |
Удаляет группу кода, заданную меткой или именем. Если указанная группа кода имеет дочерние группы кода, они также будут удалены. |
-rempset pset_name or -rp pset_name |
Удаляет указанный набор разрешений из политики. Удаляемый набор разрешений задается аргументом pset_name. Caspol.exe удаляет набор разрешений, только если он не связан с какой-либо группой кода. Не удается удалить наборы разрешений по умолчанию (встроенные). |
-reset or -rs |
Восстанавливает политику в состояние по умолчанию и сохраняет ее на диске. Этот параметр полезен, если измененную политику проще не исправлять, а создать заново из состояния по умолчанию. Возврат к политике по умолчанию также целесообразен при создании файлов конфигурации безопасности на основе файлов, используемых по умолчанию. Дополнительные сведения см. в разделе Ручная настройка файлов конфигурации безопасности. |
-resetlockdown or -rsld |
Возвращает политику к более строгой версии состояния по умолчанию и сохраняет ее на диске; создает резервную копию предыдущей политики компьютера и сохраняет ее в файле с именем security.config.bac . Заблокированная политика похожа на политику по умолчанию за тем исключением, что эта политика не предоставляет разрешений коду из зон Local Intranet , Trusted Sites и Internet , а соответствующие группы кода не имеют дочерних групп кода. |
-resolvegroup assembly_file or -rsg assembly_file |
Отображает группы кодов, к которым принадлежит указанная сборка (assembly_file). По умолчанию отображаются политики уровня компьютера, пользователя и предприятия, к которым принадлежит сборка. Чтобы отобразить только один уровень политики, задайте параметр -machine, -user или -enterprise. |
-resolveperm assembly_file or -rsp assembly_file |
Отображает все разрешения, которые будут предоставлены сборке при указанном уровне политики безопасности или уровне политики безопасности по умолчанию, если выполнение сборки будет разрешено. Сборка задается аргументом assembly_file. Если указан параметр -all, разрешения вычисляются на основе политики пользователя, компьютера и предприятия; в противном случае применяются правила поведения по умолчанию. |
-s[ecurity] {on | } | Включает и выключает управление доступом для кода. Параметр -s off не отключает безопасность на основе ролей. Примечание. Этот параметр не поддерживается в .NET Framework 4 и более поздних версиях. Внимание! При выключенной системе управления доступом для кода все требования доступа для кода удовлетворяются. При выключении системы управления доступом для кода система становится уязвимой для атак таких вредоносных программ, как вирусы и "черви". Отключение повышения безопасности повышает некоторую дополнительную производительность, но следует сделать только тогда, когда были приняты другие меры безопасности, чтобы убедиться, что общая безопасность системы не нарушается. К другим мерам предосторожности, связанным с безопасностью, относится отключение от общедоступных сетей, физическая защита компьютера и т.п. |
-u[ser] | Указывает, что все параметры, следующие за этим параметром, применяются к политике уровня пользователя для пользователя, от имени которого запущена программа Caspol.exe. Для пользователей, не являющихся администраторами, параметр -user задан по умолчанию. |
-? | Отображает синтаксис команд и параметров программы Caspol.exe. |
Аргумент mship, определяющий условия членства в группе кода, может применяться с параметрами -addgroup и -chggroup. Каждый аргумент mship реализуется как класс .NET Framework. Чтобы задать аргумент mship, следует использовать один из приведенных ниже аргументов.
Аргумент | Description |
---|---|
-allcode | Задает весь код. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.AllMembershipCondition. |
-appdir | Задает каталог приложения. Если в качестве условия членства задано -appdir, URL-свидетельство кода сравнивается со свидетельством каталога приложения этого кода. Если значения свидетельств совпадают, условие членства выполнено. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.ApplicationDirectoryMembershipCondition. |
-custom xmlfile | Добавляет настраиваемое условие членства. Обязательный аргумент xmlfile задает XML-файл, содержащий XML-сериализацию настраиваемого условия членства. |
-hash hashAlg {-hex hashValue-file | assembly_file } | Задает код с указанным хэшем сборки. Чтобы использовать хэш в качестве условия членства в группе кода, укажите значение хэша или файл сборки. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.HashMembershipCondition. |
-pub { -cert cert_file_name | -file signed_file_name-hexhex_string | } |
Задает код указанного издателя программного обеспечения, определенного файлом сертификата, подписью файла или шестнадцатеричным представлением сертификата X509. Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.PublisherMembershipCondition. |
-site website | Задает код с указанным исходным веб-сайтом. Например:-site** www.proseware.com Дополнительные сведения об этом условии членства см. в разделе System.Security.Policy.SiteMembershipCondition. |
-strong -file file_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. |
-zone zonename | Задает код с указанной исходной зоной. Аргумент zonename может принимать одно из следующих значений: MyComputer, Intranet, Trusted, Internet или Untrusted. Дополнительные сведения об этом условии членства см. в разделе с описанием класса ZoneMembershipCondition. |
Аргумент flags, который может использоваться с параметрами -addgroup и -chggroup, определяется с использованием одного из следующих аргументов.
Аргумент | Description |
---|---|
-description "description" | В сочетании с параметром -addgroup задает описание добавляемой группы кода. В сочетании с параметром -chggroup задает описание редактируемой группы кода. Аргумент description должен быть заключен в двойные кавычки. |
-exclusive {on|} | Если задано значение "включено", указывает, что только набор разрешений, связанный с добавляемой или изменяющейся группой кода, считается, когда некоторый код соответствует условию членства в группе кода. С аргументом off указывает, что должны обрабатываться наборы разрешений всех соответствующих групп кода на данном уровне политики. |
-levelfinal {on|} | С аргументом 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 | } используют версию платформа .NET Framework, с которым был установлен Caspol.exe. Изменения, внесенные программой Caspol.exe, которая установлена с версией X среды выполнения, будут влиять только на эту версию. В другие параллельные установки среды выполнения, при их наличии, изменения вноситься не будут. Если программа Caspol.exe запущена из командной строки в каталоге, отличном от каталога среды выполнения требуемой версии, программа выполняется из каталога первой версии среды выполнения в пути (обычно это каталог последней установленной версии).
Параметр -s[ecurity] {on | } — это операция на уровне компьютера. При отключении управления доступом для кода отключается проверка безопасности для всего управляемого кода и всех пользователей компьютера. Проверки безопасности отключаются для всех установленных на компьютере параллельных версий .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
Следующая команда добавляет дочернюю группу кода, которая предоставляет общий ресурс \\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