GridFTP 安装
该页面描述了安装和配置GridFTP服务的向导,有任何问题都可以联系 Bogdan Ludwiczak.
Globus Toolkit/GridFTP - 安装
本小节大概描述一下 Globus Toolkit ver. 4.x 的安装过程.
Globus Toolkit 提供了两个安装版本,一个是二进制的,一个是源码包的。它也提供了一个可用的完全安装版本,但是只作为 Java WS-core 的一部分。 在介绍安装步骤之前,需要说明一下 QosCosGrid 的基础安装步骤,其中的一部分就是 GridFTP 相关的内容。
下面是编译和安装 Globus Toolkit ,其中包括 GridFTP 后台进程的说明。
备注: 这是一个关于安装GridFTP服务的离线安装过程,所有详细的信息可以查看官方的 Globus文档 (Globus documentation)。
- 检查目标系统是否有下列软件:
- gcc (latest 3.4 or 4.1)
- GNU tar, sed, make
- Perl >5.6
- 创建一个专用的,没有特权的用户,名字为 globus 。用这个用户来安装和部署 Globus Toolkit 过程,并做一些管理相关的任务。
- 创建部署目录。
- 确认用户 globus 拥有在安装目录里面的读写权限。
备注: 使用 globus 这个用户执行下面的步骤.
- 下载和解压 Globus Toolkit ver.4.2.x 所有的源码安装包 (可以的下载地址为 http://www.globus.org/toolkit/downloads/4.2.1/#source Globus Toolkit )
- 更改当前的工作目录为源码目录 (比如 ~/gt4.2.x-all-source-installer)
- 设置环境变量 GLOBUS_LOCATION 指向安装目录 (e.g. /opt/globus/gt421)
- 然后使用 ./configure 来设置编译和安装选项。至少也要使用一些 --prefix 选项来设置部署目录。
./configure --prefix=${GLOBUS_LOCATION}
./configure --disable-system-openssl --prefix=${GLOBUS_LOCATION}
- 编译并安装 Globus Toolkit 使用下面的命令:
make gridftp make install
make gridftp 2>&1 | tee build.log make install
- GT4 不像其他的软件一样会直接生产目标位置 ($GLOBUS_LOCATION)
- 假如你忽略 gridftp 来make整个的 Globus Toolkit 的话,将会花费好几个小时才能完成。
- 在执行 make install 来解析Globus 配置文件的时候将会被初始化。
- 你也可以单独选择编译 GridFTP 服务器或者客户端工具,通过指定 globus_gridftp_服务器或者 globus-data-management-client 这两个选项来完成。
下面的步骤可以完成 Globus Toolkit/GridFTP 安装。 下面的命令是典型的安装过程,shell 命令如下:
bogdanl@cress ~ $ su - cress ~ # useradd -m globus cress ~ # mkdir /opt/globus cress ~ # chown globus:users /opt/globus cress ~ # su - globus globus@cress ~ $ wget http://www-unix.globus.org/ftppub/gt4/4.2.1/installers/src/gt4.2.1-all-source-installer.tar.bz2 globus@cress ~ $ tar xjf gt4.2.1-all-source-installer.tar.bz2 globus@cress ~ $ export GLOBUS_LOCATION=/opt/globus/gt421 globus@cress ~ $ cd gt4.2.1-all-source-installer globus@cress ~/gt4.2.1-all-source-installer $ ./configure --prefix=${GLOBUS_LOCATION} \ globus@cress ~/gt4.2.1-all-source-installer $ make gridftp cd gpt && OBJECT_MODE=32 ./build_gpt ... Your build completed successfully. Please run make install. globus@cress ~/gt4.2.1-all-source-installer $ make install
Globus Toolkit/GridFTP - 基本配置
安全
在 Globus Toolkit 安装完成之后, 在启动 Globus 服务之前,有好几个方面的 GSI 安全相关的项需要配置:
- 配置 Globus (and thus GridFTP daemon) 的认证证书,需要设置 CAs (Certificate Authorities), 例如. 放置信任的认证证书在 CAs 指定的目录里。 - CA 只在CA证书存在,并且名字和目录是合法的情况下才是一个被信任的CA证书。 然而, pre-ws 服务(包括 GridFTP), 签名的公有密钥文件也必须存在相同的位置。 换句话说,需要给出两个被信任的CA文件:
- cert_hash.0 - the trusted CA certificate and
- cert_hash.signing_policy - the signing policy.Globus services and tools looks for that directory in following locations:
- the value of $X509_CERT_DIR environment variable if it is set and the directory exists,
- otherwise, in $HOME/.globus/certificates if it exists,
- otherwise, in /etc/grid-security/certificates if it exists,
- otherwise, in $GLOBUS_LOCATION/share/certificates if it exists.
备注: 我们建议使用 /etc/grid-security/certificates 作为系统认证 CAs 的目录, 记住$X509_CERT_DIR和 $HOME/.globus/certificates 有更高级的优先权。
The cert_hash.0, i.e. certificate of the CA, is provided by CA, 通常使用一些合适的哈希名。哈希名由8个16进制数字和后缀 ".0"组成 (例如8a661490.0). 哈希值可以用下面的命令来获得 ($GLOBUS_LOCATION/bin/ 下面的命令必须可用):
openssl x509 -hash -noout -in ca_certificate
- cert_hash.signing_policy 通常也由 CA提供, 但是它可以手工构造. 这个签名的方针文件有下面的格式:
access_id_CA X509 'CA Distinguished Name' pos_rights globus CA:sign cond_subjects globus '"Name Pattern1" "Name Pattern2" ...'
openssl x509 -subject -noout -in cert_hash.0
- "Name patternX" 是一个字符串,被用来匹配CA证书给出的正确的名字,CA的名字通常是一个带 * 号的正则表达式。例如:
"/C=PL/O=GRID/CN=Polish Grid CA" -> '"/C=PL/O=GRID/*"'
- 通过 grid-cert-request 命令来配置正确的缺省值,一遍生成认证请求。下面的文件需要正确的配置来启用 Globus tools 来生成验证证书的请求:
- /etc/grid-security/globus-user-ssl.conf - defines the distinguished name to use for a user's certificate request.
- /etc/grid-security/globus-host-ssl.conf - defines the distinguished name for a host and service certificate request.
- /etc/grid-security/grid-security.conf - is a main configuration file that contains the name and email address for the given CA.
这些文件通常由 CA 提供, i.e. PL-Grid. 典型的 CA 配置文件被放置在 /etc/grid-security/certificates/ 目录,有一些附加的扩展.CA_hash_name 和对应的符号链接备创建在/etc/grid-security/里。 Globus Toolkit提供了 grid-default-ca 命令,该命令会自动创建合适的链接。
请求主机和用户的 X.509 证书
所有的 Globus 服务(包括GridFTP) 都需要一个主机 (or service) 认证操作过程。 每个用户都需要一个用户认证来使用 Globus 服务。你可以使用 Globus命令 grid-cert-request 来生成host/users 认证请求,然后发送到你的 CA 来进行签名。 确认 CA 配置文件和认证是在你生成请求之前。这么命令创建了3个文件:
- 一个空文件 /etc/grid-security/hostcert.pem 或者 ~/.globus/usercert.pem,
- /etc/grid-security/hostkey.pem 或者 ~/.globus/userkey.pem 文件包括host/user 必须被加密后的私有秘钥 - 确认 unix 访问权限模式被设置为 0400 或者 0600 。
- /etc/grid-security/hostcert_request.pem 或者 ~/.globus/usercert_request.pem 文件包含实践发送到CA的签名请求。
备注: 在你能够使用 grid-cert-request 命令之前, 你需要适配 Globus 配置脚本为你的shell。例如$GLOBUS_LOCATION/etc/globus-user-env.csh 或者$GLOBUS_LOCATION/etc/globus-user-env.sh
发送一个最新生成的认证请求(例如 /etc/grid-security/hostcert_request.pem 或者 ~/.globus/usercert_request.pem )到对应的 CA ,然后等待认证,认证信息由你的CA发送返回。保存你新的认证到hostcert.pem 或者usercert.pem。现在,请求文件可以被删除了。主机认证和私有秘钥为root用户所有。指定身份认证的映射信息。 Globus 服务映射到本地的身份由名字来区分 (retrieved from certificates) Unix账号,可以看grid-mapfile。映射关系有下面的表单:
"Distinguished Name" local_name(每行定义一个映射关系)。 这leu让用户登录,创建账号和添加映射到站点的 grid-mapfile。 Globus 将会查找下列位置的文件:
- 假如设置了 GRIDMAP 环境变量,可以看其值。
- 否则,假如是以root用户运行服务,可以看映射文件 /etc/grid-security/grid-mapfile,
- 否则,可以看Grid映射文件 $HOME/.gridmap
- 否则,就是看 /etc/grid-security/grid-mapfile.
备注: 在 QosCosGrid 中,可能会生成一个新用户的 X.509 证书,更多信息请看 user-friendly way
防火墙配置
关于GT防火墙的详细信息,你可以在这个网址找到 http://www.globus.org/toolkit/security/firewalls/. 这个段落只列出了最基本的防火墙配置需求,给出了一些最基础的信息。启用TCP远程访问 Globus Toolkit 服务需要开放的链接:
- 固定端口: 2811 该端口为 GridFTP 后台进程端口
- 临时 TCP 端口: 各种 Globus 服务需要任意的选择TCP端口的范围。它是环境变量 GLOBUS_TCP_PORT_RANGE 可以控制的。确认它已经在后台进程的环境变量中被定义了 (i.e. put it in (x)inetd configuration entries).
浏览下面给出的 Globus/GridFTP 通信流量显示出的信息可以看到上面提到的 Globus TCP 端口范围。
GridFTP 后台进程
在成功安装 GlobusToolkit之后, GridFTP 后台进程的二进制文件为: $GLOBUS_LOCATION/sbin/globus-gridftp-server 文件.。 后天进程能够与独立模式运行,但是我们建议使用使用 (x)inetd 模式。 用下面的方式进行配置,首先添加下面的入口/etc/services 文件:
gsiftp 2811/tcp # GridFTP (Port 2811 is the IANA registered GridFTP port)
然后添加适当的入口 (x)inetd 配置文件。 记得在(x)inetd的整个环境变量中设置 LD_LIBRARY_PATH, GLOBUS_LOCATION和 GLOBUS_TCP_PORT_RANGE 环境变量, 在 xinetd 中的例子如下:
service gsiftp { instances = 100 cps = 50 10 per_source = 50 socket_type = stream wait = no user = root env = LD_LIBRARY_PATH=/opt/globus/lib env += GLOBUS_LOCATION=/opt/globus env += GLOBUS_TCP_PORT_RANGE=9000,9999 server = /opt/globus/sbin/globus-gridftp-server server_args = -i -c /opt/globus/etc/gridftp.conf log_on_success += DURATION log_on_failure += nice = 10 disable = no }
请注意,上面的例子指定了 grid-ftp 的配置文件 (-c .../gridftp.conf in server_args line). It is not required - GridFTP daemon should work without this file. 一个有用的配置文件的例子如下:
log_level ALL (or 'EERROR', 'WARN', 'INFO', 'DUMP') log_module stdio log_single /var/log/gridftp
它将启用日志功能,在分析问题时是很有用的。最后,重新启动 (x)inetd 来激活 GridFTP daemon:
/etc/init.d/xinetd restart
用户配置
所有的 Globus Toolkit 命令都需要正确的配置环境变量。 Globus Toolkit 提供脚本来达到配置环境变量的目的。GT配置用户环境变量的命令如下 (bash shell):
export GLOBUS_LOCATION=/opt/globus/gt421 . $GLOBUS_LOCATION/etc/globus-user-env.sh
csh shell 如下:
setenv GLOBUS_LOCATION /opt/globus/gt421 source $GLOBUS_LOCATION/etc/globus-user-env.csh
接下来,你必须获得用户证书 (描述文档为 Requesting host and user X.509 certificates ) 然后运行命令 grid-proxy-init 来创建用户代理:
grid-proxy-init Your identity: /C=PL/O=GRID/O=PSNC/CN=Bogdan Ludwiczak Enter GRID pass phrase for this identity: Creating proxy ....................................................... Done Your proxy is valid until: Tue Apr 29 21:02:33 2008
在接下来,成为root用户,创建映射文件 /etc/grid-security/grid-mapfile. 你可以使用你的收藏夹来编辑,添加类似下面的一行代码即可:
"/C=PL/O=GRID/O=PSNC/CN=Bogdan Ludwiczak" bogdanl
或者使用 GT grid-mapfile-add-entry 命令:
grid-mapfile-add-entry -dn "/C=PL/O=GRID/O=PSNC/CN=Bogdan Ludwiczak" -ln bogdanl
备注: "bogdanl" 在上面的例子中是一个UNIX账号名.
现在你可以使用 globus-url-copy 这个工具来传输文件了:
globus-url-copy gsiftp://node1.qoscosgrid.man.poznan.pl/~/file file:///tmp/file.test globus-url-copy gsiftp://node1.qoscosgrid.man.poznan.pl/~/file gsiftp://node1.qoscosgrid.man.poznan.pl/~/file2 globus-url-copy gsiftp://node1.qoscosgrid.man.poznan.pl/~/file gsiftp://node2.qoscosgrid.man.poznan.pl/~/file2
快速开始
- 创建 globus 用户和安装目录,设置 globus 用户使用这个目录的权限:
bogdanl@cress ~ $ su - cress ~ # useradd -m globus cress ~ # mkdir /opt/globus cress ~ # chown globus:users /opt/globus
- 使用 globus 用户登录:
cress ~ # su - globus
- 下载 Globus Toolkit 源代码安装包,然后解压他:
globus@cress ~ $ wget http://www-unix.globus.org/ftppub/gt4/4.2.1/installers/src/gt4.2.1-all-source-installer.tar.bz2 globus@cress ~ $ tar xjf gt4.2.1-all-source-installer.tar.bz2
- 配置和编译源代码:
globus@cress ~ $ cd gt4.2.1-all-source-installer globus@cress ~ $ export GLOBUS_LOCATION=/opt/globus/gt421 globus@cress ~/gt4.2.1-all-source-installer $ ./configure --prefix=${GLOBUS_LOCATION} \ globus@cress ~/gt4.2.1-all-source-installer $ make gridftp cd gpt && OBJECT_MODE=32 ./build_gpt ... Your build completed successfully. Please run make install. globus@cress ~/gt4.2.1-all-source-installer $ make install
- 请求主机认证。
- Start gridftp-server either standalone or by (x)inetd daemon
- 假如你打算使用 xinetd 后天进程,请添加 gridftp 到 /etc/services:
bogdanl@cress ~ $ su - cress ~ # echo "gsiftp 2811/tcp # GridFTP" >> /etc/services
- 创建新的 xinetd 配置文件给 gridftp 服务
cress ~ # cat /etc/xinetd.d/gridftp service gsiftp { instances = 100 cps = 50 10 per_source = 50 socket_type = stream wait = no user = root env = LD_LIBRARY_PATH=/opt/globus/lib env += GLOBUS_LOCATION=/opt/globus env += GLOBUS_TCP_PORT_RANGE=9000,9999 server = /opt/globus/sbin/globus-gridftp-server server_args = -i -c /opt/globus/etc/gridftp.conf log_on_success += DURATION log_on_failure += nice = 10 disable = no }
- 重新启动 xinetd:
cress ~ # /etc/init.d/xinetd restart
- 假如你打算使用 xinetd 后天进程,请添加 gridftp 到 /etc/services:
- 测试:
bogdanl@cress ~ $ telnet cress 2811 Trying 150.254.149.134... Connected to cress.man.poznan.pl. Escape character is '^]'. 220 cress.man.poznan.pl GridFTP Server 2.3 (gcc32dbg, 1144436882-63) ready. bogdanl@cress ~ $ export GLOBUS_LOCATION=/opt/globus/gt421 bogdanl@cress ~ $ . $GLOBUS_LOCATION/etc/globus-user-env.sh bogdanl@cress ~ $ grid-proxy-init bogdanl@cress ~ $ globus-url-copy gsiftp://cress/~/file file:///tmp/file.test bogdanl@cress ~ $ globus-url-copy gsiftp://cress/~/file gsiftp://cress/~/file2
其他调整
请读这个页面 GridFTP tuning.
假如你计划传输大文件,我们建议你调整系统的TCP配置参数 TCP keepalive: :
echo "600" > /proc/sys/net/ipv4/tcp_keepalive_time echo "75" > /proc/sys/net/ipv4/tcp_keepalive_intvl echo "9" > /proc/sys/net/ipv4/tcp_keepalive_probes
要永久的改变这个配置,请把它添加到 /etc/sysctl.conf 配置文件中