Настройка PAM авторизации в защищенном Apache

Как уже упоминалось в одной из наших предыдущих заметок, в состав Astra Linux Special Edition входит защищенный комплекс программ гипертекстовой обработки данных, в качестве веб-сервера туда включен Apache2, который доработан с целью улучшения безопасности. В данной заметке мы коротко опишем как настроить данный веб-сервер с использованием PAM авторизации.

  1. Ставим пакеты
    aptitude install apache2 libapache2-mod-auth-pam
  2. Проверяем, что в файле /etc/apache2/ports.conf содержатся следующие строки (если конечно Вы собираетесь использовать стандартный 80, а не какой-нибудь другой порт):
    NameVirtualHost *:80
    Listen 80
  3. Создаем конфигурацию виртуального хоста (в примере сайтик из одной стандартной страницы It works!):
    <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName имясервера
        DocumentRoot /var/www/
        <Directory /var/www/>
             AuthPAM_Enabled on
             AuthType Basic
             AuthName "PAM authentication"
             require valid-user
             Options Indexes FollowSymLinks MultiViews
             AllowOverride None
        </Directory>
        ErrorLog /var/log/apache2/error.log
        LogLevel debug
        CustomLog /var/log/apache2/access.log common
    </VirtualHost>
  4. Включаем PAM авторизацию и наш виртуальный хост:
    a2enmod auth_pam
    a2ensite имя_файла_конфигурации
    service apache2 reload
    
  5. Для корректного функционирования авторизации через PAM пользователю, от которого работает веб-сервер (по-умолчанию — www-data), необходимо выдать права на чтение информации из БД пользователей и сведений о мандатных метках, для этого выполняем следующие команды:
    usermod -a -G shadow www-data
    setfacl -d -m u:www-data:r /etc/parsec/macdb
    setfacl -R -m u:www-data:r /etc/parsec/macdb
    setfacl -m u:www-data:rx /etc/parsec/macdb
  6. Затем для пользователя под которым будем заходить, выполняем команду настройки (по-сути просто сбрасываем в 0) минимальный и максимальный наборы мандатных категорий (мы их и не настраивали):
    usermac -c 0:0 имя_пользователя_под_которым_будем_заходить
  7. Открываем браузер обращаемся по именисервера, который указали в конфигурационном файле виртуального хоста, и должны увидеть сперва окно с предложением ввести логи\пароль и после успешного ввода данных Вам откроется страница c текстом «It works!», как на картинке ниже:
    pam_apache_astra

На очереди рассказ про настройку kerberos авторизации. Stay tuned!

P. S. Смотрите также нашу статью «Веб-приложения в защищённой среде» и вопросы посетителей, касающиеся Apache.

39 Comments

  1. BS

    Интересная заметка. Проверил, действительно работает. Значит ли это, что в качестве аутентификации можно использовать пользователей домена??? И, есть ли возможность использовать эту аутентификацию на PHP?

    1. Артем Кузьмицкий

      Пользователей ALD не получится использовать, по крайней мере без танцев с бубном, если нужно ходить ald’шными, то тут самое оно это керберосная авторизация… постараюсь написать в ближайшее время.
      Про php:
      1. Повторяем пункты из статьи
      2. aptitue install libapache2-mod-php5
      3. nano /var/www/test.php
      4. вводим, например:
      # test. php
      < ?php phpinfo(); ?>
      5. вводим в браузере имясервера/test.php
      6. профит

      P. S. А если имелся ввиду php-auth-pam…то это скучная история.

  2. GReedDen

    Спасибо, действительно полезная статья. В связи с отсутствием нормальной документации по Astra Linux просто умоляю вас продолжить писать и заполнять информационный вакуум данного направления. Лично от себя прошу написать обзор по установке и настройке Postgresql в Astra Linux. Еще раз спасибо.

    1. Артем Кузьмицкий

      В документации данная тема освещена:
      Для Astra Linux SE 1.3 → Руководство администратора РУСБ.10 015−01 95 01 п. 11
      Для Astra Linux SE 1.4 → Руководство администратора РУСБ.10 015−01 95 01 п. 6.10.1

      Если будут конкретные вопросы пишите.

  3. BS

    Артем, а можно эту документацию у Вас попросить? Ещё очень интересна аутентификация. Не знаю, как правильно выразиться, не очень в этом понимаю. Но интересно вот что, в данной статье берётся аутентификация локального пользователя, где установлен сервер. А если ПК прописан в домене, возможно ли авторизоваться пользователем домена при входе на сайт? И как этого пользователя обработать на PHP?

    1. Артем Кузьмицкий

      К сожалению тут (http://www.astra-linux.com/materialy-i-dokumentatsiya.html) ее нету, Вам нужно обратиться в Русбитех, чтобы получить, мы не имеем права ее распространять. На этой неделе постараюсь написать статью как настроить для доменных пользователей. Про php… мы в одном из своих проектов (python-django) делали следующим образом:
      1. При использовании kerberos авторизации в каждом запросе передается REMOTE_USER
      2. Берем его login = request.META.get («REMOTE_USER», None)
      3. Дальше делаем, что считаем нужным, мы, например получали группу (роль пользователю назначалась на основе его членства в тех или иных группах ALD) в которую он входит: grp. getgrgid (pwd.getpwnam (self._login).pw_gid).gr_name (не забыть import grp, pwd)
      Думаю можно повторить на php.

  4. Max

    Добрый день! Подскажите, как настроить на SE 1.4? Что нужно писать вот здесь?
    AuthName «PAM authentication»

    Выдает ошибку
    configuration error: couldn’t perform authentication. AuthType not set!: /

    И еще вопрос — возможно ли в этой версии настроить web-сервер так, чтобы не проходить авторизацию при открытии сайта?

  5. Александр

    А для PHP нет желания сделать такую же модную библиотеку поддержки PARSEC как вы сделали для python?

    Как я понял, мандатную метку можно определить, делая запрос к БД, если у записи или таблицы БД также есть метка. Не красиво, но других вариантов я не нашёл.
    Кстати группу пользователя действительно можно получить через posix_getpwnam ($_SERVER['REMOTE_USER']).

  6. Alex

    А как отключить BasicAuth для запросов типа OPTIONS ведь Firefox перед отправкой POST (Через AJAX) шлет изначально OPTIONS чтобы узнать — поддерживает ли сервер указанный метод. И передать в этот prefly запрос заголовки авторизации нет никакой возможности. Условные директивы Апач тоже не понимает. В общем получается что сделать что-то нормальное типа SPA на AngularJS уже не получается.
    Или есть какой-то способ обойти эту пролему?

  7. Сергей

    Есть ли возможность настроить апач так, чтобы wget-ом можно было выкачивать из определенного каталога файлы любому узлу в сети? А то настроил все, как в статье. Сайт работает, пароль запрашивает, все ок. А если из консоли хочу скачать что-то, то выкачивать не дает.

  8. Вадим

    Доброго времени суток.
    Хотелось бы узнать, можно ли настроить ADL авторизацию для сервера приложений tomcat 7 или 8 версии? Есть ли инструкции и будут ли вообще таковые?

  9. Дима

    Очень интересуюсь работой модуля WebDAV, серер настраивал, но в обычной редакции. Здесь не получается. Есть какие то инструкции для настройки WebDav сервера на АстраЛинуксе?

  10. Вадим

    Доброго времени суток,
    Интересует такой вопрос, можно ли средствами apache2 который в ходит в состав astra linux получить мандатный уровень пользователя?

  11. error500

    Добавть пожалуйста еще вот что

    Файловая система с исходниками сайта DocumentRoot должна быть смонтирована с опцией acl в противном случае authorization fail

    p. s. Наткнулся на это когда понадобилось по nfs подключать папку для сайта

  12. Алексей

    Добрый день
    Использую PAM авторизацию, но столкнулся со следующей проблемой — при смене пользователя окно авторизации появляется дважды, в какую сторону нужно смотреть?

    настройка default-ssl
    AuthPAM_Enabled on AuthType Basic
    AuthName «PAM autherizattion»
    require valid-user

    пользователя меняю командой
    header ('WWW-Authenticate: Basic realm="Change user"');
    header ('HTTP/1,.0 401 Unauthorized');

    SE 1.5

  13. Сергей

    Добрый день!

    Использую апач с PAM как прокси к бэкенду.

    AuthPAM_Enabled on AuthType Basic
    AuthName «PAM authentication»
    require valid-user

    В хэдерах после авторизации в апач поле Authorization содержит значение «Basic ==">.
    Затем я авторизуюсь на бэке, и получаю от него «свой» токен, который кладу в sessionStorage.
    Дальнейшие запросы к api должны содержать уже мой токен в хэдере Authorization, но я не могу его изменить. Есть ли возможность обойти это?

  14. Дмитрий

    Добрый день! Если ли какие-то материалы (помимо документации Astra Linux) по настройке авторизации через Kerberos с целью использования доменными пользователями? При настройке по документации возникает ошибка на сервере: pdlugm_mkdir (*параметры*) failed: invalid argument. Спасибо.

Добавить комментарий для Max Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *