Сервисный билет в Kerberos - безопасность Hadoop
Я пытаюсь защитить свой кластер hadoop с помощью kerberos. Я могу генерировать TGT с помощью команды kinit. Но за этим я застрял.
1) Я хотел бы знать, что на самом деле означает "serviceTicket". (Не в качестве описания); Используя какую команду / код мы можем использовать билет службы?
2) Какая польза от файла ".keyTab" и ".keyStore"?
История Hadoop-Kerberos
Пользователь отправляет запрос аутентификации в KDC с помощью команды kinit.
KDC отправляет обратно зашифрованный билет.
Пользователь расшифровывает билет, предоставив свой пароль.
4. После проверки подлинности, Пользователь отправляет запрос на сервисный билет.
5. KDC проверяет билет и отправляет обратно сервисный билет.
Пользователь представляет сервисный билет на hdfs@KERBEROS.com.
hdfs@KERBEROS.com расшифровывает тикет, подтверждая личность пользователя
На 4-м шаге "запрос на сервисный билет"; что это на самом деле означает? Чтобы получить TGT, мы используем команду "kinit". Точно так же, какова процедура / метод для получения сервисного билета?
Мой процесс в деталях:
- LDAP: ActiveDirectory
- Kerberos: установлен в Ubuntu
- Кластер Hadoop: настроен на машинах Ubuntu с одним ведущим и одним ведомым
- Ubuntu имя пользователя: labuser
Царство в Ubuntu: KERBEROS.COM
План заключается в обеспечении безопасности hadoop с помощью Kerberos и Active Directory.
- Сгенерированный TGT(с помощью команды kinit) на компьютере Kerberos Server для пользователей, присутствующих в ActiveDirectory
Далее, чтобы интегрировать Kerberos с кластером Ubuntu Hadoop, сделал следующее,
1) Команда для создания принципала: addprinc -randkey namenode/labuser@KERBEROS.COM
2) Команда для создания таблицы ключей: xst -norandkey -k namenode.service.keytab namenode/labuser@KERBEROS.COM (или) ktadd -k namenode.service.keytab namenode/labuser@KERBEROS.COM
3) Добавлены свойства в конфигурационные файлы hadoop с соотв., В Kerberos.
Взглянув на кластер hadoop, мы узнаем, что Login успешно работает для всех сервисов (Namenode,Datanode,Resource Manager и Node Manager).
- Информация журнала:INFO org.apache.hadoop.security.UserGroupInformation: вход в систему успешен для пользователя dn/labuser@KERBEROS.COM с использованием файла keytab * /home/labuser/hadoopC/etc/hadoop/dn.service.keytab
Тем не менее кластер Hadoop не запущен, с ошибкой в
DataNode(java.lang.RuntimeException: Невозможно запустить безопасный кластер без привилегированных ресурсов)
NameNode (java.io.FileNotFoundException: /home/labuser/.keystore (нет такого файла или каталога))
Пожалуйста, предложите, требуют ли вышеупомянутые процессы Kerberos каких-либо изменений? Если да, пожалуйста, обоснуйте
2 ответа
Kerberos API получит билет службы автоматически, если протокол для службы включен Kerberos.
Серверу нужен секретный ключ, соответствующий hdfs@KERBEROS.com в файле keytab, который он может прочитать, чтобы расшифровать любые входящие соединения. Как правило, вы создаете это с помощью команды kadmin и устанавливаете секрет в файле keytab с помощью соответствующей утилиты (она отличается для разных версий исходного кода Kerberos.)
Как правило, если у вас есть kinit'd в качестве клиента, вам никогда не потребуется запускать другую команду explict kerberos для получения билетов на обслуживание, ПРЕДОСТАВЛЯЯ, что все серверы и клиенты настроены правильно. В этом вся суть Kerberos.
Если вы действительно хотите получить сервисный билет для тестирования, вы можете использовать команду kvno.
http://web.mit.edu/kerberos/krb5-1.13/doc/user/user_commands/kvno.html
Я нашел решение для:
NameNode (java.io.FileNotFoundException: /SOME/PATH/.keystore (нет такого файла или каталога))
Попробуйте настроить параметр HTTP_ONLY в hdfs-site.xml:
<property>
<name>dfs.http.policy</name>
<value>HTTP_ONLY</value>
</property>
Если вам нужен https, вам необходимо дополнительно сгенерировать сертификаты и настроить хранилище ключей.