복붙노트

[HADOOP] Kerberos를 사용한 Hadoop 웹 인증

HADOOP

Kerberos를 사용한 Hadoop 웹 인증

kerberos를 사용하여 hadoop을 구성했지만 모든 것이 잘 작동하고 hdfs를 탐색하고 작업을 제출할 수 있습니다. 그러나 http 웹 인증에 실패했습니다.

나는 HTTPSNEGO를 지원하는 cdh3u2에서 hadoop-0.20.2를 사용합니다.

core-site.xml의 HTTP 인증 관련 구성은 다음과 같습니다.

  <!-- HTTP web-consoles Authentication -->
  <property>
    <name>hadoop.http.filter.initializers</name>
    <value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
  </property>

  <property>
    <name>hadoop.http.authentication.type</name>
    <value>kerberos</value>
  </property>

  <property>
    <name>hadoop.http.authentication.token.validity</name>
    <value>36000</value>
  </property>

  <property>
    <name>hadoop.http.authentication.signature.secret.file</name>
    <value>/home/hadoop/hadoop/conf/http-secret-file</value>
  </property>

  <property>
    <name>hadoop.http.authentication.cookie.domain</name>
    <value></value>
  </property>

  <property>
    <name>hadoop.http.authentication.simple.anonymous.allowed</name>
    <value>false</value>
  </property>

  <property>
    <name>hadoop.http.authentication.kerberos.principal</name>
    <value>HTTP/hz169-91.i.site.com@I.NETEASE.COM</value>
  </property>

  <property>
    <name>hadoop.http.authentication.kerberos.keytab</name>
    <value>/home/hadoop/hadoop/conf/http.keytab</value>
  </property>
</configuration>

시작 중에 http 인증이 성공했습니다.

2011-11-15 15:43:59,106 INFO org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: Initialized, principal [HTTP/hz169-91.i.site.com@I.NETEASE.COM] from keytab [/home/hadoop/hadoop/conf/http.keytab]

코드를 살펴본 후, 인증 필터가 doFilter 동안 null 토큰을 얻음을 알았습니다. 인증 (아래 코드)이 시작되지만 httpservletrequest의 인증이 null이므로 내 페이지를 다시로드 할 때마다 하나의 로그가 나타납니다.

2011-11-15 15:47:52,190 WARN org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: SPNEGO starting
// org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler
public AuthenticationToken authenticate(HttpServletRequest request, final HttpServletResponse response)
    throws IOException, AuthenticationException {
    AuthenticationToken token = null;
    String authorization = request.getHeader(KerberosAuthenticator.AUTHORIZATION);
    if (authorization == null || !authorization.startsWith(KerberosAuthenticator.NEGOTIATE)) {
      response.setHeader(KerberosAuthenticator.WWW_AUTHENTICATE, KerberosAuthenticator.NEGOTIATE);
      response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      if (authorization == null) {
        LOG.warn("SPNEGO starting");
      } else {
        LOG.warn("'" + KerberosAuthenticator.AUTHORIZATION + "' does not start with '" +
            KerberosAuthenticator.NEGOTIATE + "' :  {}", authorization);
      }

구성 오류가 있거나 브라우저가 SPNEGO를 지원하지 않습니다. 우분투 11.04에서 Chrome v16을 사용합니다.

아무도 내가 알아낼 수있는 단서가 있습니까?

감사.

해결법

  1. ==============================

    1.첫째, SPNNEGO 용 Hadoop 웹 콘솔을 구성하는 방법에 대한 전체 예제를 게시 해 주셔서 감사합니다. 좋은 예를 찾는 데 어려움이 있습니다.

    첫째, SPNNEGO 용 Hadoop 웹 콘솔을 구성하는 방법에 대한 전체 예제를 게시 해 주셔서 감사합니다. 좋은 예를 찾는 데 어려움이 있습니다.

    당신의 예제는 설정 파일에 대한 경로를 수정 한 후에 작동합니다 (hadoop.http.authentication.signature.secret.file은 / dev / random에서 임의의 바이트를 가져 와서 만들었습니다. 그 이론을 뒷받침하는 어떠한 문서도 찾을 수 없다).

    Chrome은 버전 6.0.472 이상의 SPNNEGO를 지원합니다. 그러나 Linux 및 OSX에서는 여기에 문서화 된대로 사용할 수있는 서버 목록을 전달해야합니다. 그래서, 크롬을 시작할 때 * - auth-server-whitelist = "* example.com, * foobar.com, baz"를 cmdline에 추가하십시오.

    이것을 디버깅하는 또 다른 방법은 간단한 브라우저를 사용하는 것입니다. 컬이 GSS 협상을 지원한다면 컬을 권하고 싶습니다. curl --version을 실행하여 확인하십시오.

    $ curl --version
    curl 7.19.7 (i486-pc-linux-gnu) libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15
    Protocols: tftp ftp telnet dict ldap ldaps http file https ftps 
    Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
    

    GSS-Negotiate가 기능 목록에 있으면 컬을 사용하여 예를 들어 namenode 웹 콘솔에 액세스 할 수 있습니다.

    $ curl -v -u foo --negotiate http://your.namenode.tld:50070
    

    호스트 암호를 묻는 메시지가 표시되면 enter를 누르십시오.

    이렇게하면 클라이언트와 서버간에 일어나는 일에 대해 더 잘 이해할 수 있습니다.

  2. from https://stackoverflow.com/questions/8133256/hadoop-web-authentication-using-kerberos by cc-by-sa and MIT license