Сквозная прозрачная авторизация Web-пользователей в ALD через Apache2, PHP и PostgreSQL

Сообщения
2
#1
В документации для разработчиков https://wiki.astralinux.ru/pages/viewpage.action?pageId=137564104 есть ссылка на
https://wiki.astralinux.ru/download/attachments/137564104/Описание контрольного примера-211027.pdf
В нём реализована сквозная прозрачная авторизация Web-пользователей в ALD через Apache2, Python-приложение и PostgreSQL.

Попытка повторить контрольный пример через PHP-приложение закончилась неудачно:
• Сквозная прозрачная авторизация через консоль путём выполнения PHP-скрипта проходит;
• Сквозная прозрачная авторизация через Firefox путём выполнения этого же PHP-скрипта не проходит.

Кто-нибудь смог настроить сквозную прозрачную авторизацию Web-пользователей в ALD через Apache2, PHP и PostgreSQL ?
 

oko

New member
Сообщения
1 247
#2
Модуль экстрасенсорики подсказывает, что очень похоже на невнимательное чтение документации отсутствие правил SSO Kerberos для Firefox. Если же правила добавлены, то остается одно - читать логи на контроллере ALD и выяснять причину...
 
Сообщения
2
#3
Модуль экстрасенсорики подсказывает, что очень похоже на невнимательное чтение документации отсутствие правил SSO Kerberos для Firefox. Если же правила добавлены, то остается одно - читать логи на контроллере ALD и выяснять причину...
Правила SSO Kerberos для прописаны в соответствии с инструкциями, сквозная прозрачная авторизация пользователей через Firefox работает без замечаний!

Подготовлен PHP-скрипт /var/www/html/testc.php для проверки подключения сквозная прозрачная авторизация пользователей через Firefox по цепочке Firefox>Apache>PHP>PostgreSQL следующего содержания:
<?php

echo "START host=q.astra.ntc port=5432 dbname=contrprimer<BR/><BR/>";

if ($sConn = pg_connect("host=q.astra.ntc port=5432 dbname=contrprimer"))

{ echo "SUCCESS<BR/>"; }
else

{ echo "ERROR<\BR>"; }
?>


В PHP-интерпретаторе этот скрипт из-под ALD-пользователя user0 выполняется без ошибок:
user0@q:~$ php /var/www/html/testc.php
START host=q.astra.ntc port=5432 dbname=contrprimer<BR/><BR/>SUCCESS<BR/>
user0@q:~$


При этом в PostgreSQL-логах фиксируется успешное подключение user0 к базе contprimer:
2023-10-02 13:15:10 MSK [726] AUDIT: SUCCESS, CONNECT, 10.0.2.15, "contrprimer", SU = "user0" (16384), CU = "user0" (16384): maclabel

{0,0}
ignore_socket_maclabel
2023-10-02 13:15:10 MSK [726] AUDIT: SUCCESS, DISCONNECT, 10.0.2.15, "contrprimer", SU = "user0" (16384), CU = "user0" (16384)


Этот же PHP-скрипт при выполнении через Firefox>Apache2 выдаёт ошибку. При этом в логах Apache2 фиксируется следующая ошибка:
[Mon Oct 02 13:40:02.941804 2023] [php7:warn] [pid 24200] [client 10.0.2.15:48930] PHP Warning: pg_connect(): Unable to connect to PostgreSQL server: GSSAPI continuation error: Unspecified GSS failure. Minor code may provide more information\nGSSAPI continuation error: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_2501) in /var/www/html/testc.php on line 7

В логах PostgreSQL фиксируется следующая ошибка:
2023-10-02 13:40:02 MSK [726] AUDIT: FAILURE, CONNECT, 10.0.2.15, "contrprimer", SU = "UNDEFINED" (0), CU = "UNDEFINED" (0): GSSAPI authentication failed for user "user0"
2023-10-02 13:40:02.949 MSK [28593] user0@contrprimer ВАЖНО: пользователь "user0" не прошёл проверку подлинности (GSSAPI)
2023-10-02 13:40:02.949 MSK [28593] user0@contrprimer ПОДРОБНОСТИ: Подключение соответствует строке 95 в pg_hba.conf: "host all all 10.0.2.0/24 gss include_realm=0"
 

oko

New member
Сообщения
1 247
#4
to Sergey Zhavrid
Модуль экстрасенсорики подсказывает, что выполнение скрипта в консоли упускает часть этапов, в которых и кроется проблема: проброс аутентификации через Firefox и далее проброс аутентификации через Apache2...
Если юзеры на том же "проблемном" Firefox аутентифицируются на том же самом "проблемном" сервере Apache2 (например, в рамках контрольного пример "It works!" заглушки), то "проброс" в Firefox работает корректно, а Apache2 тоже корректно аутентифицируется в ALD своим keytab-файлом...
Но, судя по ругани в логах, затык именно на участке получения корректных kerberos-аутентификаторов из php-скрипта средствами Apache2. Вообще говоря, есть ощущение, что скрипт php должен передавать какие-либо данные по юзеру во всей этой цепочке, а не просто выполнять коннект к базе от лица юзера, проверенного на стороне Apache2. Или, возможно, не передаются не столько данные по самому юзеру, сколько его maclabel и т.п.
Откровенно говоря, в php не силен...
А иной php-скрипт проверки чисто проброса аутентификации из Firefox в Apache2 работает? Например, как в спойлере?
И да, Firefox на той же машине, что и Apache2, и Postgresql или все компоненты разнесены по сети?

<?php
echo "<h2>Kerberos Auth</h2>";
echo "Auth type: " . $_SERVER['AUTH_TYPE'] . "<br />";
echo "Remote user: " . $_SERVER['REMOTE_USER'] . "<br />";
?>
 
Последнее редактирование:

oko

New member
Сообщения
1 247
#5
*вдогонку*
А проверьте, есть ли в /etc/krb5.conf на сервере с Apache2 строка вида default_ccache_name = FILE:/tmp/krb5cc_%{uid}?
Не помню, что там ALD пишет и оставляет по дефолту при вводе в свой домен...
И да, наткнулся на любопытное, о чем не знал: особенность systemd по "приватизации" /tmp и прочих мест и сущностей для системных служб и демонов. Проверил на ALSE 1.7.4 - доступ к /tmp (опция PrivateTmp=yes через systemd-analyze security имя_сервиса) по умолчанию разграничивается через systemd. И это может стать проблемой при чтении временных файлов, содержащих kerberos-аутентификаторы, как в вашем случае. Можно копнуть в эту сторону, потому что есть мнение, что используемая вами инструкция с контрольным примером несколько, мнэ, устарела и не учитывает указанный нюанс...
 
Последнее редактирование: