Пост

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
Авторский пост защищен лицензией CC BY 4.0 .

© IT Draft. Некоторые права защищены.