Я пытаюсь защитить 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, и наши системные тесты запускаются в этом режиме. Я не видел этой проблемы в этом режиме).