Настройка Kerberos аутентификации в ЕПП#
Исходные данные#
Имеется сервер контроллера домена FreeIPA:
имя домена astra.aaa
администратор домена admin@astra.aaa
пользователь домена user-01@astra.aaa
имя сервера dc-01.astra.aaa
сервер имеет постоянный IP-адрес, например, 192.168.1.20
Веб-сервер располагается отдельно:
имя сервера websrv-01.astra.aaa
сервер должен быть введен в домен
на сервере установлен и настроен web-сервер Apache2
сервер имеет постоянный IP-адрес, например, 192.168.1.21
Сервер базы данных располагается отдельно:
имя сервера dbsrv-01.astra.aaa
сервер должен быть введен в домен
на сервере должна быть установлена и настроенная СУБД Postgresql
сервер имеет постоянный IP-адрес, например, 192.168.1.23
Пользовательский компьютер располагается на отдельном компьютере:
имя компьютера pc-01.astra.aaa
компьютер должен быть введен в домен
компьютер имеет постоянный IP-адрес, например, 192.168.1.22
Основная концепция, реализация веб-приложения на языке программирования Python#
Пользователь домена со своего компьютера отправляет запрос c аутентификацией Kerberos, на сервер приложения Apache2. Веб сервер Apache2 производит аутентификацию пользователя, если аутентификация прошла успешно, то проксирует запрос с добавленными заголовками на веб сервер Gunicorn и создает делегируемый Kerberos кэш, если аутентификации прошла неуспешно выдает ошибку. Веб сервер Gunicorn передаёт запрос веб приложению Flask. Веб приложение Flask добавляет в окружение переменную KRB5CCNAME и в строку подключения к базе данных имя пользователя взятые из заголовка запроса. Далее коннектор Psycopg2, режиме GSS, производит запрос к БД Postgresql. БД производит аутентификацию, если требуется авторизацию и отдаёт данные пользователю.
Настройка компьютера пользователя#
Для настройки компьютера пользователя необходимо перейти по ссылке и выполнить действия по инструкции:
Настройка сервера базы данных#
Для настройки сервера базы данных необходимо перейти по ссылке и выполнить действия по инструкции:
Установка и настройка веб-сервера Apache2#
Для установки и настройки веб-сервера Apache2 необходимо перейти по ссылке и выполнить действия по инструкции:
Установка и настройка веб-сервера Gunicorn#
Для установки и настройки веб-сервера Gunicorn необходимо перейти по ссылке и выполнить действия по инструкции:
Установка веб-приложения#
Для установки и настройки веб-приложения необходимо:
Пункт 1#
-установить следующие пакеты пакет:
sudo apt install flask psycopg2
Пункт 2#
создать по пути /var/www папку flask_app:
sudo mkdir /var/www/flask_app
Пункт 3#
развернуть приложение Flask, со структурой:
flask_app/
├── app.py # Основной файл приложения
├── templates/ # HTML-шаблоны
│ └── index.html
└── static/ # Статические файлы (CSS, JS, изображения)
├── css/
├── js/
└── images/
Пункт 4#
файл app.py должен иметь следующее содержимое:
from flask import Flask, render_template, request
import psycopg2
import os
app = Flask(__name__)
@app.route('/')
def home():
# Получение имени пользователя из запроса
user = request.environ.get("HTTP_X_REMOTE_USER")
# Получение пути к kerberos кэшу и запись его в окружение
krb_path = request.environ.get("HTTP_X_KRB5CCNAME")
os.environ["HTTP_X_KRB5CCNAME"] = krb_path
# Параметры подключения
conn_params = {
"dbname": "postgres",
"user": f"{ user }", # Укажите имя пользователя PostgreSQL
"host": "dbsrv-01.astra.bbb",
"port": "5432",
"sslmode": "require", # Опционально, если используется SSL
"gssencmode": "prefer", # Использовать GSSAPI для шифрования
}
result = ""
# Подключение к базе данных
try:
conn = psycopg2.connect(**conn_params)
cursor = conn.cursor()
# Пример выполнения запроса
cursor.execute("SELECT version();")
result = cursor.fetchone()
except psycopg2.Error as e:
result = f"Ошибка при подключении к PostgreSQL: {e}"
finally:
if conn:
cursor.close()
conn.close()
return render_template('index.html', result=result)
if __name__ == '__main__':
app.run()
Пункт 6#
файл index.html должен иметь следующее содержимое:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>{{ result }}</div>
</body>
</html>
Тестирование веб-приложения#
Пункт 1#
запустите предварительно настроенный браузер и вставьте следующую ссылку:
http:\\websrv-01.astra.aaaa
Пункт 2#
возвращённая страница должна содержать ответ:
Версия PostgreSQL: PostgreSQL 15.6 (Debian 15.6-astra.se2+b1) on x86_64-pc-linux-gnu, compiled by gcc (Astra 12.2.0-14.astra3+b1) 12.2.0, 64-bit