Керберизация с предустановленным FreeIPA при отсутствии прав администратора

Создание пользователя IPA без прав администратора

Если у вас нет пользователя IPA без прав администратора, то его можно создать в FreeIPA UI. Следуйте шагам ниже:

  1. Залогиньтесь на ваш IPA-сервер как администратор, перейдите на вкладку Identity и нажмите Add.

    Создание пользователя IPA
    Создание пользователя IPA
    Создание пользователя IPA
    Создание пользователя IPA
  2. Заполните данные пользователя в открывшемся окне.

    Данные пользователя IPA
    Данные пользователя IPA
    Данные пользователя IPA
    Данные пользователя IPA
  3. Установите для пользователя пароль:

    • На вкладке Identity нажмите на имя нового пользователя в колонке User login.

      Пользователи IPA
      Пользователи IPA
      Пользователи IPA
      Пользователи IPA
    • Нажмите ActionsReset password.

      Установка пароля
      Установка пароля
      Установка пароля
      Установка пароля

      В открывшемся окне введите новый пароль и подтвердите его.

Подготовка хостов кластера

ВАЖНО
Хотя шаги 2—​8 можно выполнить вручную, рекомендуется использовать скрипт, приведенный ниже.

На каждом хосте кластера выполните следующие действия:

  1. Добавьте файл krb5.conf в директорию /etc/. Это можно сделать самостоятельно, но также можно запустить действие Manage Kerberos с выбранной опцией Existing FreeIPA и установленным флагом Configure Kerberos on hosts в меню Custom kerberization settings. При заполнении полей в форме Existing FreeIPA указывайте данные пользователя, не входящего в группу admins.

    Создание файла конфига
    Создание конфигурационного файла
  2. Установите клиент 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.

  3. Вызовите команду kinit с данными пользователя без прав администратора:

    $ kinit <username>

    где <username> — имя пользователя IPA без прав администратора.

  4. Добавьте сервисы в IPA. В качестве списка сервисов, которые нужно добавить, используйте столбец Keytab-файл в таблице сопоставления owner-keytab.

    $ ipa service-add <service_name>/<fqdn>

    где:

    • <service_name> — название компонента сервиса.

    • <fqdn> — FQDN хоста, на котором запускается команда.

  5. Добавьте keytab-файлы для каждого сервиса и разместите их в директории /etc/security/keytabs. В качестве списка keytab-файлов, которые нужно добавить, используйте столбец Keytab-файл в таблице сопоставления owner-keytab.

    $ ipa-getkeytab -p <service_name>/<fqdn> -k <service_name>.service.keytab

    где:

    • <service_name> — название компонента сервиса.

    • <fqdn> — FQDN хоста, на котором запускается команда.

  6. Добавьте пользователя для каждого сервиса, если его еще не существует. В качестве списка пользователей, которых нужно добавить, воспользуйтесь столбцом Пользователь owner в таблице сопоставления owner-keytab.

    $ adduser <service_name>

    где <service_name> — название сервиса.

  7. Измените owner для каждого keytab-файла, руководствуясь таблицей сопоставления owner-keytab.

    $ chown <user>:<group> <keytab_name>

    где:

    • <user> — имя пользователя, который станет owner.

    • <group> — имя группы, которая станет owner.

    • <keytab_name> — имя keytab-файла.

  8. Установите права 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.

Активация Kerberos
Активация Kerberos

Сопроводительная информация

Сопоставление owner-keytab
Пользователь 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
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней