RADIUS (Remote Authentication Dial-In User Service) умеет работать с различными "базами": от простых файлов до SQL серверов. Но мне при вводе в эксплуатацию ALD Pro (FreeIPA с LDAP под капотом) потребовалось реализовать задачу по интеграции RADIUS с импортозамещённым LDAP.
Мои коллеги-сетевики, как и прежде:
В статье будут приведены готовые конфигурационные файлы, которые вы уже адаптируете по себя сами. По умолчанию, во FreeRADIUS 3.0 конфигурационные файлы содержат комментарии и множество параметров, которые или заремарены или не имеют отношения с сути вопроса. В примерах используется вымышленная компания с доменом company.ru, замените на свои значения.
sudo systemctl stop freeradius && sudo freeradius -X
Всем кто работал с Apache2 знакома концепция где что-то лежит в папке *-available, а включается в работу ссылкой в *-enabled или выключается удалением из неё.
Файл /etc/freeradius/3.0/sites-enabled/ALDPro в папке один и содержит
server aldpro { listen { type = auth ipaddr = * port = 1812 } authorize { ldap if (ok || updated) { update control { Auth-Type := ldap } if ( LDAP-Group == "network-admins" ) { update reply { Cisco-AVPair = "shell:priv-lvl=15" Service-Type = 6 } } else { reject } } } authenticate { Auth-Type LDAP { ldap } } }
где network-admins это существующая группа в вашем домене ALD Pro (FreeIPA), членам которой будет дана возможность привилегированного доступа через Cisco-AVPair = "shell:priv-lvl=15" и Service-Type = 6. Ветвь else reject отказывает всем кто не в группе network-admins. Данный "кусок кода" в случае ошибок в конфигурировании сетевого оборудования не позволит пользователям домена авторизоваться на сетевом оборудовании даже с минимальными привилегиями.
Приведите содержимое файла /etc/freeradius/3.0/mods-available/ldap к виду
ldap { server = '10.0.1.2' server = '10.0.1.3' port = 389 identity="uid=radius,cn=users,cn=accounts,dc=company,dc=ru" password="SSuuPerSecretP$$wd" base_dn="cn=users,cn=accounts,dc=company,dc=ru" user { base_dn = "${..base_dn}" filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})" } group { membership_filter = "(&(objectClass=posixGroup)(memberUid=%{%{Stripped-User-Name}:-%{User-Name}}))" membership_attribute = memberOf } }
где
sudo systemctl stop freeradius && sudo freeradius -X
вы можете вызывать в отдельном Терминале что-то типа radtest useraldpro Pa$$useradlpro 127.0.0.1 1812 testing123
, где useraldpro и Pa$$useradlpro - это учётная запись и пароль обычного пользователя, которому будет отказано в доступе. А пользователю из группы network-admins с его логином и паролем будет предоставлен доступ (Sent Access-Accept) и вы должны наблюдать в окне отладки строки вида(0) if ( LDAP-Group == "network-admins" ) -> TRUE (0) update reply { (0) Cisco-AVPair = "shell:priv-lvl=15" (0) Service-Type = Administrative-User
Дополнительная информация
Дата последней правки: 2025-04-10 15:17:54