Security
开箱即可用的HttpFS既支持pseudo认证,也支持Kerberos HTTP SPNEGO认证。
Pseudo Authentication
用Pseudo认证时,用户名必须在HttpFS URL的查询参数里通过user.name=<USERNAME>指定。例如:
$ curl"http://<HTTFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=babu"
Kerberos HTTP SPNEGOAuthentication
Kerberos HTTP SPNEGO认证需要一个支持KerberosHTTP SPNEGO协议的工具或者库。
重要的:如果使用curl,curl的版本必须支持GSS(如果支持的话,curl –v命令会打印出“GSS”)。
例如:
$ kinit
Please enter the password for tucu@LOCALHOST:
$ curl --negotiate -u foo "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"
Enter host password for user 'foo':
注意:--negotiate 需要-u 用户选项,但是它不使用。当被要求输入密码时直接按回车,使用任何的值作为User都将被忽略。
Remembering Who I Am (Establishingan Authenticated Session)
在大多数的认证机制中,Hadoop HTTP认证机制只认证用户一次,给其一个短暂的Token,为后续的请求提供认证验证凭证。这个Token记录在HTTP Cookie中。
当使用像curl这样的工具时,Token必须在第一次为第一次请求做认证时被存储,在后续的请求中这个Token都要提交。使用curl的-b和-c选项,可以发送和保存必要的HTTP Cookie信息。
例如,第一次请求被认证时应该保存接收到的HTTP Cookie。
用Pseudo认证:
$ curl -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir&user.name=babu"
用Kerberos HTTP SPNEGO认证:
$ curl --negotiate -u foo -c ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=homedir"
然后,后续的操作转发先前接收到的HTTP Cookie:
$ curl -b ~/.httpfsauth "http://<HTTPFS_HOST>:14000/webhdfs/v1?op=liststatus"