Обновление политики безопасности
Обновлен: Ноябрь 2007
Политика безопасности по умолчанию не знает о существовании каких-либо пользовательских разрешений. Например, именованный набор разрешений Everything содержит все встроенные разрешения доступа к коду, предоставляемые средой выполнения, но не включает каких-либо пользовательских разрешений. Для обновления политики безопасности с целью внесения сведений о пользовательском разрешении необходимо выполнить три действия.
Оповестить политику о пользовательском разрешении.
Добавить сборку в список доверенных сборок.
Сообщить политике безопасности, какой код должен получать доступ к пользовательскому разрешению.
Оповещение политики безопасности о пользовательском разрешении
Чтобы политика знала о пользовательском разрешении, необходимо выполнить следующие действия.
Создать новый набор именованных разрешений, включающий пользовательское разрешение. (Можно изменить существующий набор именованных разрешений, вместо того чтобы создавать новый.)
Присвоить набору разрешений имя.
Сообщить политике, что этот набор именованных разрешений существует.
Дополнительные сведения см. в разделах Средство для настройки политики управления доступом для кода (Caspol.exe) или средство настройки .NET Framework (Mscorcfg.msc). Можно добавить новый набор разрешений одним из нескольких способов. Используя средство для настройки политики управления доступом для кода (Caspol.exe), можно создать XML-файл, содержащий XML-представление набора пользовательских разрешений, после чего добавить этот файл в политику безопасности на том компьютере, где будет выполняться код. Используя средство настройки .NET Framework (Mscorcfg.msc), можно скопировать существующий набор разрешений и добавить XML-представление разрешения в новый набор разрешений.
Чтобы гарантировать, что XML-представление будет действительно и сможет корректно представлять данное разрешение, можно создать его с помощью кода, аналогичного приведенному в следующем примере. Обратите внимание, что этот код создает пользовательское разрешение MyCustomPermission, инициализируемое неограниченным состоянием. Если пользовательское разрешение не реализует интерфейс IUnrestrictedPermission или нежелательно, чтобы политика предоставляла данному разрешению неограниченный статус, используйте конструктор для инициализации данного разрешения требуемым состоянием.
Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Permissions
Class PSetXML
Public Shared Sub Main()
Dim perm As New MyCustomPermission(PermissionState.Unrestricted)
Dim pset As New NamedPermissionSet("MyPermissionSet", PermissionState.None)
pset.Description = "Permission set containing my custom permission"
pset.AddPermission(perm)
Dim file As New StreamWriter("mypermissionset.xml")
file.Write(pset.ToXml())
file.Close()
End Sub
End Class
using System;
using System.IO;
using System.Security;
using System.Security.Permissions;
class PSetXML {
public static void Main()
{
MyCustomPermission perm =
new MyCustomPermission(PermissionState.Unrestricted);
NamedPermissionSet pset =
new NamedPermissionSet("MyPermissionSet", PermissionState.None);
pset.Description = "Permission set containing my custom permission";
pset.AddPermission(perm);
StreamWriter file = new StreamWriter("mypermissionset.xml");
file.Write(pset.ToXml());
file.Close();
}
}
После того как будет создан XML -файл, содержащий набор разрешений, можно добавить его к политике безопасности. Для использования средства Caspol.exe наберите в командной строке следующее:
caspol –machine –addpset mypermissionset.xml
Когда Caspol.exe запросит, необходимо ли добавить сборку, содержащую пользовательское разрешение, в список доверенных сборок, наберите yes.
Чтобы добавить XML-файл, содержащий набор разрешений, с использованием средства настройки .NET Framework, выберите узел Политика безопасности среды выполнения, после чего выберите уровень политики, который необходимо изменить. Щелкните правой кнопкой мыши Наборы разрешений и выберите команду Создать. Используйте мастер для добавления набора разрешений.
Добавление сборки в список доверенных сборок
Так как пользовательское разрешение будет участвовать в системе безопасности .NET Framework, оно должно быть полностью доверенным (как и любой код, от которого зависит система безопасности). Можно получить полное доверие для сборки путем добавления ее в список доверенных сборок. После добавления сборки пользовательского разрешения в этот список с использованием средства Caspol.exe (как было описано ранее), следует также добавить в этот список все сборки, на которые ссылается класс разрешения. Для добавления дополнительных сборок в список с использованием Caspol.exe наберите в командной строке следующее:
caspol -addfulltrust mypermissionset.dll
Для просмотра списка полностью доверенных сборок используйте следующую команду:
caspol -listfulltrust
Так как сборка пользовательского разрешения (и все сборки, на которые она ссылается) будет полностью доверенной для системы безопасности, важно, чтобы эти файлы были подписаны криптографически строгим именем. Caspol.exe не добавит сборку в список полностью доверенных, если она не имеет строгого имени.
Чтобы добавить сборку в список полностью доверенных сборок с использованием средства настройки .NET Framework Configuration tool, щелкните правой кнопкой на узле Политика безопасности среды выполнения и выберите команду Назначить уровень доверия сборке. Используйте мастер для предоставления доверия сборке.
Внимание! Если сборка, реализующая пользовательский объект безопасности, ссылается на другие сборки, необходимо сначала добавить эти сборки в список полностью доверенных сборок. Пользовательские объекты безопасности, созданные с использованием Visual Basic, Visual C++ или JScript, ссылаются на Microsoft.VisualBasic.dll, Microsoft.VisualC.dll и Microsoft.JScript.dll соответственно. Эти сборки по умолчанию не содержатся в списке полностью доверенных сборок. Нужно добавить соответствующую сборку в список полностью доверенных, прежде чем добавлять пользовательский объект безопасности. Невыполнение этого требования нарушит целостность системы безопасности, в результате чего ни одна из сборок не сможет быть загружена. В этой ситуации опция Caspol.exe -all -reset не исправит систему безопасности. Для ее исправления необходимо вручную редактировать файлы безопасности для удаления объекта безопасности.
Настройка политики на предоставление пользовательского разрешения
Нужно ассоциировать новый набор разрешений с соответствующими группами кода, чтобы политика безопасности предоставляла пользовательское разрешение коду, который должен его иметь. Это можно сделать, редактируя существующую группу кода или добавляя новую группу, идентифицирующую набор кода, который должен получить пользовательское разрешение. Дополнительные сведения о группах кода см. в разделе Политика безопасности. Используйте следующую команду программы Caspol.exe, чтобы сделать mypermissionset набором разрешений, предоставляемым коду, который выполняет условия членства в группе кода LocalIntranet:
caspol -user -chggroup 1.2. mypermissionset
В данном примере метка 1.2 представляет группу кода LocalIntranet. Для отображения всех групп кода с их ассоциированными метками, используйте следующую команду:
caspol -list
Для просмотра списка наборов разрешений используйте следующую команду:
caspol -listpset
Чтобы сделать mypermissionset набором разрешений, выдаваемым членам группы кода LocalIntranet с использованием средства настройки .NET Framework, выберите узел Политика безопасности среды выполнения, а затем политику Компьютер. Щелкните правой кнопкой узел LocalIntranet_Zone и выберите пункт Свойства. Измените набор разрешений, используя вкладку Набор разрешений.
См. также
Основные понятия
Создание собственных разрешений доступа к коду
Ссылки
Средство настройки политики управления доступом для кода (Caspol.exe)
Средство настройки .NET Framework (Mscorcfg.msc)