Настройка 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 шт):
внутри файла /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>
Получилось! Для этого потребовалось:
- Отвязать дефолтный конфиг апача в /etc/apache2/sites-enabled
sudo a2dissite 000-default.conf
Привязать свой через a2ensite, если не был привязан.
- В конфинге керберос явно указать файл keytab
/ect/krb5.conf
[libdefaults] default_keytab_name = FILE:/etc/apache2/keytab
- Убрать все комментарии в скрипте wsgi.
Profit!)