哈哈,终于弄明白globus-stop-Container的权限问题了!
今天测试了下globus-start-container和globus-stop-container的所用的证书,原来globus-start-container用的证书和私钥分别是containercert.pem和containerkey.pem(位于/etc/grid-security,是hostcert.pem和hostkey.pem的拷贝),而globus-stop-container用的代理证书(proxy certificate)是/tmp/x509up_uxxx,x509up_uxxx是在grid-proxy-init时由/home/globus/.globus/usercert.pem和/home/globus/.gloubs/userkey.pem生成的。
在globus的文档中,写到了globus-stop-container调用了ShutdownService,而这个服务默认使用"self“授权,也就是说调用ShutdownService的证书必须和打开服务的证书一样,如果/home/gloubs/.gloubs下的证书和私钥不是host的,那么这个调用就会失败。 在上篇文章中,我转了一种解决方法,就是为host生成一个代理证书,设置变量X509_USER_CERT为这个代理证书的路径,这样的话globub-stop-container就会使用host代理证书关闭容器。在globus的文档中,提到了这个服务权限可以授权给其他用户,经过一个多小时的研究,终于让我发现了他的授权方法:
1. 新建一个安全配置文档gsi-security-config.xml(我保存在$GLOBUS_LOCATION/etc/globus_wsrf_core/)
$ cat gsi-security-config.xml
<securityConfig xmlns="http://www.globus.org">
<auth-method>
<GSITransport/>
<GSISecureConversation/>
<GSISecureMessage/>
</auth-method>
<authz value="gridmap"/>
</securityConfig>
在原来的配置文件中authz的value属性为self,这里我修改成gridmap,这样用/etc/grid-security/grid-mapfile来授权用户调用 ShutdownService。value值还能修改为none,任意用户都可调用ShutdownService。
2.修改文件$GLOBUS_LOCATION/etc/globus_wsrf_core/server-configer.wsdd,把ShutdownService的securityDescriptor值改为我们新写的gsi-security-config.xml的路径。
$ grep ShutdownService server-config.wsdd -C 2
<service name="ShutdownService" provider="Java:RPC"
use="literal" style="document">
<parameter name="allowedMethods" value="*"/>
<parameter name="className"
value="org.globus.wsrf.container.ShutdownService"/>
<wsdlFile>share/schema/core/management/shutdown_service.wsdl</wsdlFile>
<parameter name="securityDescriptor" value="etc/globus_wsrf_core/gsi-security-config.xml"/>
好了,配置完成,打开、关闭试试,应该可以了吧。
========================================
关闭非安全传输的容器还有问题,把gsi-security-config.xml中auth-method的内容全删掉。我真无聊啊,ctrl+c就能解决的问题……