Назад | Перейти на главную страницу

Hive Server2 не олицетворяет HDFS

Я пытаюсь защитить Hive с помощью системы безопасности на основе хранилища. Я использую Kerberos и LDAP.

Я пытаюсь получить Hive для создания каталогов и файлов в качестве пользователя (и их основной группы) в HDFS. Таким образом я надеюсь ограничить доступ к базам данных на основе членства в группах.

Так, например, когда я аутентифицирован как пользователь import (в группе import) с помощью Kerberos, используя kinit (import @ REALM) и запускаю beeline 'CREATE DATABASE test;' Ожидаю увидеть:

drwxr-x---   - import     imports             0 2015-08-28 10:16 /user/hive/warehouse/test.db

Но вот что я получаю:

drwxr-x---   - hive       data                0 2015-08-28 10:16 /user/hive/warehouse/test.db

Обратите внимание, что разрешение каталога хранилища:

drwxrwxr-t   - hive       data                0 2015-08-28 11:14 /user/hive/warehouse

Также я заметил, что когда я меняю владельца вручную, используя hadoop fs -chown Я все еще могу удалить базы данных, которые мне не принадлежат! Также когда я использую hadoop put Я получаю правильные разрешения.

Возможно ли такое в Hive?

Моя текущая конфигурация:

core-site.xml:

<property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
</property>
<property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
</property>

<property>
    <name>hadoop.proxyuser.hive.hosts</name>
    <value>localhost,master.dev.data</value>
</property>
<property>
    <name>hadoop.proxyuser.hive.groups</name>
    <value>*</value>
</property>

hdfs-site.xml:

<property>
    <name>fs.permissions.umask-mode</name>
    <value>027</value>
</property>

hive-site.xml:

<property>
    <name>hive.warehouse.subdir.inherit.perms</name>
    <description>true if table directories should inherit the permissions of the warehouse or database directory instead of being created with permissions derived from dfs umask</description>
    <value>false</value>
</property>

<property>
    <name>hive.metastore.pre.event.listeners</name>
    <value>org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>
</property>

<property>
    <name>hive.security.metastore.authenticator.manager</name>
    <value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
</property>

<property>
    <name>hive.security.metastore.authorization.manager</name>
    <value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
</property>

<property>
    <name>hive.security.metastore.authorization.auth.reads</name>
    <value>true</value>
</property>

<property>
    <name>hive.metastore.execute.setugi</name>
    <value>true</value>
</property>

<property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
</property>

Я пропустил настройки ключа / принципала Kerberos, но Hive Server2 и Metastore используют принципала hive/master.host@REALM, а в Yarn / HDFS также включен Kerberos; все узлы получают пароль / группу от LDAP.

Версии:

hadoop-0.20-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-client-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-namenode-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-historyserver-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-resourcemanager-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hive-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-jdbc-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-metastore-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-server2-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch

Вы можете попробовать начать hiveserver2 со встроенным хранилищем метаданных?

hiveserver2 -hiveconf hive.metastore.uris=' ' ..

Это может быть обходным путем, и он покажет, является ли это ошибкой только в режиме удаленного хранилища метаданных.

(По историческим причинам в Hortonworks мы использовали хранилище метаданных во встроенном режиме с HS2, и наши системные тесты запускаются в этом режиме. Я не видел этой проблемы в этом режиме).