Secure Hadoop のアカウント管理

Prev Next

VPC環境で利用できます。

Secure Hadoopは Kerberosと LDAPベースのアカウントシステムを使用します。この2つの認証システムは2つのマスターノードに冗長化されており、エッジノードを介してアクセスできます。
ユーザーアカウントの追加/変更/削除タスクは、Kerberosと LDAPのそれぞれに対して個別にコマンドを実行する必要があります。また、両方のシステムでユーザー IDは必ず一致する必要があり、keytabファイルはユーザー認証のために必須です。

注意
  • Kerberosと LDAPのユーザー情報は Secure Hadoopを構成する重要な要素です。
  • クラスタによって作成・使用されている principal、keytab、ldap情報の変更/削除時にクラスタが誤動作する場合があります。
  • ただし、ユーザーが直接作成した principal、ldap情報は例外です。

Kerberos

Kerberosはマスターノードからアクセスできます。
管理者シェルで principalを制御する方法は、次の通りです。

  1. 管理者シェルにアクセスします。

    kadmin.local
    
  2. principalを新規作成します。

    # ランダムキーで principalを作成
    addprinc -randkey user1@USER.GUIDE
    # 直接パスワードを入力して principalを作成
    addprinc user1@USER.GUIDE
    
  3. principalパスワードを変更します。

    change_password user1@USER.GUIDE
    
  4. principal keytabファイルをダウンロードします。

    ktadd -k /tmp/user1.keytab user1@USER.GUIDE
    
  5. keytabファイルを使用して principalでログインします。

    kinit -kt /tmp/user1.keytab user1@USER.GUIDE
    
  6. principalのログインステータスを確認します。

    # 現在 vmにログインしているユーザーの principal情報
    klist 
    # ダウンロードした keytabの principal情報 
    klist -kt /tmp/user1.keytab
    
  7. principalを削除します。

    delprinc user1@USER.GUIDE
    

LDAP

LDAPはユーザー情報を保存・管理するディレクトリサービスで、Secure Hadoopでは Kerberosと連携して認証と権限管理を行います。

  1. ユーザーを登録します。

    # uidNumber`には重複しない一意の数字を使用します。
    ldif=/tmp/add-account.ldif
    HASH_USER_PW=$(slappasswd -h "{SSHA}" -s "新規_パスワード")
    
    cat <<EOF | tee $ldif
    dn: uid=アカウント名,ou=users,dc=USER,dc=GUIDE
    objectClass: inetOrgPerson
    objectClass: posixAccount
    objectClass: top
    cn: ユーザー名
    sn: ユーザー名
    uid: ユーザー名
    uidNumber: 30001
    gidNumber: 30001
    homeDirectory: /home/ユーザー名
    loginShell: /bin/bash
    userPassword: ${HASH_USER_PW}
    EOF
    
    ldapadd \
      -H ldap://localhost:389 \
      -D "cn=root,dc=USER,dc=GUIDE" \
      -w "ケルベロス_パスワード" \
      -f "$ldif"
    
  2. ユーザーをグループに追加します。

    ldif=/tmp/modify-group.ldif
    
    cat <<EOF | tee $ldif
    dn: cn=グループ名,ou=groups,dc=USER,dc=GUIDE
    changetype: modify
    add: memberUid
    memberUid: ユーザー名
    EOF
    
    ldapmodify \
      -H ldap://localhost:389 \
      -D "cn=root,dc=USER,dc=GUIDE" \
      -w "ケルベロス_パスワード" \
      -f "$ldif"
    
  3. ユーザーを確認します。

    ldapsearch \
      -H ldap://localhost:389 \
      -D "cn=root,dc=USER,dc=GUIDE" \
      -w "ケルベロス_パスワード" \
      -b "dc=USER,dc=GUIDE" \
      "(uid=ユーザー名)"
    
  4. ユーザーのパスワードを変更します。

    ldif=/tmp/modify-account.ldif
    HASH_USER_PW=$(slappasswd -h "{SSHA}" -s "新規_パスワード")
    
    cat <<EOF | tee $ldif
    dn: uid=アカウント名,ou=users,dc=USER,dc=GUIDE
    changetype: modify
    replace: userPassword
    userPassword: ${HASH_USER_PW}
    EOF
    
    ldapmodify \
      -H ldap://localhost:389 \
      -D "cn=root,dc=USER,dc=GUIDE" \
      -w "ケルベロス_パスワード" \
      -f "$ldif"
    
  5. ユーザーを削除します。

    ldapdelete \
      -H ldap://localhost:389 \
      -D "cn=root,dc=USER,dc=GUIDE" \
      -w "ケルベロス_パスワード" \
      "uid=アカウント名,ou=users,dc=USER,dc=GUIDE"