Script Bash abilitazione scheda wireless: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
mNessun oggetto della modifica
 
(22 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
=Introduzione=
{{Versioni compatibili|Jessie|Stretch|Buster}}
__TOC__


L'esigenza di garantire che un messaggio possa arrivare inalterato e non violato esiste probabilmente da quando l'uomo ha iniziato a comunicare; la storia � piena d'episodi e racconti che hanno per argomento messaggi e codici segreti, oppure i tentativi fatti per riuscire a decodificarli. Nel passato le esigenze di segretezza riguardavano prevalentemente la sfera politica e militare, senza arrivare a interessare, se non in minima parte, i cittadini comuni; con l'espansione sempre pi� forte delle comunicazioni a distanza l'esigenza di garantire l'invio di dati sensibili (pensiamo, per esempio, ai pagamenti effettuati tramite carta di credito) e, pi� in generale, la privacy dei dati e delle comunicazioni interpersonali, ha posto in grande evidenza i temi della crittografia e della steganografia dei dati, che studiano rispettivamente come codificare un messaggio per renderlo incomprensibile e come nasconderlo per renderlo inintelligibile.
== Introduzione==
Non bisogna pensare che la necessit� di mantenere la riservatezza delle comunicazioni riguardi unicamente chi ha "qualcosa da nascondere": la scarsa sicurezza intrinseca della maggior parte dei sistemi di comunicazione a distanza non pu� garantire quel diritto alla privacy che � ormai sancito dalla legislazione di tutti i Paesi.
In questa guida un semplice script per la connessione a una rete wireless. Richiede di essere eseguito con [[privilegi di amministrazione]] e che non sia attivo alcun network manager.


È possibile configurare la rete wireless senza script modificando opportunamente il file ''/etc/network/interfaces'' (si veda [[Configurazione_di_una_connessione_wireless|qui]]). E anche creare più profili diversi tra cui scegliere di volta in volta, installando il pacchetto switchconf (si veda [http://e-zine.debianizzati.org/web-zine/numero_2/?page=60 qui]).<br/>
I comandi presentati nello script però possono essere d'aiuto anche per la configurazione da terminale.


=Le basi della crittografia=
== Creazione script ==
Creare con [[privilegi di amministrazione]] un file chiamato <code>wireless</code> nella directory <code>/usr/local/sbin</code>, con il seguente contenuto:


Il cifrario (o metodo di cifratura) pi� semplice si basa unicamente sull'algoritmo scelto: si applica al messaggio di partenza una serie di trasformazioni che lo rendono incomprensibile a chi non conosca il sistema utilizzato. Un sistema di questo tipo piuttosto diffuso � il cosiddetto ROT-13, che prevede d'invertire le prime 13 lettere dell'alfabeto con le ultime (scambiando la A con la N, la B con la O e cos� via); questo sistema viene utilizato nei messaggi pubblici (nei forum e nei gruppi di discussione), per evitare che qualcuno possa leggere informazioni che non vuole conoscere (per esempio, il finale di un film che non ha ancora visto). Si tratta di soluzioni poco sicure e facilmente violabili da un crittoanalista esperto, che basano la propria efficacia unicamente sulla segretezza dell'algoritmo di cifratura. Un notevole passo avanti � costituito dai cosiddetti sistemi a chiave simmetrica, che affiancano a un algoritmo di cifratura un secondo elemento: la chiave. In questo caso, l'algoritmo non dev'essere necessariamente segreto, ma � anzi opportuno che sia il pi� possibile diffuso e conosciuto: un sistema ampiamente testato e conosciuto fin nel pi� piccolo dettaglio sar� pi� stabile e fornir� maggiori garanzie riguardo all'assenza di bug. In questo caso la sicurezza � dunque affidata alla chiave, che dev'essere fornita all'algoritmo insieme al messaggio per cifrarne o decifrarne il contenuto: naturalmente l'algoritmo � costruito in maniera tale da garantire che a ciascuna coppia chiave-messaggio corrisponda sempre lo stesso risultato e che, d'altro canto, da chiavi diverse s'ottenga sempre un risultato diverso in maniera tale che non esistano due chiavi capaci di "aprire" uno stesso messaggio cifrato.
<pre>
Soluzioni di questo genere sono note fin dall'antichit�, come i famosi cifrari utilizzati da Giulio Cesare durante la campagna in Gallia, quello di Vigenere, oppure la famosa macchina Enigma, utilizzata dai tedeschi durante la Seconda Guerra Mondiale, anche se solo con il progresso della teoria dei numeri, della logica e dell'informatica si � arrivati a costruire cifrari la cui solidit� � dimostrabile.
#! /bin/sh -e




=La Crittografia e l'Informatica=
### PARTE DA MODIFICARE con i propri parametri


Il principale limite dei sistemi a chiave simmetrica, indipendentemente dalla bont� del cifrario, � rappresentato dalla chiave, che dev'essere trasmessa attraverso un canale sicuro, per poter garantire la solidit� della cifratura: se questo requisito poteva essere accettabile per le comunicazioni militari, chi vuole effettuare un acquisto via Internet non pu� essere costretto a incontrare personalmente il venditore per scambiare la chiave.
# specificare il nome della propria scheda di rete (eth0, eth1, wlan0, ecc... )
Dagli anni '70 l'informatica e la crittografia sono legate da un intreccio inscindibile, grazie alla teorizzazione e alla realizzazione di cifrari a chiave asimmetrica; sfruttando il fatto che alcuni calcoli matematici, per quanto teoricamente risolvibili, necessitino in realt� di un'enorme quantit� di tempo per essere compiuti (addirittura milioni o miliardi di anni), � possibile costruire cifrari che utilizzino una coppia di chiavi, una pubblica destinata alla cifratura e una privata (da mantenere segreta) per la decifratura.
# (utilizzare il comando "/sbin/iwconfig 2> /dev/null", senza virgolette, mentre attiva)
Ecco l'esempio classico che chiarisce il funzionamento di questo sistema: Alice e Bob vogliono comunicare tra loro privatamente; entrambi generano una propria coppia di chiavi, una pubblica ed una privata. Si scambiano le rispettive chiavi pubbliche, senza necessit� di alcun genere di sicurezza (esistono su Internet numerosi elenchi di chiavi pubbliche, liberamente consultabili). In seguito, Alice utilizzer� la chiave pubblica di Bob per cifrare il messaggio che intende inviargli. Bob, ricevuto il messaggio, lo decifrer� utilizzando la propria chiave privata, avendo la certezza che nessuno, a parte Alice, abbia potuto leggerne il contenuto.
IFACE="eth0"


# specificare l'essid della rete a cui si intende connettersi
ESSID="vostro essid di rete"


=I tre requisiti necessari=
# È SCONSIGLIATO usare una variabile se si utilizza WPA, meglio lasciarla commentata e optare per:
# 1- una richiesta interattiva (effettuata solo la prima volta che si avvia lo script)
# 2- creare con wpa_passphrase il file /root/.wpaconfig (basta avviare questo script la prima volta)
# È necessaria in caso si utilizzi come protezione WEP (obsoleto!)
#PASSWORD="vostra password"


Per essere completamente funzionante, un sistema crittografico deve garantire il soddisfacimento di tre requisiti: riservatezza, integrit� e non ripudiabilit�.
# indirizzo (se non si utilizza DHCP, altrimenti commentare)
Del primo argomento abbiamo gi� parlato, mentre gli altri due fattori intervengono nell'esempio descritto poco pi� sopra: prima di cifrare il messaggio, Alice potr� utilizzare la propria chiave privata per firmarlo in maniera tale che Bob, una volta ricevuto e decifrato il messaggio, potr� verificare il mittente e l'integrit� del contenuto.
ADDRESS="192.168.0.2"
Non � invece possibile garantire che ciascuno degli attori di questo esempio sia chi dice di essere: se qualcuno, per esempio, decidesse di impersonare Alice, creando una nuova coppia di chiavi e iniziando la comunicazione con Bob, quest'ultimo non avrebbe la certezza che il suo interlocutore sia realmente chi dice di essere. Da un altro punto di vista, Alice potrebbe disconoscere, o ripudiare, in qualsiasi momento la conversazione, sostenendo di non esserne l'autrice, senza che Bob abbia alcuno strumento per provare il contrario. Per garantire la non ripudiabilit� � necessario introdurre un terzo attore, un'autorit� di certificazione (anche CA, Certification Authority), che sia affidabile, e che possa dunque garantire l'associazione tra una chiave pubblica e l'effettivo proprietario, con tutti i problemi del caso.


# gateway (se non si utilizza DHCP e si vuole un gateway, altrimenti commentare)
GATEWAY="192.168.0.1"


=La steganografia=
# netmask
NETMASK="255.255.255.0"


Per fare in modo che un messaggio non cada in mani sbagliate è possibile utilizzare anche soluzioni diverse rispetto alla cifratura: la steganografia, per esempio.
La steganografia consente di nascondere un messaggio all'interno di un vettore che possa consentirne il trasporto senza destare sospetti: esempi in letteratura sono gli inchiostri "simpatici", che si rivelano soltanto in determinate circostanze, mentre rimanendo in ambito informatico esistono soluzioni diverse.
Se per alcuni tipi di file le informazioni contenute non possono essere modificati in alcun modo, esistono altri formati in cui un lieve cambiamento passa del tutto inosservato: esempi tipici sono immagini e file audio, in cui una leggera differenza nella forma dell'onda sonora, oppure del colore in alcuni punti, non viene percepita dall'orecchio o dall'occhio umano. Sfruttando questo principio è dunque possibile modificare i file, inserendo informazioni nascoste all'interno di vettori assolutamente insospettabili; crittografando poi i dati si riesce ad ottenere un livello di confidenzialità accettabile. Anche questo sistema ha però qualche limite: la quantità di informazioni inseribili è piuttosto piccola e basta anche una minima modifica al file contenitore, effettuata magari inconsapevolmente, per compromettere l'integrità del messaggio.


### MAIN


=Link utili=
echo Abilitazione Scheda Wireless in corso...
[http://www.gnupg.com GnuPG]


[http://www.nsa.gov National Security Agency (NSA)]
# attiva la scheda
ifconfig "$IFACE" up


[http://www.verisign.com Verisign]
# assegna essid
[[Categoria:Sicurezza]]
iwconfig "$IFACE" essid "$ESSID"
 
# si possono scegliere altre modalità, tra cui ad-hoc
# (supporta solo connessioni non criptate o criptate con WEP, e avviene senza access point)
# managed è la default e serve per connettersi a un access point
iwconfig "$IFACE" mode managed
 
# decommentare la riga successiva (togliendo #) per connessioni non criptate
# iwconfig "$IFACE" key open
 
# decommentare la riga successiva (togliendo #) per connessioni criptate con WEP
# iwconfig "$IFACE" key restricted "$PASSWORD"
 
# commentare le righe successive se la rete non utilizza crittografia WPA2
# (WPA2 è l'impostazione consigliata per reti domestiche, dato che WEP è obsoleta e insicura)
if ! [ -e /root/.wpaconfig ]; then
  # creo il file se non esiste
  umask 0077 &&
  if [ -z "${PASSWORD:-}" ]; then
      # richiesta interattiva della password
      printf %s "Password: "
      stty -echo # non stampare a schermo la password
      wpa_passphrase "$ESSID" > /root/.wpaconfig
      stty echo  # riprendi a stampare a schermo
      echo Ok
  else
      # uso la variabile (sconsigliato e *visibile* in chiaro nei processi!)
      wpa_passphrase "$ESSID" "$PASSWORD" > /root/.wpaconfig
  fi
fi
# leggo il file con ESSID e PASSWORD
wpa_supplicant -i "$IFACE" -c /root/.wpaconfig -B
 
# accende la scheda di rete e rendi effettive le modifiche
# (non supportate da tutte le schede, per cui avviene già in automatico)
iwconfig "$IFACE" power on || true
iwconfig "$IFACE" commit || true
 
if [ -n "${ADDRESS:-}" ]; then
  # assegnazione statica IP alla scheda
  ifconfig "$IFACE" "$ADDRESS" netmask "$NETMASK"
else
  # assegnazione dinamica con DHCP
  dhclient "$IFACE"
fi
 
if [ -n "${ADDRESS:-}" ] && [ -n "${GATEWAY:-}" ]; then
  # aggiungi nuovo percorso alla tabella di routing
  route add default gw "$GATEWAY"
fi
 
# messaggio
echo Scheda Wireless abilitata correttamente.
 
# esci
exit 0
</pre>
 
E assegnargli i giusti permessi, utente e gruppo, per impedire modifiche da parte dell'utente senza privilegi (e una potenziale vulnerablità nel sistema):
<pre># chmod 740 /usr/local/sbin/wireless
# chown root:root /usr/local/sbin/wireless</pre>
 
Ora sarà sempre possibile richiamare la configurazione con il comando:
<pre># wireless</pre>
 
== Approfondimento ==
Le variabili <code>IFACE</code>, <code>ESSID</code>, <code>ADDRESS</code> e <code>GATEWAY</code> vanno inizializzate con i vostri parametri. Si deve inoltre scegliere uno dei tre metodi per la crittografia, commentando gli altri (al momento lo script utilizza WPA2). La variabile <code>GATEWAY</code> può essere commentata se non ce n'è bisogno (il proprio PC si collega direttamente a Internet, per esempio, senza passare per un router/gateway), e se la variabile <code>ADDRESS</code> è commentata allora sarà usata un'assegnazione dinamica (con DHCP) anziché statica dell'indirizzo IP.
 
La variabile <code>PASSWORD</code> serve a fornire la password in assenza di <code>/root/.wpaconfig</code>, ma l'uso è fortemente sconsigliato.
 
Si noti che in caso di [http://it.wikipedia.org/wiki/Captive_portal captive portal], dove l'autenticazione tipicamente avviene in un secondo momento dal proprio browser, la rete può essere aperta e senza crittografia.
 
Al file di configurazione <code>/root/.wpaconfig</code> creato (tra "network={" e "}") si può aggiungere anche la riga <code>scan_ssid=1</code> per permettere la connessione a reti protette da WPA2 con essid "nascosto".
 
{{Autori
|Autore=[[Utente:Noise|Noise]]
|Verificata_da=
: [[Utente:Grayhawk|Grayhawk]]
: [[Utente:HAL 9000|HAL 9000]]
|Estesa_da=
: [[Utente:Grayhawk|Grayhawk]] (Aggiunto uso DHCP)
: [[Utente:HAL 9000|HAL 9000]] (Aggiunta connessione a rete con WPA2)
|Numero_revisori=2
}}
 
[[Categoria: Schede Wireless]][[Categoria: Bash Scripting]]

Versione attuale delle 08:42, 28 lug 2019

Debian-swirl.png Versioni Compatibili

Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"

Introduzione

In questa guida un semplice script per la connessione a una rete wireless. Richiede di essere eseguito con privilegi di amministrazione e che non sia attivo alcun network manager.

È possibile configurare la rete wireless senza script modificando opportunamente il file /etc/network/interfaces (si veda qui). E anche creare più profili diversi tra cui scegliere di volta in volta, installando il pacchetto switchconf (si veda qui).
I comandi presentati nello script però possono essere d'aiuto anche per la configurazione da terminale.

Creazione script

Creare con privilegi di amministrazione un file chiamato wireless nella directory /usr/local/sbin, con il seguente contenuto:

#! /bin/sh -e


### PARTE DA MODIFICARE con i propri parametri

# specificare il nome della propria scheda di rete (eth0, eth1, wlan0, ecc... )
# (utilizzare il comando "/sbin/iwconfig 2> /dev/null", senza virgolette, mentre attiva)
IFACE="eth0"

# specificare l'essid della rete a cui si intende connettersi
ESSID="vostro essid di rete"

# È SCONSIGLIATO usare una variabile se si utilizza WPA, meglio lasciarla commentata e optare per:
# 1- una richiesta interattiva (effettuata solo la prima volta che si avvia lo script)
# 2- creare con wpa_passphrase il file /root/.wpaconfig (basta avviare questo script la prima volta)
# È necessaria in caso si utilizzi come protezione WEP (obsoleto!)
#PASSWORD="vostra password"

# indirizzo (se non si utilizza DHCP, altrimenti commentare)
ADDRESS="192.168.0.2"

# gateway (se non si utilizza DHCP e si vuole un gateway, altrimenti commentare)
GATEWAY="192.168.0.1"

# netmask
NETMASK="255.255.255.0"


### MAIN

echo Abilitazione Scheda Wireless in corso...

# attiva la scheda
ifconfig "$IFACE" up

# assegna essid
iwconfig "$IFACE" essid "$ESSID"

# si possono scegliere altre modalità, tra cui ad-hoc
# (supporta solo connessioni non criptate o criptate con WEP, e avviene senza access point)
# managed è la default e serve per connettersi a un access point
iwconfig "$IFACE" mode managed

# decommentare la riga successiva (togliendo #) per connessioni non criptate
# iwconfig "$IFACE" key open

# decommentare la riga successiva (togliendo #) per connessioni criptate con WEP
# iwconfig "$IFACE" key restricted "$PASSWORD"

# commentare le righe successive se la rete non utilizza crittografia WPA2
# (WPA2 è l'impostazione consigliata per reti domestiche, dato che WEP è obsoleta e insicura)
if ! [ -e /root/.wpaconfig ]; then
   # creo il file se non esiste
   umask 0077 &&
   if [ -z "${PASSWORD:-}" ]; then
      # richiesta interattiva della password
      printf %s "Password: "
      stty -echo # non stampare a schermo la password
      wpa_passphrase "$ESSID" > /root/.wpaconfig
      stty echo  # riprendi a stampare a schermo
      echo Ok
   else
      # uso la variabile (sconsigliato e *visibile* in chiaro nei processi!)
      wpa_passphrase "$ESSID" "$PASSWORD" > /root/.wpaconfig
   fi
fi
# leggo il file con ESSID e PASSWORD
wpa_supplicant -i "$IFACE" -c /root/.wpaconfig -B

# accende la scheda di rete e rendi effettive le modifiche
# (non supportate da tutte le schede, per cui avviene già in automatico)
iwconfig "$IFACE" power on || true
iwconfig "$IFACE" commit || true

if [ -n "${ADDRESS:-}" ]; then
   # assegnazione statica IP alla scheda
   ifconfig "$IFACE" "$ADDRESS" netmask "$NETMASK"
else
   # assegnazione dinamica con DHCP
   dhclient "$IFACE"
fi

if [ -n "${ADDRESS:-}" ] && [ -n "${GATEWAY:-}" ]; then
   # aggiungi nuovo percorso alla tabella di routing
   route add default gw "$GATEWAY"
fi

# messaggio
echo Scheda Wireless abilitata correttamente.

# esci
exit 0

E assegnargli i giusti permessi, utente e gruppo, per impedire modifiche da parte dell'utente senza privilegi (e una potenziale vulnerablità nel sistema):

# chmod 740 /usr/local/sbin/wireless
# chown root:root /usr/local/sbin/wireless

Ora sarà sempre possibile richiamare la configurazione con il comando:

# wireless

Approfondimento

Le variabili IFACE, ESSID, ADDRESS e GATEWAY vanno inizializzate con i vostri parametri. Si deve inoltre scegliere uno dei tre metodi per la crittografia, commentando gli altri (al momento lo script utilizza WPA2). La variabile GATEWAY può essere commentata se non ce n'è bisogno (il proprio PC si collega direttamente a Internet, per esempio, senza passare per un router/gateway), e se la variabile ADDRESS è commentata allora sarà usata un'assegnazione dinamica (con DHCP) anziché statica dell'indirizzo IP.

La variabile PASSWORD serve a fornire la password in assenza di /root/.wpaconfig, ma l'uso è fortemente sconsigliato.

Si noti che in caso di captive portal, dove l'autenticazione tipicamente avviene in un secondo momento dal proprio browser, la rete può essere aperta e senza crittografia.

Al file di configurazione /root/.wpaconfig creato (tra "network={" e "}") si può aggiungere anche la riga scan_ssid=1 per permettere la connessione a reti protette da WPA2 con essid "nascosto".




Guida scritta da: Noise Swirl-auth60.png Debianized 60%
Estesa da:
Grayhawk (Aggiunto uso DHCP)
HAL 9000 (Aggiunta connessione a rete con WPA2)
Verificata da:
Grayhawk
HAL 9000

Verificare ed estendere la guida | Cos'è una guida Debianized