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