LDAP-авторизация в Netbox (AD, FreeIPA)
Netbox — веб приложение с открытым исходным кодом, разработанное для управления и документирования компьютерных сетей. Изначально Netbox придуман командой сетевых инженеров DigitalOcean специально для системных администраторов.
Настройка LDAP-авторизации
Устанавливаем недостающие пакеты
1
$ sudo yum install python-devel
Переключаемся на пользователя root
и активируем виртуальную среду Python
1
2
$ sudo su
# source /opt/netbox/venv/bin/activate
Устанавливаем python-модуль и деактивируем виртуальную среду
1
2
(venv) # pip install django-auth-ldap
(venv) # deactivate
Переключаемся на нашего основного пользователя
1
# exit
Добавляем установленный python-модуль в файл local_requirements.txt
1
2
3
$ sudo nano /opt/netbox/local_requirements.txt
...
django-auth-ldap
Меняем конфигурационный файл configuration.py
1
2
3
4
5
6
7
$ sudo nano /opt/netbox/netbox/netbox/configuration.py
...
#REMOTE_AUTH_ENABLED = False
REMOTE_AUTH_ENABLED = True
#REMOTE_AUTH_BACKEND = 'netbox.authentication.RemoteUserBackend'
REMOTE_AUTH_BACKEND = 'netbox.authentication.LDAPBackend'
...
Создаем конфигурационный файл с настройками LDAP и меняем владельца файла
1
2
$ sudo touch /opt/netbox/netbox/netbox/ldap_config.py
$ sudo chown netbox:netbox /opt/netbox/netbox/netbox/ldap_config.py
LDAP авторизации для FreeIPA
Пример файла LDAP конфигурации ldap_config.py
для FreeIPA
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$ sudo nano /opt/netbox/netbox/netbox/ldap_config.py
import ldap
from django_auth_ldap.config import LDAPSearch, NestedGroupOfNamesType
AUTH_LDAP_SERVER_URI = "ldap://172.16.0.2"
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_REFERRALS: 0
}
AUTH_LDAP_BIND_DN = "uid=netbox_s,cn=users,cn=accounts,dc=itdraft,dc=local"
AUTH_LDAP_BIND_PASSWORD = "qus*MssscCCn3r"
LDAP_IGNORE_CERT_ERRORS = True
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=users,cn=accounts,dc=itdraft,dc=local", ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
AUTH_LDAP_USER_DN_TEMPLATE = None
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("cn=groups,cn=accounts,dc=itdraft,dc=local", ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
#AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType()
AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType(name_attr="cn")
AUTH_LDAP_ALWAYS_UPDATE_USER = True
#AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=ipausers,cn=groups,cn=accounts,dc=itdraft,dc=local",
"is_staff": "cn=ipausers,cn=groups,cn=accounts,dc=itdraft,dc=local",
"is_superuser": "cn=ipausers,cn=groups,cn=accounts,dc=itdraft,dc=local"
}
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_CACHE_TIMEOUT = 3600
AUTHENTICATION_BACKENDS = (
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
)
LDAP авторизации для Active Directory
Пример файла LDAP конфигурации ldap_config.py
для Active Directory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
$ sudo nano /opt/netbox/netbox/netbox/ldap_config.py
import ldap
from django_auth_ldap.config import LDAPSearch, NestedGroupOfNamesType
AUTH_LDAP_SERVER_URI = "ldap://172.16.0.2"
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_REFERRALS: 0
}
AUTH_LDAP_BIND_DN = "cn=netbox_s,ou=ServiceAccounts,ou=MSK,dc=itdraft,dc=ru"
AUTH_LDAP_BIND_PASSWORD = "3ghJnd56hff"
LDAP_IGNORE_CERT_ERRORS = True
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=Users,ou=MSK,dc=itdraft,dc=ru", ldap.SCOPE_SUBTREE, "(sAMAccountName=%(user)s)")
AUTH_LDAP_USER_DN_TEMPLATE = None
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=Groups,ou=MSK,dc=itdraft,dc=ru", ldap.SCOPE_SUBTREE, "(objectClass=group)")
AUTH_LDAP_GROUP_TYPE = NestedGroupOfNamesType(name_attr="cn")
AUTH_LDAP_ALWAYS_UPDATE_USER = True
#AUTH_LDAP_MIRROR_GROUPS = True
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=00.gruop.001,ou=Groups,ou=MSK,dc=itdraft,dc=ru",
"is_staff": "cn=00.gruop.001,ou=Groups,ou=MSK,dc=itdraft,dc=ru",
"is_superuser": "cn=00.gruop.001,ou=Groups,ou=MSK,dc=itdraft,dc=ru"
}
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_CACHE_TIMEOUT = 3600
AUTHENTICATION_BACKENDS = (
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
)
Заключение
После внесения изменений не забываем перезагрузить Netbox
1
$ sudo systemctl restart netbox netbox-rq