Пакет для работы с proxy-сертификатами и MyProxy
Инсталляция
Затягиваем на свою машину файл http://rep.grid.kiae.ru/gridnnn/rhel5.repo и помещаем его в /etc/yum.repos.d. Далее с помощью YUM ставим два пакета, ngrid-proxytool и ca_GridNNN. Сама утилита называется proxytool и находится в /usr/bin.
Есть RPM-пакеты ngrid-proxytool-debuginfo, который экспортирует отладочные символы для proxytool. Если у вас возникают проблемы и вы их можете повторить под отладчиком, то debuginfo-пакеты могут сильно помочь понять, где именно и что было плохо в коде.
История версий RPM-пакетов, относительно версий в Subversion.
Сборка из исходных кодов
Репозиторий клонируется из репозитория Subversion, https://svn.ngrid.ru/proxytool/trunk.
Если вы собираете Proxytool с Globus Toolkit, который был компилирован локально или это была двоичная сборка от globus.org, то команды сборки такие:
make make PREFIX=/your/favorite/prefix install
Если вы собираете Proxytool c Globus Toolkit, который происходит из репозиториев EPEL (для сборки вам потребуются RPM-пакеты myproxy и myproxy-devel; для работы -- только myproxy), то сборка производится командами
make WITH_EPEL=y make PREFIX=/your/favorite/prefix install
Поддержка VOMS
Proxytool умеет работать с VOMS; реализация на момент r907 может вставлять в каждый proxy-сертификат расширения VOMS только для одной виртуальной организации; сейчас в сертификат вставляются аттрибуты всех групп, в которых пользователь есть для данной VO -- это всегда делается сервером VOMS и не может быть переделано, ибо предписывается стандартом. Реализация полного выбора нужных FQAN (ролей) делается с помощью ключа -V<VO>:<FQAN>; в рамках работы с одним proxy-сертификатом возможно опрашивать только один VOMS-сервер.
До устранения проблемы #580 или обнаружения проблем в самом Proxytool, все команды, которые запрашивают несколько ролей, будут возвращать только первый из FQAN-ов.
Для общения с VOMS у нас сейчас используется реализация из org.glite.security.voms, она доступна в репозитории EPEL:
- CentOS 5/x86_64: сама библиотека, дребедень, нужная только для сборки
- CentOS 5/x86: сама библиотека, дребедень, нужная только для сборки
- CentOS 4/x86_64: сама библиотека, дребедень, нужная только для сборки
- CentOS 4/x86: сама библиотека, дребедень, нужная только для сборки
Достаточно поставить оба пакета только для "родной" комбинации операционной системы и архитектуры (версии для CentOS 4 -- для Globus Toolkit, собранного для RHAS 4).
Настройка данных для VOMS
Proxytool ищет файлы с конфигурацией серверов виртуальных организаций в /etc/grid-security/vomses, в каталоге /etc/grid-security/vomsdir лежат описания DN серверов VOMS и УЦ, которые подписали эти сертификаты. Внутри дистрибутива Proxytool есть сценарий tools/voms-installer.sh, который создает конфигурацию VOMS-серверов для виртуальных организаций "testbed" и "gridnnn".
Если говорить коротко, то у каждой виртуальной организации внутри каталога /etc/grid-security/vomses должен быть файл, называющийся также, как и виртуальная организация, и имеющий внутри следующее содержимое (пример для VO gridnnn):
"gridnnn" "voms.ngrid.ru" "15002" "/C=RU/O=NanoGrid/OU=hosts/OU=sinp.msu.ru/CN=voms.ngrid.ru" "gridnnn" "24"
А внутри каталога /etc/grid-security/vomsdir для каждой VO должен быть каталог, называющийся как сама VO и имеющий внутри файлы, с расширением ".lsc" (например, /etc/grid-security/vomsdir/testbed/voms.ngrid.ru.lsc):
/C=RU/O=NanoGrid/OU=hosts/OU=sinp.msu.ru/CN=voms.ngrid.ru /C=RU/O=NanoGrid/CN=NanoGrid CA
voms-installer.sh делает чуть хитрее: он создает файл /etc/grid-security/vomsdir/voms.ngrid.ru.lsc, а в подкаталогах для каждой VO cоздает символическую ссылку на этот файл. Получается то же самое, только изменять DN сервера VOMS и CA становится удобнее, поскольку не нужно менять файл для каждой VO, а достаточно переписать только один мастер-файл.
Использование, локальные команды
init
Создает локальный proxy-сертификат из ключевой пары.
Параметры командной строки:
- -k файл: задает месторасположение закрытого ключа;
- -c файл: задает месторасположение сертификата;
- -p файл: выходной файл для proxy-сертификата;
- -P | #fd: указывает, что пароль для закрытого ключа нужно брать из указанного файла или из указанного файлового дескриптора;
- -v HH:MM: задает время действия proxy-сертификата;
- -b число: задает размер закрытого ключа proxy-сертификата в битах;
- -V <имя_VO>:<FQAN>: задает имя виртуальной организации и FQAN, для которых будет получаться VOMS-расширение.
info
Выдает информацию о локальном proxy-сертификате.
Параметры командной строки:
- -p файл: задает месторасположение proxy-сертификата.
destroy
Уничтожает proxy-сертификат.
Параметры командной строки:
- -p файл: задает месторасположение proxy-сертификата.
Использование, команды для общения с MyProxy
Имя сервера MyProxy (и порт, если он не является стандартным) также могут быть указаны в переменной окружения MYPROXY_HOST. Это верно для всех команд, взаимодействующих с MyProxy.
store
Помещает proxy-сертификат на сервер MyProxy.
Параметры командной строки:
- -k файл: задает месторасположение закрытого ключа;
- -c файл: задает месторасположение сертификата;
- -P | #fd: указывает, что пароль для proxy-сертификата на MyProxy нужно брать из указанного файла или из указанного файлового дескриптора;
- -v HH:MM: задает время действия proxy-сертификата, который будет находиться на сервере MyProxy;
- -M HH:MM: задает максимальное время действия делегированных с MyProxy сертификатов;
- -m узел: задает имя сервера MyProxy в формате узел:порт или просто как имя узла;
- -n: указывает, что proxy-сертификат, делегируемый на MyProxy, не будет защищен паролем;
- -l login: задает имя пользователя для сервера MyProxy; по-умолчанию используется DN пользовательского сертификата;
- -N DN: разрешает пользователю с данным DN обновлять локальный proxy-сертификат, используя сервер MyProxy; операция обновления не требует ввода пароля к сертификату на MyProxy;
- -T DN: разрешает пользователю с данным DN получать сертификат с сервера MyProxy; для получения сертификата требуется ввести пароль.
Параметры -N и -T могут быть указаны несколько раз.
fetch
Забирает делегированный proxy-сертификат с сервера MyProxy. Для делегирования необходимо знать пароль, который пользователь указал при помещении долгосрочного proxy-сертификата на сервис MyProxy.
Данный режим прежде всего предназначен для Web UI, чтобы он мог забирать первоначальный proxy-сертификат пользователя, имея на руках свой сертификат, DN сертификата пользователя и пароль для MyProxy.
Параметры командной строки:
- -k файл: задает месторасположение закрытого ключа;
- -c файл: задает месторасположение сертификата;
- -C | #fd: указывает, что пароль для закрытого ключа, определяемого опцией -k (или -c, в случае использования PKCS#12), нужно брать из указанного файла или из указанного файлового дескриптора;
- -p файл: выходной файл для proxy-сертификата;
- -P | #fd: указывает, что пароль для proxy-сертификата на MyProxy нужно брать из указанного файла или из указанного файлового дескриптора;
- -v HH:MM: задает время действия proxy-сертификата, делегируемого с MyProxy;
- -m узел: задает имя сервера MyProxy в формате узел:порт или просто как имя узла;
- -n: указывает, что пароль для MyProxy пуст;
- -l login: задает имя пользователя для сервера MyProxy; по-умолчанию используется DN пользовательского сертификата;
- -V <имя_VO>:<FQAN>: задает имя виртуальной организации и FQAN, для которых будет получаться VOMS-расширение.
Пример использования:
proxytool fetch -m nghoop.grid.kiae.ru -p proxy.out -l '/C=RU/O=NanoGrid/OU=user/OU=grid.kiae.ru/CN=Vasya' -P '#4'
В данном случае proxytool попытается вытащить с сервера nghoop.grid.kiae.ru proxy-сертификат для пользователя Vasya и положить его в файл proxy.out. Пароль для MyProxy будет считываться из файлового дескриптора номер 4; он должен быть открыт к моменту запуска proxytool.
renew
Обновляет существующий proxy-сертификат пользователя, используя для этого сервис MyProxy. Пароля для обновления вводить не нужно. Если в сертификате есть расширения VOMS, то они тоже обновляются.
Данный режим предназначен для обновления proxy-сертификата пользователя на всех сервисах, которым это нужно, и у которых уже есть действительный proxy-сертификат для данного пользователя. В дополнение к этому, может выбираться ключевая пара, которой клиент будет аутентифицироваться (обычно, это сертификат узла, который делает renew): см. ключи -c, -k и -C.
Параметры командной строки:
- -k файл: задает месторасположение закрытого ключа;
- -c файл: задает месторасположение сертификата;
- -C | #fd: указывает, что пароль для закрытого ключа, определяемого опцией -k (или -c, в случае использования PKCS#12), нужно брать из указанного файла или из указанного файлового дескриптора;
- -p файл: файл с существующим proxy-сертификатом; при успешном обновлении, в этот файл будет помещен новый proxy-сертификат;
- -v HH:MM: задает время действия proxy-сертификата, делегируемого с MyProxy;
- -m узел: задает имя сервера MyProxy в формате узел:порт или просто как имя узла;
- -l login: задает имя пользователя для сервера MyProxy; по-умолчанию используется DN пользовательского сертификата.
Пример использования:
proxytool renew -m nghoop.grid.kiae.ru -p proxy.out
Всё просто: сертификат, лежащий в файле proxy.out, обновляется. Или нет, но это уже кому как повезет ;))
Использование, команды, специфичные для VOMS
list-roles
Получает список всех VOMS-ролей, доступных данному пользователю для указанной виртуальной организации.
Параметры командной строки:
- -p файл: расположение proxy-сертификата пользователя;
- -V имя_VO: задает имя виртуальной организации, для которой будет получаться VOMS-расширение.
Пример использования:
$ ./proxytool list-roles --vo gridnnn /gridnnn
add-roles
Добавляет к существующему proxy-cертификату VOMS-расширения для указанной VO.
Параметры командной строки:
- -p файл: входной и выходной файл для proxy-сертификата;
- -v HH:MM: задает время действия proxy-сертификата;
- -b число: задает размер закрытого ключа proxy-сертификата в битах;
- -V <имя_VO>:<FQAN>: задает имя виртуальной организации и FQAN, для которых будет получаться VOMS-расширение.
Общие замечания
Если пароль читается из файла или файлового дескриптора, то в качестве содержимого пароля берется только первая прочитанная строка без завершающего символа '\n'.
