本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 LDAP 身份验证
轻型目录访问协议 (LDAP) 是一种应用程序协议,用于查询和修改与存储在LDAP兼容目录服务提供商(例如 Active Directory 或 Open LDAP 服务器)中的资源(例如用户和计算机)相对应的对象。您可以在 Amazon JupyterHub 上使用 LDAPwith 的 JupyterHub身份验证器插件
本节中的步骤将引导您完成以下步骤来设置和启LDAP用 LDAP Authenticator 插 JupyterHub件。在连接到主节点命令行时执行这些步骤。有关更多信息,请参阅连接到主节点和笔记本服务器。
创建包含LDAP服务器相关信息的LDAP配置文件,例如主机 IP 地址、端口、绑定名称等。
修改
/etc/jupyter/conf/jupyterhub_config.py
为启用LDAP身份验证器插件。 JupyterHub创建并运行在
jupyterhub
容器LDAP内配置的脚本。LDAP查询用户,然后在容器中为每个用户创建主目录。 JupyterHub 需要主目录来托管笔记本电脑。
运行可重新启动的脚本 JupyterHub
重要
在设置之前LDAP,请测试您的网络基础架构,以确保LDAP服务器和群集主节点可以根据需要进行通信。TLS通常通过普通TCP连接使用端口 389。如果您的LDAP连接使用SSL,则众所周知的TCP端口SSL是 636。
创建LDAP配置文件
下方的示例使用以下占位符配置值。将这些值替换为与您的实施匹配的参数。
LDAP服务器运行的是版本 3,可在端口 389 上使用。这是的标准非SSL端口LDAP。
基本可分辨名称 (DN) 为
dc=example, dc=org
。
使用文本编辑器创建内容与下类似的 ldap.confhost
使用LDAP服务器的 IP 地址或可解析的主机名。
base dc=example,dc=org uri ldap://
host
ldap_version 3 binddn cn=admin
,dc=example
,dc=org
bindpw admin
启用LDAP身份验证器插件 JupyterHub
使用文本编辑器修改 /etc/jupyter/conf/jupyterhub_config.py
文件并添加与下类似的 ldapauthenticatorhost
使用LDAP服务器的 IP 地址或可解析的主机名。该示例假设用户对象位于名为的组织单位 (ou) 中 people
,并使用您之前使用建立的可分辨名称组件ldap.conf
。
c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator' c.LDAPAuthenticator.use_ssl = False c.LDAPAuthenticator.server_address = '
host
' c.LDAPAuthenticator.bind_dn_template = 'cn={username},ou=people
,dc=example
,dc=org
'
在容器LDAP内配置
使用文本编辑器创建包含以下内容的清除脚本:
#!/bin/bash # Uncomment the following lines to install LDAP client libraries only if # using Amazon EMR release version 5.14.0. Later versions install libraries by default. # sudo docker exec jupyterhub bash -c "sudo apt-get update" # sudo docker exec jupyterhub bash -c "sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd" # Copy ldap.conf sudo docker cp ldap.conf jupyterhub:/etc/ldap/ sudo docker exec jupyterhub bash -c "cat /etc/ldap/ldap.conf" # configure nss switch sudo docker exec jupyterhub bash -c "sed -i 's/\(^passwd.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "sed -i 's/\(^group.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "sed -i 's/\(^shadow.*\)/\1 ldap/g' /etc/nsswitch.conf" sudo docker exec jupyterhub bash -c "cat /etc/nsswitch.conf" # configure PAM to create home directories sudo docker exec jupyterhub bash -c "echo 'session required pam_mkhomedir.so skel=/etc/skel umask=077' >> /etc/pam.d/common-session" sudo docker exec jupyterhub bash -c "cat /etc/pam.d/common-session" # restart nscd service sudo docker exec jupyterhub bash -c "sudo service nscd restart" # Test sudo docker exec jupyterhub bash -c "getent passwd" # Install ldap plugin sudo docker exec jupyterhub bash -c "pip install jupyterhub-ldapauthenticator"
将脚本保存到主节点,然后从主节点命令行运行它。例如,对于另存为 configure_ldap_client.sh
的脚本,使此文件成为可执行文件:
chmod +x configure_ldap_client.sh
并运行此脚本:
./configure_ldap_client.sh
将属性添加到 Active Directory
要查找每个用户并在数据库中创建相应的条目, JupyterHub docker 容器需要 Active Direct UNIX ory 中相应用户对象的以下属性。有关更多信息,请参阅 “既然 Unix 属性插件不再适用于 Active Directory 用户和计算机MMC” 管理单元,我该如何继续编辑GID/UIDRFC2307 属性一节? 在文章《澄清 Unix 的身份管理状态》(IDMU) 和 Windows Server 2016 技术预览版及以后的版本中的NIS服务器角色中
homeDirectory
这是用户主目录的位置,通常是
/home/
。username
gidNumber
这是一个大于 60000 的值,尚未被其它用户使用。检查
etc/passwd
文件中是否有正在使用的 GID。uidNumber
这是一个大于 60000 的值,尚未被其它组使用。检查
etc/group
文件中是否有正在使用的 UID。uid
这与
username
.
创建用户主目录
JupyterHub 需要容器内的主目录来对LDAP用户进行身份验证和存储实例数据。以下示例演示了LDAP目录中的两个用户 s hirley 和 d iego。
第一步是使用 ldapsearhost
使用LDAP服务器的 IP 地址或可解析的主机名:
ldapsearch -x -H ldap://
host
\ -D "cn=admin,dc=example,dc=org" \ -w admin \ -b "ou=people,dc=example,dc=org" \ -s sub \ "(objectclass=*)" uidNumber gidNumber
对于用户 sh LDIF irley 和 diego,该ldapsearch
命令返回的响应与以下内容类似。
# extended LDIF # LDAPv3 # base <ou=people,dc=example,dc=org> with scope subtree # filter: (objectclass=*) # requesting: uidNumber gidNumber sn # people, example.org dn: ou=people,dc=example,dc=org # diego, people, example.org dn: cn=diego,ou=people,dc=example,dc=org sn: B uidNumber: 1001 gidNumber: 100 # shirley, people, example.org dn: cn=shirley,ou=people,dc=example,dc=org sn: A uidNumber: 1002 gidNumber: 100 # search result search: 2 result: 0 Success # numResponses: 4 # numEntries: 3
通过使用响应中的信息,在容器内运行命令以为每个用户公用名 (cn
) 创建一个主目录。使用 uidNumber
和 gidNumber
确定用户对主目录的所有权。以下示例命令可为用户执行此操作 shirley
.
sudo docker container exec jupyterhub bash -c "mkdir /home/
shirley
" sudo docker container exec jupyterhub bash -c "chown -R $uidNumber /home/shirley
" sudo docker container exec jupyterhub bash -c "sudo chgrp -R $gidNumber /home/shirley
"
注意
LDAP的身份验证器 JupyterHub 不支持创建本地用户。有关更多信息,请参阅有关创建本地用户的LDAP身份验证器配置说明
要手动创建本地用户,请使用以下命令。
sudo docker exec jupyterhub bash -c "echo '
shirley
:x:$uidNumber:$gidNumber::/home/shirley
:/bin/bash' >> /etc/passwd"
重启 JupyterHub容器
运行以下命令重新启动 jupyterhub
容器:
sudo docker stop jupyterhub sudo docker start jupyterhub