Я пытаюсь установить стандартную аутентификацию на своем использовании сервера Apache2 AuthExternal и pwauth. Таким образом с помощью пользователей системы для выполнения аутентификации, а не другого пользовательского дб.
Я мог установить и включить все беспрепятственно. (2.4.12-2ubuntu2) Apache2, libapache2-mod-authnz-external (3.3.2-0.1) и pwauth (2.3.11-0.1). Это все работает на моем Настольном выпуске Ubuntu 15.10 и 4.2.0-30-универсальном Linux. Ничто не полагает действительно, весь стандарт willy repo установки.
Apache2 работает, и модуль AuthExternal загружается правильно, по крайней мере, насколько я могу сказать:
me@bla:~$ systemctl status apache2.service | grep Active
Active: active (running) since Thu 2016-02-25 13:41:02 CET; 33s ago
me@bla:~$ apache2ctl -M | grep external
authnz_external_module (shared)
Я определил модули, которые будут использоваться, а также Derictory, к которому можно применить аутентификацию в файле конфигурации VHost. Посмотрите мой/etc/apache2/sites-enabled/000-default.conf ниже:
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
</IfModule>
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html/sec>
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user pat
</Directory>
</VirtualHost>
Теперь, когда я пытаюсь открыть loclahost/sec в браузере, мне предлагают войти в систему. Я обеспечиваю кусочек как пользователь и его пароль и ожидаю волшебства произойти. К сожалению, я получаю внутреннюю ошибку сервера, а не ожидаемый index.html 'Привет Мир'....
Таким образом, я проверил apache2 журналы ошибок и нашел 'Недопустимое ключевое слово AuthExternal (pwauth)' там. После некоторого рытья, которого я пришел к пониманию, что эта ошибка повышена AuthExternal, потому что это не может найти указанный pwauth. Таким образом, я пошел и проверил что путем выполнения:
sudo -u www-data which pwauth
Это возвратило тот же путь, как указано в вышеупомянутом файле конфигурации, так, чтобы мог быть исключен....
Я затем пытался перенаправить AuthExternal к сценарию оболочки для тестирования модуля независимо от pwauth. Сценарий просто добавляет строку к файлы для меня, чтобы видеть, называет ли это AuthExternal или нет. Я работал 'chmod u+s a+x' на файле, чтобы позволить этому работать с полномочием пользователя root, как pwauth потребности, что к доступу passwd, и дал ему другую попытку. Я также попробовал то же без u+s, поскольку это не нужно здесь, но это не сделало пошел немного лучше. Этот контрольный вывод меня для размышления, что существует что-то не так с моим apache2 и не pwauth.
Я протестировал все это с Cromium и Firefox, не, что он имеет значение интервал его случай, но Вы знаете..., что никогда нельзя быть достаточно уверенным, правильно? Я также попробовал все изменения, о которых я мог думать относительно того, куда я помещал директивы. Все непосредственно в appache2.conf, каталоге в appache2.conf и включении модуля в./conf-enable/security.conf, модулях в безопасности и каталоге в vhost, и т.д... Ни одно из этих изменений не помогло, некоторые сделали это худшим хотя...
Я затем сделал большой поиск с помощью Google.... Но я мог только найти информацию относительно этой темы с httpd.conf эры, которая действительно больше не применяется. Даже если это все еще обеспечивает некоторые допустимые и полезные подсказки... Кроме того, большинство, если не все те потоки используют подход .htaccess. Которого я стараюсь избегать при помощи директив Каталога для предотвращения отсутствия производительности, вызванного .htaccess.
Во всяком случае я вне идей с того, где посмотреть или что попробовать. Я поворачиваюсь в кругах, чтобы быть честным и ценил бы любую подсказку, идеи или решения получить меня далее.
Оказывается, AddExternalAuth и SetExternalAuthMethod должны быть размещены в объявлении VirtualHost. Следовательно следующая конфигурация работает просто великолепно:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
<Directory /var/www/html/sec>
AuthType Basic
AuthName "Restricted Area"
AuthBasicProvider external
AuthExternal pwauth
Require user pat
</Directory>
</VirtualHost>
я все еще не понимаю, почему сценарий, в котором объявление сделано глобально, следовательно непосредственно в apache2.conf, не работает. Тем не менее, начальная проблема решена....
Вещи, кажется, отличаются между апачскими версиями. Для apache2.4 GitHub для mod-auth-external привел меня к правильному пути.
В apache2.conf
создайте метод аутентификации (здесь: checkEtcPasswd):
<IfModule mod_authnz_external.c>
DefineExternalAuth checkEtcPasswd pipe /usr/sbin/pwauth
# AddExternalAuth pwauth /usr/sbin/pwauth
# SetExternalAuthMethod pwauth pipe
</IfModule>
Отошлите этот аутентификатор в блоке:
AuthType Basic
AuthName "Your AuthName"
AuthBasicProvider external
AuthExternal checkEtcPasswd
Require valid-user
Именно. Легкий, если Вы знаете это...