Назад | Перейти на главную страницу

Freeradius, аутентификация через сценарий BASH, авторизация через членство в группе LDAP?

У меня есть собственный контейнер ubuntu, содержащий Freeradius в кластере kubernetes. Из-за того, как работают контейнеры, обычный метод SAMBA / Winbind интеграции Freeradius / AD не является вариантом, поэтому я написал сценарий BASH для аутентификации учетных данных пользователя, а также у меня установлен модуль LDAP для авторизации пользователей для определенных служб на основе группы членство.

На данный момент мне удалось настроить Freeradius только на авторизацию на основе членства в группе, без принятия решения на основе результата сценария. Я пробовал много разных конфигураций файла авторизации, но здесь я покажу только пару. Это дает доступ даже с плохим паролем:

DEFAULT  Auth-Type = Accept
         Exec-Program = "/path/to/script/auth.sh %{User-Name} %{User-Password}",
         Fall-Through = Yes
DEFAULT  Ldap-Group == "Admingroup", Auth-Type := Accept
         Service-Type = Administrative-User,
         cisco-avpair ='shell:priv-lvl=15'
DEFAULT  Auth-Type := Reject
         Reply-Message = "Authorization failed."

А этот запрещает доступ независимо от предоставленных учетных данных:

DEFAULT  Ldap-Group == "Admingroup", Exec-Program = "/path/to/script/auth.sh %{User-Name} %{User-Password}", Auth-Type := Accept
         Service-Type = Administrative-User,
         cisco-avpair ='shell:priv-lvl=15'
DEFAULT  Auth-Type := Reject
         Reply-Message = "Authorization failed."

Я знаю, что мой скрипт работает сам по себе, поскольку я тестировал его независимо от Freeradius, и я знаю, что нет ничего плохого в конфигурации самого модуля LDAP, поскольку он может подключаться к AD для проверки членства в группе. В первую очередь я подозреваю, что проблема заключается в конфигурации файла авторизации, однако не стесняйтесь спрашивать о любых других файлах конфигурации, хотя я скажу, что, кроме radiusd.conf, clients.conf и ldap, все остальные файлы будут быть в состоянии по умолчанию с момента их установки.

Я смог решить проблему. Вот правильный конфиг для авторизации:

DEFAULT  Ldap-Group == "Admingroup", Auth-Type := Accept
         Exec-Program-Wait = "/path/to/script/auth.sh %{User-Name} %{User-Password}",
         Service-Type = Administrative-User,
         cisco-avpair ='shell:priv-lvl=15'
DEFAULT  Auth-Type := Reject
         Reply-Message = "Authorization failed."

Кроме того, модуль exec пришлось изменить в /etc/freeradius/3.0/mods-enabled/exec. Переменная "wait" должна быть установлена ​​в значение yes, чтобы freeradius мог использовать код выхода скрипта, чтобы определить, принять или отклонить:

exec {
        wait = yes
        input_pairs = request
        shell_escape = yes
        timeout = 2
}