У меня есть собственный контейнер 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
}