Usar autenticação LDAP
O LDAP (Lightweight Directory Access Protocol) é um protocolo de aplicativo para consultar e modificar objetos que correspondem a recursos, como usuários e computadores, armazenados em um provedor de serviços de diretório compatível com LDAP, como o Active Directory ou um servidor OpenLDAP. Você pode usar o Plugin do autenticador LDAP para JupyterHub
As etapas nesta seção mostram as etapas a seguir para configurar e ativar o LDAP usando o Plugin do Autenticador LDAP para o JupyterHub. Execute as etapas enquanto estiver conectado à linha de comando do nó principal. Para obter mais informações, consulte Conectar-se ao nó principal e aos servidores de cadernos.
Crie um arquivo de configuração LDAP com informações sobre o servidor LDAP, como o endereço IP do host, a porta, nomes de vinculação, e assim por diante.
Modifique
/etc/jupyter/conf/jupyterhub_config.pypara habilitar o Plugin do autenticador LDAP para o JupyterHub.Crie e execute um script que configura o LDAP dentro do contêiner
jupyterhub.Consulte LDAP para usuários e, em seguida, crie diretórios iniciais no contêiner de cada usuário. O JupyterHub requer diretórios iniciais para hospedar notebooks.
Execute um script que reinicia o JupyterHub
Importante
Antes de configurar o LDAP, teste a infraestrutura de rede para garantir que o servidor LDAP e o nó principal do cluster possa se comunicar, conforme necessário. O TLS normalmente usa a porta 389 por meio de uma conexão TCP simples. Se a sua conexão LDAP usar SSL, a porta TCP conhecida para SSL será 636.
Criar o arquivo de configuração do LDAP
O exemplo abaixo usa os seguintes valores de configuração do espaço reservado. Substitua esses valores pelos parâmetros que corresponde à sua implementação.
O servidor LDAP está executando a versão 3 e está disponível na porta 389. Essa é a porta não SSL padrão para o LDAP.
O nome diferenciado base (DN) é
dc=example, dc=org.
Use um editor de texto para criar o arquivo ldap.confhost pelo endereço IP ou pelo nome de host que possa ser resolvido de seu servidor LDAP.
base dc=example,dc=org uri ldap://hostldap_version 3 binddn cn=admin,dc=example,dc=orgbindpw admin
Habilitar o Plugin do autenticador LDAP para o JupyterHub
Use um editor de texto para modificar o arquivo /etc/jupyter/conf/jupyterhub_config.py e adicionar as propriedades ldapauthenticatorhost pelo endereço IP ou pelo nome de host que possa ser resolvido do servidor LDAP. O exemplo assume que os objetos do usuário estão dentro de uma unidade organizacional (ou) denominada people (pessoas) e use os componentes de nome distinto que você estabeleceu anteriormente usando o 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'
Configurar o LDAP dentro do contêiner
Use um editor de texto para criar um script bash com o seguinte conteúdo:
#!/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"
Salve o script no nó principal e, em seguida, execute-o na linha de comando do nó principal. Por exemplo, com o script salvo como configure_ldap_client.sh, torne o arquivo executável:
chmod +x configure_ldap_client.sh
E execute o script:
./configure_ldap_client.sh
Adicionar atributos ao Active Directory
Para localizar cada usuário e criar a entrada apropriada no banco de dados, o contêiner de docker JupyterHub requer as seguintes propriedades do UNIX para o objeto de usuário correspondente no Active Directory. Para obter mais informações, consulte a seção Como continuo a editar os atributos GID/UID RFC 2307 agora que o Plug-in de atributos do Unix não está mais disponível para o snap-in do MMC de usuários e computadores do Active Directory? no artigo Esclarecimento sobre o status do gerenciamento de identidade para Unix (IDMU) da função do servidor NIS na visualização técnica do Windows Server 2016 e além
homeDirectoryEste é o local para o diretório inicial do usuário, que é geralmente
/home/.usernamegidNumberUm valor maior que 60000 que ainda não esteja sendo usado por outro usuário. Verifique o arquivo
etc/passwdpara ver os GIDs que estão sendo usados.uidNumberUm valor maior que 60000 que ainda não esteja sendo usado por outro grupo. Verifique o arquivo
etc/grouppara ver os UDIs que estão sendo usados.uidÉ o mesmo que o
nome de usuário.
Criar diretórios iniciais do usuário
O JupyterHub precisa de diretórios iniciais dentro do contêiner para autenticar usuários do LDAP e armazenar dados da instância. O exemplo a seguir demonstra dois usuários, shirley e diego, no diretório LDAP.
A primeira etapa é consultar o servidor LDAP para cada ID de usuário e informações de ID do grupo usando ldapsearchhost pelo endereço IP ou nome de host que possa ser resolvido do servidor LDAP:
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
O comando ldapsearch retorna uma resposta formatada LDIF que se parece com a seguinte para os usuários shirley e diego.
# 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
Ao usar as informações da resposta, execute comandos dentro do contêiner para criar um diretório inicial para cada nome comum de usuário (cn). Use o uidNumber e o gidNumber para corrigir a propriedade do diretório inicial desse usuário. Os comandos de exemplo a seguir fazem isso para o usuário 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"
nota
O autenticador LDAP para JupyterHub não oferece suporte à criação de usuário local. Para obter mais informações, consulte Observação da configuração do autenticador do LDAP sobre criação de usuário local
Para criar um usuário local manualmente, use o comando a seguir.
sudo docker exec jupyterhub bash -c "echo 'shirley:x:$uidNumber:$gidNumber::/home/shirley:/bin/bash' >> /etc/passwd"
Reiniciar o contêiner do JupyterHub
Para reiniciar o contêiner jupyterhub, execute os seguintes comandos:
sudo docker stop jupyterhub sudo docker start jupyterhub