如何使用 LDAP 进行身份验证¶
Galaxy 可以使用django_auth_ldap
包启用 LDAP 集成,更多关于该插件的信息可以在插件文档中找到:https://django-auth-ldap.readthedocs.io/
需求¶
一个正在运行且可访问的LDAP
或AD
服务器。
提示
为了测试目的,您可以使用https://github.com/rroemhild/docker-test-openldap
启动一个 OpenLDAP 测试服务器,该服务器运行在10389
端口。
检查您的 LDAP 服务器是否正在运行
您需要在本地主机上安装 ldap-utils
# List all users
ldapsearch -H ldap://localhost:10389 -x -b "ou=people,dc=planetexpress,dc=com" -D "cn=admin,dc=planetexpress,dc=com" -w GoodNewsEveryone "(objectClass=inetOrgPerson)"
# List all groups
ldapsearch -H ldap://localhost:10389 -x -b "ou=people,dc=planetexpress,dc=com" -D "cn=admin,dc=planetexpress,dc=com" -w GoodNewsEveryone "(objectClass=Group)"
启用 Galaxy LDAP 集成¶
以下设置可以添加到/etc/pulp/settings.py
或作为以PULP_
为前缀的环境变量导出。
注意
当使用 AAP 平台安装程序时,变量设置在安装程序清单文件中的automationhub_ldap
和ldap_extra_settings
下。
使用环境变量的示例
提示
要使用/etc/pulp/settings.py
设置这些变量,请删除PULP_
前缀,并使用正常的 Python 对象(如布尔值、列表和字典)声明,而不是 TOML 格式。
默认情况下,身份验证类和部署模式已设置为以下值,您无需更改它,**只需确认这是您已有的设置。**
PULP_GALAXY_AUTHENTICATION_CLASSES=['galaxy_ng.app.auth.session.SessionAuthentication','rest_framework.authentication.TokenAuthentication','rest_framework.authentication.BasicAuthentication']
PULP_GALAXY_DEPLOYMENT_MODE=standalone
Pulp 容器需要设置此项才能提供与 Docker 注册表兼容的令牌身份验证。https://docs.pulpproject.org/pulp_container/authentication.html
PULP_TOKEN_AUTH_DISABLED=true
必需设置¶
为了将django_auth_ldap
作为第一个身份验证后端包含在内,有一个名为ldap
的预设。
PULP_AUTHENTICATION_BACKEND_PRESET=ldap
自定义身份验证后端的顺序¶
如果您确实要覆盖PULP_AUTHENTICATION_BACKENDS
变量,请将PULP_AUTHENTICATION_BACKEND_PRESET
设置为custom
,如果您需要更改已评估后端的顺序,这可能很有用。
示例
AUTHENTICATION_BACKEND_PRESET='custom'
# arrange the order
AUTHENTICATION_BACKENDS=[
"django.contrib.auth.backends.ModelBackend",
"pulpcore.backends.ObjectRolePermissionBackend",
"galaxy_ng.app.auth.ldap.GalaxyLDAPBackend",
]
必需的特定 django_auth_ldap 设置¶
提示
根据 LDAP 服务器,以下某些设置可能需要更改。
为了启用 LDAP,以下键是**必需的**
PULP_AUTH_LDAP_SERVER_URI="ldap://ldap:10389"
PULP_AUTH_LDAP_BIND_DN="cn=admin,dc=planetexpress,dc=com"
PULP_AUTH_LDAP_BIND_PASSWORD="GoodNewsEveryone"
PULP_AUTH_LDAP_USER_SEARCH_BASE_DN="ou=people,dc=planetexpress,dc=com"
PULP_AUTH_LDAP_USER_SEARCH_SCOPE="SUBTREE"
PULP_AUTH_LDAP_USER_SEARCH_FILTER="(uid=%(user)s)"
PULP_AUTH_LDAP_GROUP_SEARCH_BASE_DN="ou=people,dc=planetexpress,dc=com"
PULP_AUTH_LDAP_GROUP_SEARCH_SCOPE="SUBTREE"
PULP_AUTH_LDAP_GROUP_SEARCH_FILTER="(objectClass=Group)"
PULP_AUTH_LDAP_GROUP_TYPE_CLASS="django_auth_ldap.config:GroupOfNamesType"
自定义组类型¶
在某些情况下,您可能希望使用不同的组类型类,例如,如果您想使用MemberDNGroupType
,您可以设置它,但也必须按如下方式设置 AUTH_LDAP_GROUP_TYPE_PARAMS
PULP_AUTH_LDAP_GROUP_TYPE_CLASS="django_auth_ldap.config:MemberDNGroupType"
PULP_AUTH_LDAP_GROUP_TYPE_PARAMS={name_attr="cn", member_attr="member"}
注意:上面的示例将数据导出为环境变量,因此它使用 TOML 格式来描述字典对象,如果您将这些设置添加到
/etc/pulp/settings.py
,则需要将其声明为常规 Python 字典对象。另一个选项是以PULP_AUTH_LDAP_GROUP_TYPE_PARAMS='@json {"name_attr": "cn", "member_attr": "member"}'
导出。
可选变量:¶
PULP_AUTH_LDAP_USER_ATTR_MAP={first_name="givenName", last_name="sn", email="mail"}
# NOTE: the above is formatted as a toml hashmap
PULP_AUTH_LDAP_MIRROR_GROUPS=true
# The above is what enabled group mirroring
# the same variable also accepts a list of groups to mirror
PULP_AUTH_LDAP_MIRROR_GROUPS=['admin_staff', 'ship_crew']
如果您不希望将所有组添加到 Hub,您可以限制镜像哪些组。
PULP_AUTH_LDAP_MIRROR_GROUPS_EXCEPT=['foobar']
# this syncs all groups except the `foobar`
为所有用户要求一个特定组
PULP_AUTH_LDAP_REQUIRE_GROUP='hub_users'
# Only users belonging to this group will be allowed to login
仅镜像 Hub 上已存在的组¶
PULP_GALAXY_LDAP_MIRROR_ONLY_EXISTING_GROUPS=true
设置为true
时,只有 Hub 上已存在的组才会被镜像,这意味着用户可以登录,但并非所有来自 LDAP 的用户组都会被镜像,身份验证后端只会将与 Hub 中现有组名称相同的组映射到用户。
注意
设置此选项后,无论您为这两个变量设置什么值,变量AUTH_LDAP_MIRROR_GROUPS
都将自动设置为true
,而AUTH_LDAP_MIRROR_GROUPS_EXCEPT
将默认为false
。
将 LDAP 中的组映射到 Django 上的用户属性:¶
例如:属于 LDAP 中admin_staff
的用户在 Django 中是superuser
。
PULP_AUTH_LDAP_USER_FLAGS_BY_GROUP__is_superuser="cn=admin_staff,ou=people,dc=planetexpress,dc=com"
相同的逻辑可以应用于任何其他属性
PULP_AUTH_LDAP_USER_FLAGS_BY_GROUP__is_staff="cn=ship_crew,ou=people,dc=planetexpress,dc=com"
或者选择性地放在/etc/pulp/setting.py
中
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_active": "cn=active,ou=groups,dc=example,dc=com",
"is_staff": (
LDAPGroupQuery("cn=staff,ou=groups,dc=example,dc=com")
| LDAPGroupQuery("cn=admin,ou=groups,dc=example,dc=com")
),
"is_superuser": "cn=superuser,ou=groups,dc=example,dc=com",
}
TLS 验证¶
# Make ldap to call start_tls on connections
PULP_AUTH_LDAP_START_TLS=true
# If using self signed certificates set this
PULP_GALAXY_LDAP_SELF_SIGNED_CERT=true
日志记录¶
# Enable LDAP logging handler
PULP_GALAXY_LDAP_LOGGING=true
缓存¶
# Change the caching lifetime in seconds (for groups and users search)
PULP_AUTH_LDAP_CACHE_TIMEOUT=3600
LDAP 转介¶
MS 活动目录,但搜索操作可能会导致异常ldap.OPERATIONS_ERROR
,诊断消息文本为“为了执行此操作,必须在连接上完成成功的绑定”。或者,Samba 4 AD 返回诊断消息“未经身份验证则无法使用此操作”。
要解决此问题,可以禁用 LDAP 转介查找
PULP_GALAXY_LDAP_DISABLE_REFERRALS=true
以上将在设置中将适当的选项设置为AUTH_LDAP_CONNECTION_OPTIONS
。
更多设置可以在https://django-auth-ldap.readthedocs.io/en/latest/reference.html#settings找到