Difference between revisions of "WPA supplicant (Italiano)"

From ArchWiki
Jump to: navigation, search
(Installazione)
(flagged broken section links)
(Tag: wiki-scripts)
 
(43 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:Wireless Networking (Italiano)]]
+
[[Category:Wireless networking (Italiano)]]
[[es:WPA supplicant]]
+
 
[[en:WPA supplicant]]
 
[[en:WPA supplicant]]
[[ru:WPA Supplicant]]
+
[[es:WPA supplicant]]
[[zh-CN:WPA Supplicant]]
+
[[ja:WPA supplicant]]
 +
[[ru:WPA supplicant]]
 +
[[zh-cn:WPA supplicant]]
 +
{{Related articles start (Italiano)}}
 +
{{Related|Network configuration (Italiano)}}
 +
{{Related|Wireless Setup (Italiano)}}
 +
{{Related articles end}}
  
{{Article summary start}}
+
[http://hostap.epitest.fi/wpa_supplicant/ wpa_supplicant] è un [[Wikipedia:Supplicant_(computer)|Supplicant]] WPA multipiattaforma con supporto a WEP, WPA e WPA2 ([[Wikipedia:IEEE_802.11i|IEEE 802.11i]] / RSN (Robust Secure Network)) adatto all'uso con PC desktop, portatili e sistemi embedded. {{ic|wpa_supplicant}} è il componente IEEE 802.1X/WPA utilizzato dai client, implementa la negoziazione della chiave con un WPA Authenticator, controlla il roaming e l'associazione / autenticazione del driver wireless.
{{Article summary text|Installazione ed utilizzo di wpa_supplicant}}
+
{{Article summary heading|Argomenti correlati}}
+
{{Article summary wiki|Configuring Network (Italiano)|Configurazione della rete}}
+
{{Article summary wiki|Wireless Setup (Italiano)|Installazione dispositivi wireless}}
+
{{Article summary end}}
+
  
 +
==Installazione==
  
[http://hostap.epitest.fi/wpa_supplicant/ wpa_supplicant] è un [[Wikipedia:Supplicant_(computer) | Supplicant WPA]] con supporto a WPA e WPA2 ([[Wikipedia:IEEE_802.11i|IEEE 802.11i]] / RSN (Robust Secure Network)) adatto all'uso con PC desktop e portatili e in sistemi embedded. {{ic|wpa_supplicant}} è il componente IEEE 802.1X/WPA utilizzato dai client, implementa la negoziazione della chiave con un WPA Authenticator, controlla il roaming e l'associazione / autenticazione del driver wlan.
+
Si [[Install|installi]] il pacchetto {{Pkg|wpa_supplicant}}.
  
==Installazione==
+
È inoltre possibile installare {{Pkg|wpa_supplicant_gui}} che fornisce ''wpa_gui'', un frontend grafico per ''wpa_supplicant''.
  
Si installi {{Pkg|wpa_supplicant}} dai [[Official Repositories (Italiano)|repository ufficiali]].
+
==Panoramica==
  
È inoltre possibile installare {{Pkg|wpa_supplicant_gui}}; un frontend grafico per {{ic|wpa_supplicant}} che utilizza il toolkit {{Pkg|qt4}}.
+
Affinchè ''wpa_supplicant'' possa connettersi ad una rete wireless, dovrà prima essere autenticato da un WPA authenticator attraverso l'inserimento delle credenziali corrette.
 +
 
 +
Una volta che l'associazione con l'access point è completa è possibile collegarsi alla rete ottenendo un indirizzo IP, manualmente tramite la suite [[Core utilities#ip|iproute2]] o tramite programmi appositi, come [[systemd-networkd]] o [[dhcpcd]], per l'assegnazione automatica di un indirizzo IP tramite DHCP. Si vedano anche gli articoli relativi ad interfacce [[Wireless_network_configuration#Systemd_with_wpa_supplicant_and_static_IP|wireless]]{{Broken section link}} o [[Configuring_Network_(Italiano)#Configurare_l.27indirizzo_IP|via cavo]].
  
 
==Connessione tramite wpa_cli==
 
==Connessione tramite wpa_cli==
  
Per associarsi ad un Access Point wireless utilizzando {{ic|wpa_supplicant}}, utilizzare il tool a riga di comando {{ic|wpa_cli}}, incluso nel pacchetto. Per utilizzare {{ic|wpa_cli}} è necessario specificare una interfaccia di controllo nel file di configurazione, aggiungendo una linea simile a {{ic|1=ctrl_interface=/var/run/wpa_supplicant}}.
+
Questo metodo consente di effettuare una scansione delle reti disponibili utilizzando ''wpa_cli'', un tool a riga di comando che è in grado di configurare ''wpa_supplicant'' a runtime. Si veda [http://linux.die.net/man/8/wpa_cli wpa_cli(8)] per ulteriori informazioni.
  
{{Suggerimento|Si faccia riferimento al file {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} per ulteriori informazioni.}}
+
Per utilizzare ''wpa_cli'', sarà necessario specificare un'interfaccia di controllo per ''wpa_supplicant'' e dotarla dei permessi per modificare il relativo file di configurazione.
  
Per abilitare il salvataggio delle modifiche effettuate tramite {{ic|wpa_cli}}, si aggiunga {{ic|1=update_config=1}} al file di configurazione, quindi si avvii {{ic|wpa_supplicant}} come segue:
+
Si crei quindi un file di configurazione minimale:
  
  # wpa_supplicant -B -i ''interface'' -c ''/percorso/al/file/di/configurazione''
+
{{hc|/etc/wpa_supplicant/esempio.conf|2=
 +
ctrl_interface=/run/wpa_supplicant
 +
update_config=1
 +
}}
 +
 
 +
Si avvii ''wpa_supplicant'' come segue:
 +
 
 +
  # wpa_supplicant -B -i interface -c /etc/wpa_supplicant/esempio.conf
 +
 
 +
{{Suggerimento|Per scoprire il nome della propria interfaccia di rete wireless, si esegua il comando {{ic|ip link}}.}}
  
Si invochi {{ic|wpa_cli}} senza argomenti per ottenere un prompt interattivo ({{ic|>}}). Il prompt supporta la tab completion e contiene le descrizioni dei comandi autocompletati. Ad esempio, il comando {{ic|scan}} avvia una scansione delle reti wireless vicine ed invia una notifica una volta che l'operazione è stata completata.
+
Si esegua:
  
Si esegua quindi:
+
# wpa_cli
{{bc|<nowiki>
+
> scan_results
+
bssid / frequency / signal level / flags / ssid
+
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
+
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID
+
</nowiki>}}
+
  
Per associarsi con ''MYSSID'' sarà necessario informare {{ic|wpa_supplicant}}. Ogni rete è numerata a partire da zero ed è possibile inserire la [http://en.wikipedia.org/wiki/Pre-shared_key PSK] senza apici, alternativamente all'inserimento della passphrase proposto nell'esempio sotto:
+
Verrà visualizzato un prompt interattivo ({{ic|>}}) che dispone di tab completion e descrizione dei comandi completati.
  
{{bc|<nowiki>
+
{{Suggerimento|Il percorso predefinito del socket di controllo è {{ic|/var/run/wpa_supplicant/}}. È possibile impostare un percorso personalizzato tramite il parametro {{ic|-p}}, in modo che corrisponda a quanto contenuto nel file di configurazione. Si può altresì specificare l'interfaccia da configurare con l'opzione {{ic|-i}}. Se non specificata, ''wpa_supplicant'' sceglierà la prima interfaccia disponibile.}}
> add_network
+
0
+
> set_network 0 ssid "MYSSID"
+
> set_network 0 psk "passphrase"
+
> enable_network 0
+
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
+
</nowiki>}}
+
  
Per salvare le informazioni di rete nel file di configurazione si esegua:
+
Si utilizzino i comandi {{ic|scan}} e {{ic|scan_results}} per vedere le reti disponibili:
  
  > save_config
+
  > scan
 
  OK
 
  OK
 +
<3>CTRL-EVENT-SCAN-RESULTS
 +
> scan_results
 +
bssid / frequency / signal level / flags / ssid
 +
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MIOSSID
 +
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ALTROSSID
  
Sarà ora possibile ottenere un indirizzo IP tramite {{Pkg|dhcpcd}} o {{Pkg|iproute2}}.
+
Per associarsi con {{ic|MIOSSID}} si aggiunga la rete, si specifichino le credenziali e la si abiliti:
  
==Configurazione==
+
> add_network
 +
0
 +
> set_network 0 ssid "MIOSSID"
 +
> set_network 0 psk "passphrase"
 +
> enable_network 0
 +
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
  
{{Pkg|wpa_supplicant}} fornisce un file di configurazione d'esempio situato in {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} che documenta in modo dettagliato tutte le opzioni disponibili e relative configurazioni.
+
Se il SSID a cui ci si connette non utilizza l'autenticazione tramite password sarà necessario configurare la rete come aperta, sostituendo il comando {{ic|set_network 0 psk "passphrase"}} con {{ic|set_network 0 key_mgmt NONE}}.
  
Il contenuto minimo richiesto dal file di configurazione è un network block; ad esempio:
+
{{Nota|
 +
* Ogni rete viene identificata da un numero crescente: la prima avrà pertanto indice 0.
 +
* La [[wikipedia:Pre-shared_key|PSK]] viene ottenuta dalla stringa "passphrase" immessa sopra e compresa tra doppi apici, come mostrato dal comando [[#Connessione tramite wpa_passphrase|wpa_passphrase]]. In ogni caso è possibile immettere la PSK direttamente passandola al comando {{ic|psk}} ''senza'' raccoglierla tra doppi apici.}}
  
{{hc|/etc/wpa_supplicant/foobar.conf|<nowiki>
+
Si salvi infine la rete nel file di configurazione:
network={
+
    ssid="..."
+
  }
+
</nowiki>}}
+
  
Quanto sopra può essere facilmente generato utilizzando il tool {{ic|wpa_passphrase}}:
+
>save_config
 +
OK
 +
 
 +
Una volta che l'assiociazione è stata effettuata, non resta che ottenere un indirizzo IP, come indicato nella sezione [[#Panoramica]]; ad esempio:
 +
 
 +
# dhcpcd ''interfaccia''
 +
 
 +
==Connessione tramite wpa_passphrase==
 +
 
 +
Questo metodo consente di collegarsi rapidamente ad una rete di cui si conosce già il SSID tramite ''wpa_passphrase'', un tool a riga di comando che genera un file di configurazione minimale per ''wpa_supplicant''.
 +
 
 +
Ad esempio:
  
{{hc|$ wpa_passphrase ''essid'' ''passphrase''|2=
+
{{hc|$ wpa_passphrase MIOSSID passphrase|2=
 
network={
 
network={
  ssid=''essid''
+
    ssid="MIOSSID"
  #psk=''passphrase''
+
    #psk="passphrase"
  psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
+
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
 
}
 
}
 
}}
 
}}
È ora possibile combinare l'utilizzo di {{ic|wpa_supplicant}} e {{ic|wpa_passphrase}} per collegarsi a praticamente tutte le reti WPA2 personali:
 
  
# wpa_supplicant -B -i ''interfaccia'' -c <(wpa_passphrase ''essid'' ''passphrase'')
+
È quindi possibile associarsi alla rete tramite ''wpa_passphrase'' e ''wpa_supplicant'' in questo modo:
# dhcpcd -A ''interfaccia''
+
  
===Gestire una configurazione personalizzata===
+
# wpa_supplicant -B -i ''interfaccia'' -c <(wpa_passphrase SSID passphrase)
  
{{Nota|Per identificare il nome dell'interfaccia di rete in uso, utilizzare il comando {{ic|ip link}}.}}
+
{{Nota|A causa della sostituzione di processo, '''non è possibile''' eseguire il comando di cui sopra tramite [[Sudo (Italiano)|sudo]], bensì è necessario usare una shell di root. Si veda anche [[Help:Reading#Regular user or root]].}}
  
Come si è visto sopra, è possibile utilizzare {{ic|wpa_passphrase}} per generare una configurazione di base a cui aggiungere poi reti aggiuntive ed opzioni di propria scelta, che potrebbero essere necessarie in caso di configurazioni di rete avanzate che utilizzano [[Wikipedia:Extensible_Authentication_Protocol|EAP]] in modo estensivo.
+
{{Suggerimento|
 +
* Utilizzare i doppi apici se l'input contiene spazi. Ad esempio: {{ic|"secret passphrase"}}.
 +
* Per scoprire il nome della propria interfaccia di rete wireless, si esegua il comando {{ic|ip link}}.
 +
* Alcune passphrase particolarmente complesse potrebbero dover venire immesse scrivendole prima in un file: {{ic|wpa_passphrase MIOSSID < passphrase.txt}}, o passando la stringa: {{ic|wpa_passphrase MIOSSID <<< "passphrase"}}. }}
  
Innanzitutto, si generi un file di configurazione minimale con {{ic|wpa_passphrase}}:
+
Infine, non resta che ottenere un indirizzo IP, come indicato nella sezione [[#Panoramica]]; ad esempio:
  
  # wpa_passphrase ''essid'' ''passphrase'' > /etc/wpa_supplicant/foobar.conf
+
  # dhcpcd ''interfaccia''
  
{{Suggerimento|Alcune passphrase particolarmente complesse potrebbero dover essere immesse in un file prima dell'utilizzo: {{ic|# wpa_passphrase foobarssid < passphrase.txt > /etc/wpa_supplicant/foobar.conf}}. }}
+
==Utilizzo avanzato==
  
Si aggiunga quindi l'opzione {{ic|ctrl_interface}}, in modo da poter controllare il demone {{ic|wpa_supplicant}}. È possibile autorizzare {{ic|wpa_cli}} ad effettuare modifiche al file con l'opzione {{ic|1=update_config=1}}.  
+
Per reti di varia complessità, che utilizzino [[wikipedia:Extensible_Authentication_Protocol|EAP]] o altro, è consigliabile utilizzare un file di configurazione personalizzato.
 +
Per una panoramica del file di configurazione completa di esempi, si veda [http://linux.die.net/man/5/wpa_supplicant.conf wpa_supplicant.conf(5)]; per dettagli su tutte le opzioni di configurazione supportate si veda il file di configurazione d'esempio {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}.
  
{{hc|/etc/wpa_supplicant/foobar.conf|<nowiki>
+
===Configurazione===
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel # consente ai membri del gruppo 'wheel' di controllare il demone
+
  update_config=1
+
  ap_scan=1
+
  
  network={
+
Come già evidenziato nel paragrafo [[#Connessione tramite wpa_passphrase]], è possibile generare un file di configurazione di base con:
    ssid="foobarssid"
+
    psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3
+
  }
+
</nowiki>}}
+
  
È possibile aggiungere network blocks multipli al file di configurazione di cui sopra.
+
# wpa_passphrase MIOSSID passphrase > /etc/wpa_supplicant/esempio.conf
  
Per connettersi alla rete prescelta si eseguano i seguenti comandi:
+
Quanto sopra creerà un solo blocco {{ic|network}}. Un file di configurazione con le opzioni più comuni potrebbe essere simile a questo:
  
# ip link set ''interfaccia'' up
+
{{hc|/etc/wpa_supplicant/esempio.conf|2=<nowiki>
# wpa_supplicant -B -D nl80211 -i ''interfaccia'' -c /etc/wpa_supplicant/foobar.conf
+
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
# dhcpcd -A ''interfaccia''
+
update_config=1
 +
fast_reauth=1
 +
ap_scan=1
 +
network={
 +
    ssid="MIOSSID"
 +
    #psk="passphrase"
 +
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
 +
}</nowiki>
 +
}}
  
{{Nota|È preferibile utilizzare {{ic|nl80211}} rispetto al driver {{ic|wext}}, da considerarsi deprecato. Per ottenere un elenco dei driver supportati, si esegua {{ic|wpa_supplicant -h}}.}}
+
È possibile aggiungere ulteriori blocchi {{ic|network}} manualmente o utilizzando ''wpa_cli'', come mostrato al paragrafo [[#Connessione tramite wpa_cli]]. Per utilizzare quest'ultimo, sarà necessario impostare una interfaccia di controllo tramite l'opzione {{ic|ctrl_interface}}. Specificare {{ic|1=GROUP=wheel}} consente a tutti gli utenti membri di quel gruppo di utilizzare ''wpa_cli''. Si aggiunga inoltre {{ic|1=update_config=1}}, per consentire al programma di salvare eventuali modifiche in {{ic|esempio.conf}}.
 +
Le opzioni {{ic|1=fast_reauth=1}} e {{ic|1=ap_scan=1}} vengono attivate globalmente: se servano o meno dipende dal tipo di rete alla quale ci si connette.
 +
Se invece si ha la necessità di specificare ulteriori opzioni globali, copiarle semplicemente da {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}.
  
Per reti di complessità crescente si studino gli esempi forniti nel file di configurazione di default sito in {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}}.
+
È anche possibile utilizzare {{ic|wpa_cli set}} per visualizzare il contenuto delle opzioni o modificarlo. Possono essere inseriti più blocchi {{ic|network}} nel file di configurazione: il supplicant gestirà autonomamente l'associazione e il roaming tra di essi, connettendosi di default al blocco con il segnale più forte, benchè sia possibile utilizzare l'opzione {{ic|1=priority=}} per influenzarne il comportamento.
  
===Avvio tramite systemd===
+
Uno dei vantaggi dell'utilizzare un file di configurazione personalizzato in {{ic|/etc/wpa_supplicant/wpa_supplicant.conf}} è che quest'ultimo viene letto di default da [[dhcpcd]]. Nel caso si scelga di utilizzarlo, è consigliabile fare un backup dell'originale ed eliminare i blocchi {{ic|network}} d'esempio presenti. In caso contrario non ci si sorprenda se la propria interfaccia wireless tenta di collegarsi ai blocchi contenuti nel file di configurazione. Si noti inoltre che eventuali modifiche al file di configurazione dovranno essere [[Pacnew and Pacsave Files (Italiano)|aggregate]].
  
Per avviare la connessione wireless automaticamente al boot, si abiliti il servizio {{ic|wpa_supplicant}} sull'interfaccia interessata. Se la propria connessione ottiene gli indirizzi tramite DHCP, abilitare anche {{ic|dhcpcd.service}}. Per gestire eventuali connessioni ethernet si installi {{Pkg|ifplugd}} e si abiliti il relativo servizio sull'interfaccia interessata.
+
{{Suggerimento|Per configurare un blocco {{ic|network}} per una rete con ''SSID'' nascosto, che quindi non verrà rilevato durante una scansione, si utilizzi l'opzione {{ic|1=scan_ssid=1}}.}}
  
I comandi da eseguire potrebbero essere simili ai seguenti:
+
===Connessione===
  
# systemctl enable wpa_supplicant@wlp3s1
+
====Manuale====
# systemctl enable dhcpcd
+
# systemctl enable ifplugd@enp5s2
+
  
{{ic|wpa_supplicant}} gestirà il roaming per tutti i SSID contenuti nel suo file di configurazione e {{ic|ifplugd}} configurerà automaticamente l'interfaccia ethernet spegnendo quella wireless all'inserimento di un cavo ethernet nella macchina, mentre {{ic|dhcpcd}} si occuperà dell'asegnazione degli indirizzi IP alle varie interfacce.
+
Si esegua il comando ''wpa_supplicant'', i cui argomenti più comuni sono elencati di seguito:
  
È necessario modificare il servizio {{ic|wpa_supplicant@.service}} per farlo puntare al file di configurazione corretto.
+
* {{ic|-B}} - Esegue in background.
Per ridefinire il valore della riga {{ic|1=ExecStart=}} si crei il seguente file:
+
* {{ic|-c nomefile}} - Percorso al file di configurazione.
 +
* {{ic|-i interfaccia}} - Interfaccia da configurare.
 +
* {{ic|-D driver}} - Opzionale, specifica il driver da utilizzare. Per un elenco di quelli supportati si veda {{ic|wpa_supplicant -h}}.
 +
** {{ic|nl80211}} è lo standard corrente, ma non è supportato da tutti i chip wireless.
 +
** {{ic|wext}} è deprecato, ma più supportato.
  
{{hc|/etc/systemd/system/wpa_supplicant@.service.d/foo.conf|<nowiki>
+
Si veda [http://linux.die.net/man/8/wpa_supplicant wpa_supplicant(8)] per un elenco completo dei parametri.
  [Service]
+
  ExecStart=
+
  ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/bar.conf -i%i
+
</nowiki>}}
+
  
La direttva {{ic|WantedBy}} del .service correntemente fornito non è corretta. Se la riga nel servizio {{ic|wpa_supplicant@.service}} non corrisponde al nome della propria interfaccia di rete (wlan0), sarà necessario copiare il servizio in {{ic|/etc/systemd/system}} ed apportare le dovute modifiche.
+
Esempio:
  
  [Install]
+
  # wpa_supplicant -B -i interface -c /etc/wpa_supplicant/example.conf
  WantedBy=multi-user.target
+
 
 +
 
 +
È ora possibile ottenere un indirizzo IP, come indicato nella sezione [[#Panoramica]]; ad esempio:
 +
 
 +
  # dhcpcd ''interfaccia''
 +
 
 +
{{Suggerimento|''dhcpcd'' dispone di un hook per il lancio automatico di ''wpa_supplicant''. Si veda a tal proposito [[dhcpcd#10-wpa_supplicant]].}}
 +
 
 +
====All'avvio (systemd)====
 +
 
 +
 
 +
''wpa_supplicant'' fornisce diversi servizi per l'avvio:
 +
 
 +
* {{ic|wpa_supplicant.service}} - utilizza [[D-Bus]], raccomandato per gli utilizzatori di [[NetworkManager (Italiano)|NetworkManager]].
 +
* {{ic|wpa_supplicant@.service}} - accetta il nome dell'interfaccia come parametro ed avvia il demone ''wpa_supplicant'' su quest'ultima. Legge il file di configurazione {{ic|/etc/wpa_supplicant/wpa_supplicant-''interfaccia''.conf}}.
 +
* {{ic|wpa_supplicant-nl80211@.service}} - anche questo servizio è specifico per interfaccia, ma forza l'utlilizzo del driver {{ic|nl80211}}. Il percorso del file di configurazione è {{ic|/etc/wpa_supplicant/wpa_supplicant-nl80211-''interfaccia''.conf}}.
 +
* {{ic|wpa_supplicant-wired@.service}} - specifico per interfaccia, utilizza il driver {{ic|wired}}. Il file di configurazione si trova in {{ic|/etc/wpa_supplicant/wpa_supplicant-wired-interface.conf}}
 +
 
 +
Per abilitare l'interfaccia wireless al boot, si abiliti uno dei servizi di cui sopra.
 +
 
 +
Ad esempio:
 +
 
 +
# systemctl enable wpa_supplicant@''interfaccia''
 +
 
 +
È ora possibile [[systemd (Italiano)#Usare le unità|abilitare]] un servizio per ottenere un indirizzo IP per una particolare ''interfaccia'', come indicato nella sezione [[#Panoramica]]. Ad esempio:
 +
 
 +
# systemctl enable dhcpcd@''interfaccia''
 +
 
 +
{{Suggerimento|''dhcpcd'' dispone di un hook per il lancio automatico di ''wpa_supplicant''. Si veda a tal proposito [[dhcpcd#10-wpa_supplicant]].}}
 +
 
 +
===Action script per wpa_cli===
 +
 
 +
È possibile lanciare ''wpa_cli'' come demone e fargli eseguire degli script basati su eventi provenienti da ''wpa_supplicant''. Sono supportate due tipologie di eventi: {{ic|CONNECTED}} e {{ic|DISCONNECTED}}. Alcune [[environment variables|variabili d'ambiente]] possono essere utilizzate negli script; si consulti [http://linux.die.net/man/8/wpa_cli wpa_cli(8)] per ulteriori informazioni.
 +
 
 +
L'esempio che segue utilizza le [[desktop notifications|notifiche del desktop]] per informare l'utente sull'attivazione degli eventi.
 +
 
 +
{{bc|
 +
#!/bin/bash
 +
 
 +
case "$2" in
 +
    CONNECTED)
 +
        notify-send "WPA supplicant: connection established";
 +
        ;;
 +
    DISCONNECTED)
 +
        notify-send "WPA supplicant: connection lost";
 +
        ;;
 +
esac
 +
</nowiki>
 +
}}
 +
 
 +
Ricordarsi di rendere eseguibile lo script, quindi utilizzare lo switch {{ic|-a}} per passare lo script a ''wpa_cli''.
 +
 
 +
$ wpa_cli -a ''percorso allo script''
 +
 
 +
==Risoluzione dei problemi==
 +
 
 +
===Driver nl80211 non supportato su alcuni modelli===
 +
 
 +
Alcune schede particolarmente vecchie potrebbero non funzionare con il driver {{ic|nl80211}} e ''wpa_supplicant'' potrebbe mostare il seguente messaggio:
 +
 
 +
Successfully initialized wpa_supplicant
 +
nl80211: Driver does not support authentication/association or connect commands
 +
wlan0: Failed to initialize driver interface
 +
 
 +
che indica il mancato supporto al driver {{ic|nl80211}}. In questo caso è possibile provare ad utilizzare il driver obsoleto {{ic|wext}}:
 +
 
 +
# wpa_supplicant -B -i wlan0 '''-D wext''' -c /etc/wpa_supplicant/example.conf
 +
 
 +
Se il comando di cui sopra funziona e si desidera utilizzare [[systemd (Italiano)|systemd]] per gestire la connessione wireless, è necessario [[systemd#Editing provided units|modificare]] il servizio {{ic|wpa_supplicant@.service}} e modificare di conseguenza il parametro {{ic|ExecStart}}:
 +
 
 +
{{hc|/etc/systemd/system/wpa_supplicant@.service.d/wext.conf|2=
 +
[Service]
 +
ExecStart=
 +
ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I '''-Dwext'''
 +
}}
  
Il problema è stato risolto in [http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=commitdiff;h=893a0a558cd8fd9a7dc5827f379e0f8a273a4fe5 questo] commit.
+
==Link utili==
  
==Link correlati==
 
  
* [http://wireless.kernel.org/en/users/Documentation/wpa_supplicant documentazione di wpa_supplicant su kernel.org]
+
* [http://hostap.epitest.fi/wpa_supplicant/ Homepage di WPA Supplicant]
 +
* [https://gist.github.com/buhman/7162560 Esempi per l'utilizzo di wpa_cli]
 +
* [http://linux.die.net/man/8/wpa_supplicant wpa_supplicant(8)]
 +
* [http://linux.die.net/man/5/wpa_supplicant.conf wpa_supplicant.conf(5)]
 +
* [http://linux.die.net/man/8/wpa_cli wpa_cli(8)]
 +
* [http://wireless.kernel.org/en/users/Documentation/wpa_supplicant Documentazione di wpa_supplicant]

Latest revision as of 17:06, 6 August 2016

wpa_supplicant è un Supplicant WPA multipiattaforma con supporto a WEP, WPA e WPA2 (IEEE 802.11i / RSN (Robust Secure Network)) adatto all'uso con PC desktop, portatili e sistemi embedded. wpa_supplicant è il componente IEEE 802.1X/WPA utilizzato dai client, implementa la negoziazione della chiave con un WPA Authenticator, controlla il roaming e l'associazione / autenticazione del driver wireless.

Installazione

Si installi il pacchetto wpa_supplicant.

È inoltre possibile installare wpa_supplicant_gui che fornisce wpa_gui, un frontend grafico per wpa_supplicant.

Panoramica

Affinchè wpa_supplicant possa connettersi ad una rete wireless, dovrà prima essere autenticato da un WPA authenticator attraverso l'inserimento delle credenziali corrette.

Una volta che l'associazione con l'access point è completa è possibile collegarsi alla rete ottenendo un indirizzo IP, manualmente tramite la suite iproute2 o tramite programmi appositi, come systemd-networkd o dhcpcd, per l'assegnazione automatica di un indirizzo IP tramite DHCP. Si vedano anche gli articoli relativi ad interfacce wireless[broken link: invalid section] o via cavo.

Connessione tramite wpa_cli

Questo metodo consente di effettuare una scansione delle reti disponibili utilizzando wpa_cli, un tool a riga di comando che è in grado di configurare wpa_supplicant a runtime. Si veda wpa_cli(8) per ulteriori informazioni.

Per utilizzare wpa_cli, sarà necessario specificare un'interfaccia di controllo per wpa_supplicant e dotarla dei permessi per modificare il relativo file di configurazione.

Si crei quindi un file di configurazione minimale:

/etc/wpa_supplicant/esempio.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

Si avvii wpa_supplicant come segue:

# wpa_supplicant -B -i interface -c /etc/wpa_supplicant/esempio.conf
Suggerimento: Per scoprire il nome della propria interfaccia di rete wireless, si esegua il comando ip link.

Si esegua:

# wpa_cli

Verrà visualizzato un prompt interattivo (>) che dispone di tab completion e descrizione dei comandi completati.

Suggerimento: Il percorso predefinito del socket di controllo è /var/run/wpa_supplicant/. È possibile impostare un percorso personalizzato tramite il parametro -p, in modo che corrisponda a quanto contenuto nel file di configurazione. Si può altresì specificare l'interfaccia da configurare con l'opzione -i. Se non specificata, wpa_supplicant sceglierà la prima interfaccia disponibile.

Si utilizzino i comandi scan e scan_results per vedere le reti disponibili:

> scan
OK
<3>CTRL-EVENT-SCAN-RESULTS
> scan_results
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MIOSSID
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ALTROSSID

Per associarsi con MIOSSID si aggiunga la rete, si specifichino le credenziali e la si abiliti:

> add_network
0
> set_network 0 ssid "MIOSSID"
> set_network 0 psk "passphrase"
> enable_network 0
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]

Se il SSID a cui ci si connette non utilizza l'autenticazione tramite password sarà necessario configurare la rete come aperta, sostituendo il comando set_network 0 psk "passphrase" con set_network 0 key_mgmt NONE.

Nota:
  • Ogni rete viene identificata da un numero crescente: la prima avrà pertanto indice 0.
  • La PSK viene ottenuta dalla stringa "passphrase" immessa sopra e compresa tra doppi apici, come mostrato dal comando wpa_passphrase. In ogni caso è possibile immettere la PSK direttamente passandola al comando psk senza raccoglierla tra doppi apici.

Si salvi infine la rete nel file di configurazione:

>save_config
OK

Una volta che l'assiociazione è stata effettuata, non resta che ottenere un indirizzo IP, come indicato nella sezione #Panoramica; ad esempio:

# dhcpcd interfaccia

Connessione tramite wpa_passphrase

Questo metodo consente di collegarsi rapidamente ad una rete di cui si conosce già il SSID tramite wpa_passphrase, un tool a riga di comando che genera un file di configurazione minimale per wpa_supplicant.

Ad esempio:

$ wpa_passphrase MIOSSID passphrase
network={
    ssid="MIOSSID"
    #psk="passphrase"
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}

È quindi possibile associarsi alla rete tramite wpa_passphrase e wpa_supplicant in questo modo:

# wpa_supplicant -B -i interfaccia -c <(wpa_passphrase SSID passphrase)
Nota: A causa della sostituzione di processo, non è possibile eseguire il comando di cui sopra tramite sudo, bensì è necessario usare una shell di root. Si veda anche Help:Reading#Regular user or root.
Suggerimento:
  • Utilizzare i doppi apici se l'input contiene spazi. Ad esempio: "secret passphrase".
  • Per scoprire il nome della propria interfaccia di rete wireless, si esegua il comando ip link.
  • Alcune passphrase particolarmente complesse potrebbero dover venire immesse scrivendole prima in un file: wpa_passphrase MIOSSID < passphrase.txt, o passando la stringa: wpa_passphrase MIOSSID <<< "passphrase".

Infine, non resta che ottenere un indirizzo IP, come indicato nella sezione #Panoramica; ad esempio:

# dhcpcd interfaccia

Utilizzo avanzato

Per reti di varia complessità, che utilizzino EAP o altro, è consigliabile utilizzare un file di configurazione personalizzato. Per una panoramica del file di configurazione completa di esempi, si veda wpa_supplicant.conf(5); per dettagli su tutte le opzioni di configurazione supportate si veda il file di configurazione d'esempio /etc/wpa_supplicant/wpa_supplicant.conf.

Configurazione

Come già evidenziato nel paragrafo #Connessione tramite wpa_passphrase, è possibile generare un file di configurazione di base con:

# wpa_passphrase MIOSSID passphrase > /etc/wpa_supplicant/esempio.conf

Quanto sopra creerà un solo blocco network. Un file di configurazione con le opzioni più comuni potrebbe essere simile a questo:

/etc/wpa_supplicant/esempio.conf
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
update_config=1
fast_reauth=1
ap_scan=1
network={
    ssid="MIOSSID"
    #psk="passphrase"
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}

È possibile aggiungere ulteriori blocchi network manualmente o utilizzando wpa_cli, come mostrato al paragrafo #Connessione tramite wpa_cli. Per utilizzare quest'ultimo, sarà necessario impostare una interfaccia di controllo tramite l'opzione ctrl_interface. Specificare GROUP=wheel consente a tutti gli utenti membri di quel gruppo di utilizzare wpa_cli. Si aggiunga inoltre update_config=1, per consentire al programma di salvare eventuali modifiche in esempio.conf. Le opzioni fast_reauth=1 e ap_scan=1 vengono attivate globalmente: se servano o meno dipende dal tipo di rete alla quale ci si connette. Se invece si ha la necessità di specificare ulteriori opzioni globali, copiarle semplicemente da /etc/wpa_supplicant/wpa_supplicant.conf.

È anche possibile utilizzare wpa_cli set per visualizzare il contenuto delle opzioni o modificarlo. Possono essere inseriti più blocchi network nel file di configurazione: il supplicant gestirà autonomamente l'associazione e il roaming tra di essi, connettendosi di default al blocco con il segnale più forte, benchè sia possibile utilizzare l'opzione priority= per influenzarne il comportamento.

Uno dei vantaggi dell'utilizzare un file di configurazione personalizzato in /etc/wpa_supplicant/wpa_supplicant.conf è che quest'ultimo viene letto di default da dhcpcd. Nel caso si scelga di utilizzarlo, è consigliabile fare un backup dell'originale ed eliminare i blocchi network d'esempio presenti. In caso contrario non ci si sorprenda se la propria interfaccia wireless tenta di collegarsi ai blocchi contenuti nel file di configurazione. Si noti inoltre che eventuali modifiche al file di configurazione dovranno essere aggregate.

Suggerimento: Per configurare un blocco network per una rete con SSID nascosto, che quindi non verrà rilevato durante una scansione, si utilizzi l'opzione scan_ssid=1.

Connessione

Manuale

Si esegua il comando wpa_supplicant, i cui argomenti più comuni sono elencati di seguito:

  • -B - Esegue in background.
  • -c nomefile - Percorso al file di configurazione.
  • -i interfaccia - Interfaccia da configurare.
  • -D driver - Opzionale, specifica il driver da utilizzare. Per un elenco di quelli supportati si veda wpa_supplicant -h.
    • nl80211 è lo standard corrente, ma non è supportato da tutti i chip wireless.
    • wext è deprecato, ma più supportato.

Si veda wpa_supplicant(8) per un elenco completo dei parametri.

Esempio:

# wpa_supplicant -B -i interface -c /etc/wpa_supplicant/example.conf


È ora possibile ottenere un indirizzo IP, come indicato nella sezione #Panoramica; ad esempio:

# dhcpcd interfaccia
Suggerimento: dhcpcd dispone di un hook per il lancio automatico di wpa_supplicant. Si veda a tal proposito dhcpcd#10-wpa_supplicant.

All'avvio (systemd)

wpa_supplicant fornisce diversi servizi per l'avvio:

  • wpa_supplicant.service - utilizza D-Bus, raccomandato per gli utilizzatori di NetworkManager.
  • wpa_supplicant@.service - accetta il nome dell'interfaccia come parametro ed avvia il demone wpa_supplicant su quest'ultima. Legge il file di configurazione /etc/wpa_supplicant/wpa_supplicant-interfaccia.conf.
  • wpa_supplicant-nl80211@.service - anche questo servizio è specifico per interfaccia, ma forza l'utlilizzo del driver nl80211. Il percorso del file di configurazione è /etc/wpa_supplicant/wpa_supplicant-nl80211-interfaccia.conf.
  • wpa_supplicant-wired@.service - specifico per interfaccia, utilizza il driver wired. Il file di configurazione si trova in /etc/wpa_supplicant/wpa_supplicant-wired-interface.conf

Per abilitare l'interfaccia wireless al boot, si abiliti uno dei servizi di cui sopra.

Ad esempio:

# systemctl enable wpa_supplicant@interfaccia

È ora possibile abilitare un servizio per ottenere un indirizzo IP per una particolare interfaccia, come indicato nella sezione #Panoramica. Ad esempio:

# systemctl enable dhcpcd@interfaccia
Suggerimento: dhcpcd dispone di un hook per il lancio automatico di wpa_supplicant. Si veda a tal proposito dhcpcd#10-wpa_supplicant.

Action script per wpa_cli

È possibile lanciare wpa_cli come demone e fargli eseguire degli script basati su eventi provenienti da wpa_supplicant. Sono supportate due tipologie di eventi: CONNECTED e DISCONNECTED. Alcune variabili d'ambiente possono essere utilizzate negli script; si consulti wpa_cli(8) per ulteriori informazioni.

L'esempio che segue utilizza le notifiche del desktop per informare l'utente sull'attivazione degli eventi.

#!/bin/bash

case "$2" in
    CONNECTED)
        notify-send "WPA supplicant: connection established";
        ;;
    DISCONNECTED)
        notify-send "WPA supplicant: connection lost";
        ;;
esac
</nowiki>

Ricordarsi di rendere eseguibile lo script, quindi utilizzare lo switch -a per passare lo script a wpa_cli.

$ wpa_cli -a percorso allo script

Risoluzione dei problemi

Driver nl80211 non supportato su alcuni modelli

Alcune schede particolarmente vecchie potrebbero non funzionare con il driver nl80211 e wpa_supplicant potrebbe mostare il seguente messaggio:

Successfully initialized wpa_supplicant
nl80211: Driver does not support authentication/association or connect commands
wlan0: Failed to initialize driver interface

che indica il mancato supporto al driver nl80211. In questo caso è possibile provare ad utilizzare il driver obsoleto wext:

# wpa_supplicant -B -i wlan0 -D wext -c /etc/wpa_supplicant/example.conf

Se il comando di cui sopra funziona e si desidera utilizzare systemd per gestire la connessione wireless, è necessario modificare il servizio wpa_supplicant@.service e modificare di conseguenza il parametro ExecStart:

/etc/systemd/system/wpa_supplicant@.service.d/wext.conf
[Service]
ExecStart=
ExecStart=/usr/bin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I -Dwext

Link utili