В общем, так вышло, что пришлось обновляться. Обновился также и апач до версии 2.4. В старой версии 2.2 ещё продолжал работать модуль mod_auth_pam и было очень удобно, что я имел аутентификацию такую же, как и системную. В новой версии этот модуль за каким-то лядом выпили и всё перестало работать. Ну ляд там вполне понятный, конечно, кривой код, кривой в итоге модуль. Рекомендовали вместо этого использовать mod_authnz_external. Это, конечно, не то, но тоже решение. Программка pwauth для проверки пользователя по паролю была в комплекте, а вот ещё нужная вещь ограничение по группам пользователя не нашлось. Но нашёлся какой-то перловый скрипт, который шёл в исходниках этого модуля, который почему-то не заработал. Может, поэтому его и не включили в дистрибутивный пакет. Пришлось писать. Основная идея - берем с помощью getent группы и пользователей и создаём списки групп, куда входят как пользователи, которые участвют в списке, так и те, чья группа является основной.
Для реализации пришлось думать что брать. Нужно было, чтобы можно было обрабатывать списки (lisp, ну как же) и при этом чтобы можно было легко и прозрачно взаимодействовать с системой. В прошлом мне нравился Scheme Shell, но его судьба мне теперь неизвестна, вроде на 64 битных платформах с ним туго, хотя, вроде, есть multiarch, но привлёк некий picolisp - с очень свежим (или не очень) взглядом на мир. В общем, в целом обычный лисп, команды относительно удобно вызываются. Пример вызова "getent passwd":
(in (list 'getent "passwd")Ну а дальше дело пошло. :) В общем, вот целиком готовый скрипт. Ну и как у меня выглядит конфиг апача, раз уж речь о нём тоже зашла. Это в конфиге virtualhost.
<какие-то действия>)
# External authА это в конфиге уже непосредственно того ресурса, который нужно разграничивать:
DefineExternalAuth sysauth pipe /usr/sbin/pwauth
DefineExternalGroup sysgroup pipe /usr/local/sbin/sysgroup
AuthType Basic
AuthBasicProvider external
AuthExternal sysauth
GroupExternal sysgroup
AuthName "BAZON.RU projects"
require external-group developers
Делал похожую штуку для plain text авторизации, взял ракету с компиляцией в натив.
ОтветитьУдалитьРакета уже в натив умеет компиляться? Круто.
Удалить