Керберизация с предустановленным FreeIPA при отсутствии прав администратора
Создание пользователя IPA без прав администратора
Если у вас нет пользователя IPA без прав администратора, то его можно создать в FreeIPA UI. Следуйте шагам ниже:
-
Залогиньтесь на ваш IPA-сервер как администратор, перейдите на вкладку Identity и нажмите Add.
Создание пользователя IPAСоздание пользователя IPA -
Заполните данные пользователя в открывшемся окне.
Данные пользователя IPAДанные пользователя IPA -
Установите для пользователя пароль:
-
На вкладке Identity нажмите на имя нового пользователя в колонке User login.
Пользователи IPAПользователи IPA -
Нажмите Actions → Reset password.
Установка пароляУстановка пароляВ открывшемся окне введите новый пароль и подтвердите его.
-
Подготовка хостов кластера
ВАЖНО
Хотя шаги 2—8 можно выполнить вручную, рекомендуется использовать скрипт, приведенный ниже.
|
На каждом хосте кластера выполните следующие действия:
-
Добавьте файл krb5.conf в директорию /etc/. Это можно сделать самостоятельно, но также можно запустить действие Manage Kerberos с выбранной опцией Existing FreeIPA и установленным флагом Configure Kerberos on hosts в меню Custom kerberization settings. При заполнении полей в форме Existing FreeIPA указывайте данные пользователя, не входящего в группу
admins
.Создание конфигурационного файла -
Установите клиент FreeIPA с помощью команды ниже:
$ sudo ipa-client-install -U -p <ipa_user> -w <ipa_pass> --server=<ipa_server> --domain=<domain> --realm=<realm>
где:
-
<ipa_user>
— имя пользователя без прав администратора. -
<ipa_pass>
— пароль для<ipa_user>
. -
<ipa_server>
— FQDN сервера с FreeIPA. -
<domain>
— домен FreeIPA, указанный при конфигурации FreeIPA. -
<realm>
— realm FreeIPA, указанный при конфигурации FreeIPA.
-
-
Вызовите команду
kinit
с данными пользователя без прав администратора:$ kinit <username>
где
<username>
— имя пользователя IPA без прав администратора. -
Добавьте сервисы в IPA. В качестве списка сервисов, которые нужно добавить, используйте столбец Keytab-файл в таблице сопоставления owner-keytab.
$ ipa service-add <service_name>/<fqdn>
где:
-
<service_name>
— название компонента сервиса. -
<fqdn>
— FQDN хоста, на котором запускается команда.
-
-
Добавьте keytab-файлы для каждого сервиса и разместите их в директории /etc/security/keytabs. В качестве списка keytab-файлов, которые нужно добавить, используйте столбец Keytab-файл в таблице сопоставления owner-keytab.
$ ipa-getkeytab -p <service_name>/<fqdn> -k <service_name>.service.keytab
где:
-
<service_name>
— название компонента сервиса. -
<fqdn>
— FQDN хоста, на котором запускается команда.
-
-
Добавьте пользователя для каждого сервиса, если его еще не существует. В качестве списка пользователей, которых нужно добавить, воспользуйтесь столбцом Пользователь owner в таблице сопоставления owner-keytab.
$ adduser <service_name>
где
<service_name>
— название сервиса. -
Измените owner для каждого keytab-файла, руководствуясь таблицей сопоставления owner-keytab.
$ chown <user>:<group> <keytab_name>
где:
-
<user>
— имя пользователя, который станет owner. -
<group>
— имя группы, которая станет owner. -
<keytab_name>
— имя keytab-файла.
-
-
Установите права 640 keytab-файлам для сервсиов Spark, HDFS, HBase, Hive, HTTP и YARN:
$ chmod 640 <keytab_name>
где
<keytab_name>
— имя keytab-файла.
Активация Kerberos
Запустите действие Manager Kerberos с выбранной опцией Existing FreeIPA и установленными флагами Configure Kerberos on hosts, Configure services and clients, Run service checks.
Сопроводительная информация
Пользователь owner | Группа owner | Keytab-файл | Права |
---|---|---|---|
airflow |
airflow |
airflow.service.keytab |
600 |
flink |
flink |
flink.service.keytab |
600 |
hbase |
hadoop |
hbase.service.keytab |
640 |
hbase |
hbase-thrift2.service.keytab |
600 |
|
hdfs |
hadoop |
HTTP.service.keytab |
640 |
hdfs-datanode.service.keytab |
600 |
||
hdfs-journalnode.service.keytab |
600 |
||
hdfs-namenode.service.keytab |
600 |
||
hdfs-zkfc.service.keytab |
600 |
||
hdfs.service.keytab |
640 |
||
hive |
hive |
hive.service.keytab |
640 |
httpfs |
httpfs |
httpfs.service.keytab |
600 |
livy |
hadoop |
livy.service.keytab |
600 |
mapred |
hadoop |
mapreduce-historyserver.service.keytab |
600 |
phoenix |
phoenix |
hbase-phoenix_queryserver.service.keytab |
600 |
solr |
solr |
solr.service.keytab |
600 |
spark |
spark |
spark.service.keytab |
640 |
sqoop |
sqoop |
sqoop.service.keytab |
600 |
yarn |
hadoop |
yarn-nodemanager.service.keytab |
600 |
yarn-resourcemanager.service.keytab |
600 |
||
yarn-timelineserver.service.keytab |
600 |
||
yarn.service.keytab |
640 |
||
zeppelin |
zeppelin |
zeppelin.service.keytab |
600 |
zookeeper |
zookeeper |
zookeeper.service.keytab |
600 |
impala |
impala |
impala.service.keytab |
600 |
#!/bin/bash
# Script for adding services and keytabs to Cluster hosts
# Edit NUMHOSTS and HOSTS as it will be suitable for your case.
# EDIT your IPA parameters
# Select services according to the bundle
declare -a NUMHOSTS
declare -a HOSTS
SSH_OPTS='-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
NUMHOSTS=(adh3-1 adh3-2 adh3-3)
HOSTS=$(for i in "${NUMHOSTS[@]}"; do echo "stikhomirov-$i.ru-central1.internal"; done)
#IPA credentials
ipa_user='noadmin_username'
ipa_pass='12345678'
ipa_server='stikhomirov-freeipa.ru-central1.internal'
domain='ru-central1.internal'
realm='RU-CENTRAL1.INTERNAL'
#ADH services
services=(airflow flink hbase-phoenix_queryserver hbase-thrift2 hbase hdfs-datanode hdfs-journalnode hdfs-namenode hdfs-zkfc hdfs hive httpfs livy mapreduce-historyserver solr spark sqoop yarn-nodemanager yarn-resourcemanager yarn-timelineserver yarn zeppelin zookeeper impala)
user-groups=(airflow:airflow flink:flink hbase:hadoop hbase:hbase hdfs:hadoop hdfs:hadoop hdfs:hadoop hdfs:hadoop hdfs:hadoop hdfs:hadoop hive:hive httpfs:httpfs livy:hadoop mapred:hadoop phoenix:phoenix solr:solr spark:spark sqoop:sqoop yarn:hadoop yarn:hadoop yarn:hadoop yarn:hadoop zeppelin:zeppelin zookeeper:zookeeper impala:impala)
users=(airflow flink hbase hdfs hive httpfs impala livy mapred phoenix solr spark sqoop yarn zeppelin zookeeper)
rwr_services=(spark hdfs hbase hive yarn HTTP)
for HOST in $HOSTS; do
echo "Installing FreeIPA client"
ssh $SSH_OPTS $HOST sudo ipa-client-install -U -p $ipa_user -w $ipa_pass --server=$ipa_server --domain=$domain --realm=$realm
echo "Creating keytab directory"
ssh $SSH_OPTS $HOST sudo mkdir /etc/security/keytabs
echo "Launching kinit on $HOST"
ssh $SSH_OPTS $HOST sudo kinit $ipa_user <<< $ipa_pass
for user in ${users[@]}; do
echo "Adding $user user"
ssh $SSH_OPTS $HOST sudo adduser $user
done
for service in ${!services[@]}; do
echo "Adding $service service to IPA"
ssh $SSH_OPTS $HOST sudo ipa service-add ${services[i]}/$HOST
echo "Get $service keytab"
ssh $SSH_OPTS $HOST sudo ipa-getkeytab -p ${services[i]}/$HOST -k /etc/security/keytabs/${services[i]}.service.keytab
echo "Changing owner for $service keytab"
ssh $SSH_OPTS $HOST sudo chowner ${user-groups[i]} /etc/security/keytabs/${services[i]}.service.keytab
done
for service in ${rwr_services[@]}; do
echo "Setting 640 permissions for $service"
ssh $SSH_OPTS $HOST sudo chmod 640 /etc/security/keytabs/$service.service.keytab
done
done