

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo dell'autenticazione LDAP
<a name="emr-jupyterhub-ldap-users"></a>

LDAP è un protocollo di applicazioni per inviare query e modificare oggetti che corrispondono a risorse quali utenti e computer archiviati in un provider di servizi di directory compatibile con LDAP, ad esempio Active Directory o un server OpenLDAP. Puoi utilizzare il [plug-in di autenticazione LDAP per with JupyterHub su JupyterHub Amazon EMR per](https://github.com/jupyterhub/ldapauthenticator/) utilizzare LDAP per l'autenticazione degli utenti. Il plugin gestisce sessioni di accesso per utenti LDAP e fornisce informazioni utente a Jupyter. Ciò consente agli utenti di connettersi ai notebook utilizzando JupyterHub le credenziali per le loro identità archiviate in un server compatibile con LDAP.

I passaggi di questa sezione illustrano i seguenti passaggi per configurare e abilitare LDAP utilizzando il plug-in LDAP Authenticator per. JupyterHub Eseguire le fasi mentre si è connessi alla riga di comando del nodo master. Per ulteriori informazioni, consulta [Connessione al nodo master e ai server notebook](emr-jupyterhub-connect.md).

1. Crea un file di configurazione LDAP con informazioni sul server LDAP, ad esempio l'indirizzo IP host, la porta, i nomi di binding e così via.

1. Modifica `/etc/jupyter/conf/jupyterhub_config.py` per abilitare LDAP Authenticator Plugin per JupyterHub.

1. Crea ed esegui uno script che configura LDAP all'interno del container `jupyterhub`.

1. Interroga LDAP per gli utenti, quindi crea le home directory all'interno del contenitore per ogni utente. JupyterHub richiede le home directory per ospitare i notebook.

1. Esegui uno script che si riavvia JupyterHub

**Importante**  
Prima di configurare LDAP, verifica l'infrastruttura di rete per garantire che il server LDAP e il nodo master del cluster siano in grado di comunicare come richiesto. TLS utilizza in genere la porta 389 su una connessione TCP semplice. Se la connessione LDAP utilizza SSL, la porta TCP nota per SSL è 636.

## Creazione del file di configurazione LDAP
<a name="emr-jupyterhub-ldap-config"></a>

Nell'esempio seguente vengono utilizzati i seguenti valori di configurazione del segnaposto. Sostituiscili con i parametri che soddisfano l'implementazione.
+ Il server LDAP esegue la versione 3 ed è disponibile sulla porta 389. Questa è la porta non SSL standard per LDAP.
+ Il nome distinto di base (DN) è `dc=example, dc=org`.

Utilizza un editor di testo per creare il file [ldap.conf](http://manpages.ubuntu.com/manpages/bionic/man5/ldap.conf.5.html), con contenuti simili ai seguenti. Utilizza valori appropriate per l'implementazione LDAP. *host*Sostituiscilo con l'indirizzo IP o il nome host risolvibile del tuo server LDAP.

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

## Abilita il plug-in LDAP Authenticator per JupyterHub
<a name="emr-jupyterhub-ldap-plugin"></a>

Utilizza un editor di testo per modificare il file `/etc/jupyter/conf/jupyterhub_config.py` e aggiungere proprietà [ldapauthenticator](https://github.com/jupyterhub/ldapauthenticator) simili alle seguenti. Sostituire *host* con l'indirizzo IP o il nome host risolvibile del server LDAP. L'esempio presuppone che gli oggetti utente si trovino all'interno di un'unità organizzativa (ou) denominata *people* e utilizzi i componenti del nome distinto definiti in precedenza utilizzando. `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'
```

## Configurazione di LDAP all'interno del container
<a name="emr-jupyterhub-ldap-container"></a>

Utilizza un editor di testo per creare uno script bash con il seguente contenuto:

```
#!/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"
```

Salva lo script nel nodo master, quindi eseguilo dalla riga di comando del nodo master. Ad esempio, con lo script salvato come `configure_ldap_client.sh`, rendi il file eseguibile:

```
chmod +x configure_ldap_client.sh
```

Ed esegui lo script:

```
./configure_ldap_client.sh
```

## Aggiunta di attributi ad Active Directory
<a name="emr-jupyterhub-ldap-adproperties"></a>

Per trovare ogni utente e creare la voce appropriata nel database, il contenitore JupyterHub docker richiede le seguenti proprietà UNIX per l'oggetto utente corrispondente in Active Directory. Per ulteriori informazioni, vedere la sezione *Come posso continuare a modificare gli attributi GID/UID RFC 2307 ora che il plug-in Unix Attributes non è più disponibile per lo snap-in MMC Active Directory Users* and Computers? nell'articolo [Chiarimenti sullo stato della gestione delle identità per Unix (IDMU) e sul ruolo del server NIS nell'anteprima tecnica di Windows Server 2016 e](https://blogs.technet.microsoft.com/activedirectoryua/2016/02/09/identity-management-for-unix-idmu-is-deprecated-in-windows-server/) oltre.
+ `homeDirectory`

  Questo è il percorso alla home directory dell'utente, in genere `/home/username`.
+ `gidNumber`

  Si tratta di un valore maggiore di 60000 che non è già utilizzato da un altro utente. Seleziona il file `etc/passwd` per i gid in uso.
+ `uidNumber`

  Si tratta di un valore maggiore di 60000 che non è già utilizzato da un altro gruppo. Seleziona il file `etc/group` per gli uid in uso.
+ `uid`

  È lo stesso di. *username*

## Creazione di home directory dell'utente
<a name="emr-jupyterhub-ldap-directories"></a>

JupyterHub necessita di home directory all'interno del contenitore per autenticare gli utenti LDAP e archiviare i dati delle istanze. Nell'esempio seguente vengono illustrati due utenti, *shirley* e *diego*, nella directory LDAP.

Il primo passaggio consiste nell'interrogare il server LDAP per le informazioni sull'ID utente e sull'ID di gruppo di ciascun utente utilizzando [ldapsearch](http://manpages.ubuntu.com/manpages/xenial/man1/ldapsearch.1.html), come mostrato nell'esempio seguente, sostituendolo *host* con l'indirizzo IP o il nome host risolvibile del server 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
```

Il comando `ldapsearch` restituisce una risposta in formato LDIF il cui aspetto è simile al seguente per gli utenti *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
```

Utilizzando le informazioni della risposta, esegui comandi all'interno del container per creare una home directory per ogni nome comune dell'utente (`cn`). Utilizza `uidNumber` e `gidNumber` per correggere la proprietà per la home directory di tale utente. I seguenti comandi di esempio eseguono questa operazione per l'utente. *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**  
L'autenticatore LDAP per non JupyterHub supporta la creazione di utenti locali. Per ulteriori informazioni, consulta [Nota sulla configurazione di LDAP Authenticator per la creazione di utenti locali](https://github.com/jupyterhub/ldapauthenticator#configuration-note-on-local-user-creation).   
Per creare manualmente un utente locale, utilizzare il comando seguente.  

```
sudo docker exec jupyterhub bash -c "echo 'shirley:x:$uidNumber:$gidNumber::/home/shirley:/bin/bash' >> /etc/passwd"
```

## Riavvia il contenitore JupyterHub
<a name="emr-jupyterhub-ldap-restart"></a>

Esegui i comandi seguenti per riavviare il container `jupyterhub`:

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