Прокси-сертификаты
Что такое прокси
Для того чтобы непосредственно взаимодействовать с удалённым сервисом, как доказательство подлинности одной из сторон может использоваться цифровой сертификат. Однако в Грид-сообществе часто необходимо взаимодействовать с удалённым сервисом от имени пользователя. Например, задание, запущенное на удалённом узле, должно быть способно общаться с другими серверами для обмена файлами и, следовательно, должно быть способно подтвердить своё право использовать полномочия самого пользователя (такой подход носит название делегирование полномочий).
Конечно, можно предложить вместе с заданием пересылать и закрытый ключ пользователя, однако это очень небезопасно, поскольку делегирует полные права пользователя удалённому сервису да и вдобавок на достаточно большое время (как правило, срок действия сертификата, а значит и закрытого ключа - один год). При этом значительно увеличивается шанс на то, что закрытый ключ может быть перехвачен третьей стороной.
В Грид прокси позволяет реализовать ограниченное делегирование прав. Строго говоря, прокси - это тоже сертификат, но обычно термин "сертификат" используется для названия того, что подтверждено некоторым Центром Сертификации (Certificate Authority - CA). При создании прокси генерируется новая пара закрытый/открытый ключ и создаётся новый сертификат, содержащий открытый ключ, используя имя для обладателя сертификата вида:
/C=UK/O=eScience/OU=CLRC/L=RAL/CN=john smith/CN=proxy
Новый сертификат "подписывается" закрытым ключом для долговременного, "настоящего" сертификата. Обычно срок жизни прокси достаточно мал, как правило - 12 часов.
Когда задание передаётся на выполнение, прокси-сертификат, закрытый ключ для прокси и нормальный сертификат (но не долговременный закрытый ключ!!) пересылаются вместе с ним. Когда задание хочет подтвердить свои делегированные полномочия для взаимодействия с другим сервисом, оно пересылает ему прокси сертификат и нормальный сертификат, но не закрытый ключ для прокси. Этой информации достаточно, чтобы доказать, что удалённый сервис имеет право использовать делегированные полномочия от самого пользователя. Если удалённому сервису необходимо дальнейшее делегирование прав для взаимодействия с другим сервисом, то он может создать новый прокси на базе первого прокси и передать этот новый прокси другому сервису, тем самым выстраивая цепочку взамосвязанных сертификатов.
С точки зрения системы безопасности прокси является некоторым компромиссом. Поскольку закрытый ключ передаётся вместе с ним, то любой, кто сможет перехватить его, может выдавать себя за его обладателя, поэтому с прокси надо обращаться осторожно. Нет единого механизма для аннулирования прокси. Поэтому, в общем случае, даже если становится известным, что прокси похищен, очень мало возможностей для того, чтобы запретить его использование. С другой стороны, срок жизни прокси обычно всего лишь несколько часов, поэтому потенциальная угроза достаточно ограничена.
Сам по себе прокси, который включает собственный закрытый ключ, представляет из себя файл, который может быть сохранён в любом месте. По умолчанию он сохраняется в виде файла /tmp/x509up_u1234, где 1234 - это пользовательский ID (user ID). Как и закрытый ключ сертификата, прокси открыт для чтения только для владельца файла (owner). Однако для него нет парольной защиты. Заметим, что директория /tmp - это локальная директория, поэтому при работе с интерактивными вычислительными фермами (как lxplus в ЦЕРН) сессии, запущенные на разных машинах могут использовать различные прокси. Директория, в которой сохраняется прокси по умолчанию, может быть изменена путём назначения переменной окружения X509_USER_PROXY полного имени файла, используемого для сохранения прокси. В таком случае это может быть и на разделяемой файловой системе.
Информация, содержащаяся в прокси
Прокси, как было сказано выше, содержит пару ключей (закрытый и открытый) и подписан с использованием первичного сертификата. Они содержат идентификационную информацию о пользователе, т.е. отличительное имя пользователя (Distinguished Name - DN). Прокси также может содержать информацию о принадлежности к определённой ВО.
Система, называемая Virtual Organization Membership Service (VOMS) используется в Грид-инфраструктуре для управления ролями и привилегиями пользователей внутри ВО. Эта информация предоставляется сервисам в виде расширений к прокси. Во время создания прокси происходит обращение к одному или более VOMS серверам и они возвращают Attribute Certificate (AC), который подписан ВО и содержит информацию о членстве в группе и запрошенных ролях для данной ВО.
При создании VOMS прокси AC добавляются в стандартный прокси и всё это вместе подписывается закрытым ключом первичного сертификата. Сервисы потом могут раскодировать VOMS информацию и использовать её по назначению. Например, пользователю может быть разрешено делать что-либо только в том случае, если ему назначена определённая роль внутри данной ВО. Одним из следствий такого механизма является то, что VOMS атрибуты могут быть использованы только для прокси, они не могут быть добавлены к сертификату, выданному Центром Сертификации.
Ещё одна вещь, которую следует иметь в виду, это то что прокси и каждый из AC имеют свой собственный срок действия. Как правило, для каждого AC определяется то же самое время жизни, как и для прокси в целом, однако возможно что они будут отличаться, в зависимости от правил ВО и времени действия прокси, определённого при его создании. Обычно VOMS сервера ограничивают срок действия для AC максимум 24 часами, хотя в отдельных случаях этот лимит может быть увеличен. Различные сроки действия часто приводят к проблемам, связанным с авторизацией в Грид.
Группы и роли
Система VOMS позволяет прокси иметь расширения, которые которые содержат информацию о членстве пользователя в ВО, включая информацию о том, в какую группу включён пользователь и какая роль назначена пользователю.
В терминологии VOMS, группа - это подмножество членов ВО, в которое входят те члены, которые имеют одинаковые привилегии и права в рамках проекта. Группы организованы по иерархическому принципу, как дерево директорий, начиная с общей группы, куда входят все члены ВО. Пользователь может быть членом любого числа групп, и VOMS прокси содержит список всех групп, к которым принадлежит пользователь. Когда создаётся VOMS прокси, пользователь может выбрать одну из этих групп, как "первичную" группу.
Роль является атрибутом, который обычно позволяет пользователю получить специальные привилегии для выполнения специфических задач. В принципе, группы ассоциированы с привилегиями, которые пользователь имеет всегда, в то время, как роли связаны с привилегиями, которые нужны пользователю время от времени. Заметим, что роли привязаны к группам, т.е. роли с одинаковыми именами, но в различных группах, также различны.
Группы и роли определяются для каждой ВО; они могут быть назначены пользователю в момент первоначальной регистрации или добавлены потом. Группы и роли идентифицируются Fully Qualified Attribute Names (FQAN). Формат этого идентификатора имеет вид:
FQAN =[/Role= ]
Например - /cms/HeavyIons/Role=production
. Поставщики ресурсов (Resource providers) используют FQAN чтобы авторизовать пользователей
для выполнения специфических задач в поддерживамых сервисах.
Работа с прокси
Пользователь может создать прокси при помощи команды voms-proxy-init
, которая требует ввода пароля, как это показано ниже
(прежняя команда grid-proxy-init
также может использована для создания стандартного прокси, но она устарела, т.к. не позволяет добавлять
VOMS атрибуты в прокси).
Создание простого прокси
Для того чтобы создать простой прокси без информации о ВО, следует выполнить команду:
$ voms-proxy-init
Если команда выполнилась успешно, вывод на экран будет выглядеть примерно так:
Your identity: /O=Grid/O=CERN/OU=cern.ch/CN=John Doe Enter GRID pass phrase for this identity: Creating proxy ............................................... Done Your proxy is valid until: Tue Jun 24 23:48:44 2003
Прокси будет записан в директорию, имя которой соответствует шаблону /tmp/x509up_u<uid>, где <uid> - это UID пользователя, если только не определена переменная окружения X509_USER_PROXY. В этом случае значение этой переменной используется, как путь к файлу с прокси.
Если пользователь ввёл неправильный пароль, или файл с прокси не может быть записан в указанном месте, или закрытый ключ имеет неправильные
атрибуты доступа, то на консоль выводится сообщение об ошибке и прокси не создаётся. Во всех случаях использование опции -debug
позволит получить более детальное описание причины ошибки.
По умолчанию прокси имеет срок действия 12 часов. Для того чтобы задать другой срок действия может использоваться опция -valid H:M
(прокси будет действительным H часов и M минут - по умолчанию 12:00). Когда срок действия прокси истекает, то он становится бесполезным и новый прокси
должен быть создан при помощи той же команды voms-proxy-init
. Однако, если задавать больший срок действия прокси, то это увеличивает
риск с точки зрения безопасности и в соответствии с Grid Acceptable Use Policy в общем случае время действия прокси ограничено 24 часами; некоторые
сервисы могут отвегнуть прокси, если для него определено слишком большо й срок действия.
Используйте опцию -help
для вывода полного списка всех доступных опций.
Получение информации о прокси
Для того чтобы получить информацию о прокси, например получить Subject Name (SN) или узнать об оставшемся времени действия прокси, используется команда
$ voms-proxy-info
Если прокси существует и он действителен, то вывод будет выглядеть примерно так:
WARNING: Unable to verify signature! Server certificate possibly not installed. Error: VOMS extension not found! subject : /O=GRID-FR/C=FR/O=CNRS/OU=LAL/CN=John Doe/CN=proxy issuer : /O=GRID-FR/C=FR/O=CNRS/OU=LAL/CN=John Doe identity : /O=GRID-FR/C=FR/O=CNRS/OU=LAL/CN=John Doe type : proxy strength : 512 bits path : /tmp/x509up_u31568 timeleft : 11:59:09
Предупреждение может быть проигнорировано, если не были запрошены VOMS расширения для прокси (т.е. не была указана опция
-voms
в команде voms-proxy-init
). Если прокси не существует, то выводится сообщение:
ERROR: Couldn't find a valid proxy. Use -debug for further information.
Удаление прокси
Для того чтобы удалить прокси до истечения срока его действия, используется команда
$ voms-proxy-destroy
Если прокси не существует, то выводится сообщение:
ERROR: Proxy file doesn't exist or has bad permissions Use -debug for further information.
Создание VOMS прокси с информацией о ВО
Команда voms-proxy-init
создаёт Грид-прокси и при этом может связываться с одним или несколькими VOMS серверами
для получения атрибутов пользователя и добавления их в прокси. Если команда используется без определения аргументов, то в этом
случае создаётся стандартный прокси, как это показано выше, без информации о ВО.
Для того чтобы создать прокси, который содержит информацию о членстве в ВО, но без запроса специальной роли или первичной группы ВО, используется следующий формат команды:
$ voms-proxy-init -voms <vo>
где <vo> - имя ВО. Вывод на экран будет выглядеть примерно так
$ voms-proxy-init -voms cms Your identity: /C=CH/O=CERN/OU=GRID/CN=John Doe Enter GRID pass phrase: Creating temporary proxy .............................................. Done Contacting lcg-voms.cern.ch:15002 [/C=CH/O=CERN/OU=GRID/CN=host/lcg-voms.cern.ch] "cms" Done Creating proxy ................................................................ Done Your proxy is valid until Thu Mar 30 06:17:27 2006
Создание прокси происходит за 2 шага: вначале создаётся простой прокси, который используется для аутентификации на VOMS сервере,
и только потом создаётся полноценный VOMS прокси, исползуя информацию, полученную от VOMS сервера. Если уже существует действительный
прокси, то можно использовать опцию -noregen
, для того чтобы пропустить первый шаг, включая ввод пароля.
Одно очевидное преимущество VOMS прокси над простым прокси состоит в том, что сервисы ППО (промежуточного программного обеспечения) могут получить информацию о принадлежности пользователя к определённой ВО прямо из прокси, а в случае использования простого прокси, имя ВО должно быть явно указано.
Для того чтобы создать прокси с данной ролью (например production) и первичной группой (например /cms/HeavyIons) используется следующий формат команды voms-proxy-init
$ voms-proxy-init -voms <alias>:<group name>[Role=<role name>]
где <alias> определяет VOMS сервер, обычно это просто имя ВО, например
$ voms-proxy-init -voms cms:/cms/HeavyIons/Role=production
Команда voms-proxy-init требует на пользовательской стороне наличия конфигурационного файла, путь к которому может быть задан несколькими способами; если этот путь является директорией, то все файлы, находящиеся внутри этой директории объединяются и рассматриваются, как единый конфигурационный файл. Обычно конфигурационный файл создаётся системным администратором на машине UI (User Interface). Если вы увидете сообщение об ошибке, что не найден конфигурационный файл для вашей ВО, то вам следует создать такой конфигурационный файл самостоятельно.
Получение информации о ВО из прокси
Для вывода информации о существующем VOMS прокси используется команда voms-proxy-info
, у которой есть две
полезные опции: -all
- распечатать полную информацию и -fqan
- распечатать группы и роли в формате FQAN.
Например:
$ voms-proxy-info -all subject : /C=CH/O=CERN/OU=GRID/CN=John Doe/CN=proxy issuer : /C=CH/O=CERN/OU=GRID/CN=John Doe identity : /C=CH/O=CERN/OU=GRID/CN=John Doe type : proxy strength : 512 bits path : /tmp/x509up_u10585 timeleft : 11:59:58 === VO cms extension information === VO : cms subject : /C=CH/O=CERN/OU=GRID/CN=John Doe issuer : /C=CH/O=CERN/OU=GRID/CN=host/lcg-voms.cern.ch attribute : /cms/Role=NULL/Capability=NULL timeleft : 11:59:58
Как видно, сроки действия прокси в целом и VOMS расширений определяются раздельно и в общем случае они могут быть различны.