Настройка Apache+Kerberos+WSGI+ALD Ошибки аутентификации и чтения скрипта

На Astra Linux 1.6 пытаюсь настроить вывод мандатных меток в браузер. При выключенном Astra Mode выдает дефолтную страницу Apache "it`s works!", при включенном index.html. Тоесть WSGI ни в какую работать не хочет, пробовала с разными скриптами.

Логи: Apache

astra_mode - ap_invoke_handler: user name is not set, referer: http://aldserver.name.ru/
Authentication not configured

Kerberos:

NEEDED_PREAUTH: [email protected] for krbtgt/[email protected], Additional pre-authentication required 

Конфиг Apache:

<VirtualHost *:80>
        # имя web-сервера
        ServerName aldserver.name.ru 
 
        ServerAdmin webmaster@localhost
        # директория, в котором лежат скрипты приложения
        DocumentRoot /var/www/name.ru
 
        # указываем, какой скрипт запускать при обращении к aldserver.name.ru/
        WSGIScriptAlias / /var/www/name.ru/app.wsgi 
 
        # настройки для корректной авторизации через Kerberos
        <Directory /var/www/name.ru>
                AuthType Kerberos
                KrbAuthRealms REALM
                KrbServiceName HTTP/aldserver.name.ru
                Krb5Keytab /etc/apache2/keytab
                KrbMethodNegotiate on
                KrbMethodK5Passwd off
                KrbSaveCredentials on
                require valid-user
        </Directory>
         
        # для откладки
        LogLevel debug
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost>

App.wsgi:

import sys
import subprocess
from os import getuid
sys.path.insert(0, 'var/www/name.ru')
 
def application(env, start_response):
        status = '200 OK'
        id = subprocess.check_output(['pdp-id'])
  
        output = "UID: " + str(getuid()) + "<br/><br/>" + id # возвращаем uid пользователя, заупустившего процесс и его мандатные атрибуты
        response_headers = [('Content-type', 'text/html'), ('Encoding', 'utf-8'), ('Content-Length', str(len(output)))]  # заголовки ответа
 
        start_response(status, response_headers)
 
        return [output]

В чем косяк? Пользователь введен в ALD, захожу на клиентскую машину с него. В браузере параметры negotiate прописаны.


Ответы (2 шт):

Автор решения: Yakov

внутри файла /etc/krb5.conf добавить ссылку на файл кейтаба. примонтировать корень с опцией acl (в /etc/fstab и ребут или ремаунт), через setfacl добавить право на чтение кейтаба юзеру под которым у вас запущен апач или другой веб-сервер, к примеру www-data. создать кейтаб в зависимости от вашего окружения ( у меня домен MS я делал через net ads keytab) если у вас линуксовый KDC то там немного по-другому, но суть такая же. если все правильно сделаете у вас будет примерно такой же вывод. обратите внимание, что у вас должен быть билет для службы в правильном формате (HTTP/[email protected]), иначе ракета не полетит. Будьте внимательны к регистру символов в реалме(имя домена после @) если написать в нижнем регистре не все библиотеки и приложения на это нормально реагируют.

klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   3 host/[email protected]
   3 host/[email protected]
   3 HTTP/[email protected]
   3 HTTP/[email protected]

/ect/krb5.conf

[libdefaults]
        default_keytab_name = FILE:/etc/krb5.keytab

в конфиге апача

<Location /some_location>
    AddHandler cgi-script .cgi
    AuthType Kerberos
    KrbAuthRealms DOMAIN.FULL.NAME.COM
    KrbMethodNegotiate on
    KrbMethodK5Passwd off
    Krb5Keytab /etc/krb5.keytab
    KrbServiceName HTTP/[email protected]
    Require valid-user
</Location>
→ Ссылка
Автор решения: 8Irbis8

Получилось! Для этого потребовалось:

  1. Отвязать дефолтный конфиг апача в /etc/apache2/sites-enabled

sudo a2dissite 000-default.conf

Привязать свой через a2ensite, если не был привязан.

  1. В конфинге керберос явно указать файл keytab

/ect/krb5.conf

[libdefaults] default_keytab_name = FILE:/etc/apache2/keytab

  1. Убрать все комментарии в скрипте wsgi.

Profit!)

→ Ссылка