PPJ GRID の使い方 for me

2008/4/30 last update: 2008/8/7

User CA の取得

GRIDを使うには、ユーザ証明書が必要なので取得しなければならない。
http://gridca.kek.jp/ から Getting Started へ行く。
を(KEK 木村さんへ?)提出して,佐々木さんの面接を受ける。ユーザCA を発行してもらうと User/Pass(10文字/10文字)が記された紙が FAX されて来る。Password は変更できる。

http://gridca.kek.jp/ の Documents → User ManualHTML Version Enrollment Manual にある通り、Client Tool をインストールして「3. Obtaining Certificates (Globus User Certificate)」 を実行。
筑波では、grid001 の /opt/naregi/ca/bin 以下に install されているようだ。

globus-user-req.sh は、$HOME/.globus のディレクトリに
が作られる。これらのファイルは、Disk クラッシュ等で失われないようにしなければならない。証明書の再発行は、旧証明書を revoke しなければできないが、revoke するときにも旧証明書が必要。

User 証明書を web browser へ組み込む

GRID のサービスを提供している web page へ接続する時は、接続に個人証明が必要な場合がある。このような web page に access するためには、発行されたユーザー証明書を web browser へ組み込まなければならない。

証明書を pkcs12 と言う形式で export

$ openssl pkcs12 -export -inkey .globus/userkey.pem -in .globus/usercert.pem -out mycert.p12
(userkey.pemはDES3で暗号化されているのでexportには、pass phraseが必要)

Mozilla, Firefox 系

Edit -> Preferences -> Privacy & Security -> Certificates -> Manage certificates -> Import
この時、Software Security Device のパスワードが必要。
自分で設定した覚えが無い、または、忘れた場合、以下の reset が必要。
Edit -> Preferences -> Privacy & Security -> Master Password -> Reset Password

IE 系

ツール -> インターネットオプション -> コンテンツ -> 証明書 -> インポート

証明書が組み込まれた web browser からは、例えば
https://voms.cc.kek.jp:8443/vomses/
https://voms.cnaf.infn.it:8443/vomses/
などへ access できる。

User 証明書の更新

ユーザ証明書の有効期限が一年なので、適宜更新する必要がある。有効期限の確 認:grid-cert-info
もしくは,openssl x509 -in ~/.globus/usercert.pem -text -noout
ユーザ証明書:
$HOME/.globus/usercert.pem, userkey.pem
KEK GRID CA Client Toolkit (/opt/naregi/ca/bin )が揃っている環境にて、
 /opt/naregi/ca/bin/globus-user-renew.sh -rnw

PPJ VO への Join

ユーザ証明書を組み込んだ web browser か https://voms.cc.kek.jp:8443/vomses/ へアクセス。
ppj -> Newuser registration。必要事項を書き込 み submit。管理者から VO へ accept されたと言うメールが届くのを待つ。
ppj -> Adminiser the VO -> LIST OF USERS で VO 所属の user の一覧が見れる。これは、そのVOに所属していなくても見ることができるようだ。
WMS service が動いているホストの /etc/grid-security/grid-mapfile にDNが登録されるまで若干のタイムラグがある。

HOST 証明書の取得

https://gridca.kek.jp/repository/KEK-GRID-ENROLLMENT-DETAIL.html の4を参照。
2のKEK GRID CA Client Toolkit のインストールが必要。
http://gridca.kek.jp/にいく.
「Start Your Web Enrollment」を選んで user/pass を入力
「Generate License for Host/Service」を選択
必要な License の数を入力して generate
  /opt/naregi/ca/bin/globus-host-req.sh -rvk
    [y][0]
  rm -i /etc/grid-security/host*
  /opt/naregi/ca/bin/globus-host-req.sh
    [][**HOSTNAME**(FQDN)][Y][**LICENSE_CODE**]
    (grid001 上の globus-host-req.sh を使う必要がある. 他のhostのは
    versionが古い)
  for i in 1 2 3 4 5 6 7; do ssh grid00${i} openssl x509 -in /etc/grid-security/hostcert.pem -subject -dates -noout; done

PPJ GRID の使い方

UI マシンへログイン

glite の UIツールがインストールされている host (grid001) へ login
環境変数が設定されていない場合は、
$ source /etc/profile.d/glite-env.csh (csh系)
$ source /etc/profile.d/globus.csh (glite-3.0のみ)
$ . /etc/profile.d/glite-env.sh (sh系)
$ . /etc/profile.d/globus.sh (glite-3.0のみ)
home directory に .globus/ に自分のユーザ証明書と秘密鍵(usercert.pem, userkey.pem)を置いておく。
$ grid-cert-info :ユーザ証明書を確認する
$ openssl verify -verbose -CApath /etc/grid-security/certificates ~/.globus/usercert.pem :証明書をverifyする。

Proxy(委任状)作成

ユーザの秘密鍵は、DES暗号で暗号化されている。ユーザ認証に秘密鍵 userkey.pem を使う場合、いちいち復号化のためのパスフレーズの入力をするのは面倒であるため、通常は、短時間のみ有効なproxyを作成し、ユーザ認証にはそれを使 う。
$ voms-proxy-init -voms ppj
$ voms-proxy-info -all : proxyの情報を確認

リソースの情報を得る

$ glite-wms-job-list-match -a hello.jdl:submit可能な CEId一覧がでてくる。
$ lcg-info --list-ce --attrs Tag --vo ppj : CE に available な Tag一覧

Jobを投入

JDL file およびbash scriptを用意

------ hello.jdl ----------------------
// hello.jdl

Executable="/bin/bash";
Arguments = "hello.sh";
StdOutput="std.out";
StdError="std.err";
 
InputSandbox={"hello.sh"};
OutputSandbox={"std.out","std.err"};
---------------------------------------
------ hello.sh -----------------------
#! /bin/bash
hostname=`/bin/hostname`
echo "hello ${hostname}"
---------------------------------------

job を submit

$ glite-wms-job-submit --vo ppj -a hello.jdl
submitに成功すると job ID が
https://grid006.tsukuba.jp.hep.net:9000/XXXXXXXXXXX
とでてくる。
$ glite-wms-job-submit --resource grid008.tsukuba.jp.hep.net:2119/jobmanager-lcgpbs-ppj -a hello.jdl : 指定したCEIdへjobを投入する。

job の status をみる

submit の時に与えられた jobIDを使って
$ glite-wms-job-status https://grid006.tsukuba.jp.hep.net:9000/XXXXXX
Status は Ready -> Scheduled -> Running -> Done(Aborted)
となる。
$ glite-wms-job-status --all -e 7 -e 8 : Cleared(7)とAborted(8)を除く job を全て表示

job出力の回収
$ glite-wms-job-output --dir outputdir https://grid006.tsukuba.jp.hep.net:9000/XXXXXX
Job status は Cleared になる。

Globus gatekeeper

job submit

$ globus-job-run grid002 /bin/hostname
$ globus-job-run grid002:2119/jobmanager-lcgpbs -queue ppj /bin/hostname : cf. http://www.bo.infn.it/alice/introgrd/lcg3-0/node29.html

$ globus-job-submit grid002:2119/jobmanager-lcgpbs -queue ppj /bin/hostname
https://grid002.tsukuba.jp.hep.net:20001/22442/1210670958/
$ globus-job-status https://grid002.tsukuba.jp.hep.net:20001/22442/1210670958/
$ globus-job-get-output https://grid002.tsukuba.jp.hep.net:20001/22442/1210670958/
grid002.tsukuba.jp.hep.net

RSL file

--- hostname.rsl ------------------------------------
& (count=1) (queue="ppj") (executable=/bin/hostname)
-----------------------------------------------------

$ globusrun -s -r grid002:2119/jobmanager-lcgpbs -f hello.rsl

おまけ(証明書の仕組み)

RSA の仕組み

適当な素数 p, q をもって来る。(例えば p=11, q=13, p*q=143)
Lをp-1とq-1の最小公倍数とする。L=LCM(p-1,q-1)。(L=60)
e を L と素である数とする。(e=7)
そして p*q と e を公開鍵として公開する。(p*q=143, e=7)
d = e^(-1) mod L ( e*d = 1 mod L) を選ぶ。これが秘密鍵となる。(d=43)
公開鍵を使った暗号化は、
  y= x^e mod p*q : x=5 => y=47
これを秘密鍵で復号化するためには、
  z= y^d mod p*q : y=47 => z=5
証明は省くが d*e = 1 mod LCM(p-1,q-1) の時 x^(d*e) =x mod p*q となる。(フェルマーの小定理,オイラーの公式)

秘密鍵 d は、pq が素因数分解されれば容易に求める事が可能だが、大きな数の素因数分解は、容易ではない。

復号化には、y^d という大きな数の指数を計算しなければならないが、この計算を高速化するために exponent1、expontent2、coefficient 等を使う。(CRT, 中国人余剰定理)

(p=11, q=13, p*q=143 の例)
modulus: p*q = 143
publicExponent: e = 7
privateExponent: d = 43
prime1: p = 11
prime2: q = 13
exponent1: d mod (p-1) = 43 mod 11-1 = 3
exponent2: d mod (q-1) = 43 mod 13-1 = 7
coefficient: q^-1 mod p = 13^-1 mod 11 = 6
x=27 を暗号化: x^e mod p*q = 27^7 mod 143 = 14
暗号化された数 y=14 を復号化する場合: y^e mod p*q = 14^43 mod 143 = 27
この計算は、
 cp = y^exp1 mod p = 14^3 mod 11 = 5
 cq = y^exp2 mod q = 14^7 mod 13 = 1
 h = coeff*(cp-cq) mod p = 6*(5-1) mod 11 = 2
 x = cq + (h*q) = 1 + (2*13) = 27
で計算できる。

サーバ証明書発行の流れ

1. サーバ管理者が RSA 秘密鍵を生成

$ openssl genrsa -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.........++++++
..................................++++++
e is 65537 (0x10001)

server.key ファイルができる。
中身は、-----BEGIN RSA PRIVATE KEY----- で始まり -----END RSA PRIVATE KEY----- で終るテキスト

$ openssl rsa -in server.key -text
で中身を確認できる。(32bitで作製した時の例)
Private-Key: (32 bit)
modulus: 3842464177 (0xe50759b1) ... 32bit=4byte の数、p*q に相当する。
publicExponent: 65537 (0x10001)  ... e に相当する。
privateExponent: 1982818033 (0x762f66f1) ... d に相当する。
prime1: 62639 (0xf4af) ... p に相当する。
prime2: 61343 (0xef9f) ... q に相当する。62639 * 61343 = 3842464177
exponent1: 12143 (0x2f6f) ... d mod (p-1)
exponent2: 60567 (0xec97) ... d mod (q-1)
coefficient: 41711 (0xa2ef) ... q^(-1) mod p つまり q*x = 1 mode p となる x

秘密鍵は、他人に見られてはならないものなので、chmod 400 server.key として permission を落す。

2. CSR の作成

RSA秘密鍵をもとにCSR(証明書要求)を作成する。
% openssl req -new -key server.key -out csr.pem
内容を確認するには、
% openssl req -in csr.pem -text
これには、
 Subject: 証明される内容
 RSAの公開鍵: Modulus(p*q)とExponent(e)
 Signiture: 証明書の内容のハッシュをとり、それを秘密鍵で暗号化したもの。これによって証明書要求の内容に改竄がないことが証明できる。defaultではハッシュ 関数として md5 が使われるが -sha1 オプションを付けて sha アルゴリズムを使用した方が安全。
が含まれる。

3. 認証局が受け取った CSRに署名

認証局が受け取った CSR に対し署名(証明される内容のハッシュを認証局の秘密鍵で暗号化)やその他の情報を付加しx509という形式にした証明書を生成し、サーバ管理者に送付。

自分で署名する場合:
openssl x509 -in csr.pem -out server.crt -req -signkey server.key (-days 365 -sha1)

Kerberosを使ったProxyの取得

$ kinit
$ kx509
$ klist -p

略語集

CRL Certificate Revocation Lists: CAにより発行される証明書の破棄リスト
CSR Certificate Signing Request: 証明書要求
DES Data Encryption Standard: 暗号化と復号化に共通の鍵を用いる「共通鍵暗号」の一種
DN  Distinguished Name: 証明書などに使われる識別子、RDN(Relative Distinguished Name)を順に並べたもの, C=Country(国), O=Organization(組織), OU=Organization Unit Name(部局), CN=Common Name(一般名)
EDG EU Data Grid
GASS Global Access to Secondary storage : 二次記憶への広域アクセス, Globusが提供するプロトコルのひとつ
GRAM Grid Resource Management Protocol : グリッド資源管理プロトコル, Globusが提供するプロトコルのひとつ
GSI Grid Security Infrastructure
JDL Job Description Language
LCAS Local Centre Authorization Service http://wiki.ngs.ac.uk/index.php?title=LCAS
PEM Privacy Enhanced Mail: 証明書、証明書要求、鍵などバイナリデータをBASE64でテキスト化した形式
PKI Public Key Infrastructure 公開鍵暗号基盤
RSL Globus Resource Specification Language
SHA Secure Hash Algorithm: デジタル署名に使われるハッシュ関数の一種(MD5より安全とされる)
SSL Secure Sockets Layer
TLS Transport Layer Security インターネット上で情報を暗号化して送受信するプロトコルの一つ (RFC4346)
WMS Workload Management System

リンク集

the condor homepage (http://www.cs.wisc.edu/condor/)
sungrid engine (http://www.sun.com/software/gridware/)
pbs (http://www.openpbs.org/which_pbs.html)
The main CAF homepage (for othe documents on glidecafs): http://cdfcaf.fnal.gov/
globus toolkit (for gatekeeper): http://www.globus.org/toolkit/
the main osg site (just to understand what they require to your site): http://www.opensciencegrid.org/