

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Usar autenticação LDAP
<a name="emr-jupyterhub-ldap-users"></a>

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 [plug-in autenticador LDAP for with JupyterHub on JupyterHub Amazon EMR para](https://github.com/jupyterhub/ldapauthenticator/) usar o LDAP para autenticação do usuário. O plug-in processa sessões de login para usuários LDAP e fornece as informações do usuário para o Jupyter. Isso permite que os usuários se conectem a notebooks JupyterHub e notebooks usando as credenciais de suas identidades armazenadas em um servidor compatível com LDAP.

As etapas desta seção orientam você pelas etapas a seguir para configurar e habilitar o LDAP usando o plug-in autenticador LDAP para. 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](emr-jupyterhub-connect.md).

1. 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.

1. Modifique o `/etc/jupyter/conf/jupyterhub_config.py` para habilitar o Plugin do Autenticador LDAP para o JupyterHub.

1. Crie e execute um script que configura o LDAP dentro do contêiner `jupyterhub`.

1. Consulte o LDAP para usuários e, em seguida, crie diretórios pessoais dentro do contêiner para cada usuário. JupyterHub requer diretórios pessoais para hospedar notebooks.

1. Execute um script que reinicia 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
<a name="emr-jupyterhub-ldap-config"></a>

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.conf](http://manpages.ubuntu.com/manpages/bionic/man5/ldap.conf.5.html), com conteúdo semelhante ao seguinte. Use os valores apropriados para a sua implementação do LDAP. *host*Substitua pelo endereço IP ou nome de host resolvível do seu servidor LDAP.

```
base dc=example,dc=org
uri ldap://host
ldap_version 3
binddn cn=admin,dc=example,dc=org
bindpw admin
```

## Ativar o plug-in de autenticação LDAP para JupyterHub
<a name="emr-jupyterhub-ldap-plugin"></a>

Use um editor de texto para modificar o arquivo `/etc/jupyter/conf/jupyterhub_config.py` e adicionar as propriedades [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) semelhante ao seguinte. *host*Substitua pelo endereço IP ou nome de host resolvível do servidor LDAP. O exemplo pressupõe que os objetos do usuário estão dentro de uma unidade organizacional (ou) chamada *people* e usa os componentes de nome distinto que você estabeleceu anteriormente usando`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
<a name="emr-jupyterhub-ldap-container"></a>

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
<a name="emr-jupyterhub-ldap-adproperties"></a>

Para encontrar cada usuário e criar a entrada apropriada no banco de dados, o contêiner JupyterHub docker requer as seguintes propriedades UNIX para o objeto de usuário correspondente no Active Directory. Para obter mais informações, consulte a seção *Como continuo editando os atributos do GID/UID RFC 2307 agora que o Plug-in de Atributos Unix não está mais disponível para o snap-in MMC de Usuários e Computadores do Active Directory*? no artigo [Esclarecimento sobre o status do gerenciamento de identidade para Unix (IDMU) e a função de servidor NIS na versão prévia técnica do Windows Server 2016 e](https://blogs.technet.microsoft.com/activedirectoryua/2016/02/09/identity-management-for-unix-idmu-is-deprecated-in-windows-server/) versões posteriores.
+ `homeDirectory`

  Este é o local para o diretório inicial do usuário, que é geralmente `/home/username`.
+ `gidNumber`

  Um valor maior que 60000 que ainda não esteja sendo usado por outro usuário. Verifique o arquivo `etc/passwd` para ver os GIDs que estão sendo usados.
+ `uidNumber`

  Um valor maior que 60000 que ainda não esteja sendo usado por outro grupo. Verifique o arquivo `etc/group` para ver os UDIs que estão sendo usados.
+ `uid`

  Isso é o mesmo que *username* o.

## Criar diretórios iniciais do usuário
<a name="emr-jupyterhub-ldap-directories"></a>

JupyterHub precisa de diretórios iniciais dentro do contêiner para autenticar usuários 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 obter as informações de ID de usuário e ID de grupo de cada usuário usando [ldapsearch](http://manpages.ubuntu.com/manpages/xenial/man1/ldapsearch.1.html), conforme mostrado no exemplo a seguir, *host* substituindo pelo endereço IP ou nome de host resolvível do seu 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ários locais. Para obter mais informações, consulte [Observação da configuração do autenticador do LDAP sobre criação de usuário local](https://github.com/jupyterhub/ldapauthenticator#configuration-note-on-local-user-creation).   
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"
```

## Reinicie o JupyterHub contêiner
<a name="emr-jupyterhub-ldap-restart"></a>

Para reiniciar o contêiner `jupyterhub`, execute os seguintes comandos:

```
sudo docker stop jupyterhub
sudo docker start jupyterhub
```