Conectando-se ao WPA2 pela linha de comando, sem editar um arquivo de configuração

5

Estou tentando se conectar a uma rede WPA2 com um script bash. A abordagem usual é algo ao longo destas linhas:

wpa_passphrase SSID PASSWORD > CONFIG_FILE
wpa_supplicant -B -iwlan0 -cCONFIG_FILE -Dwext

No entanto, não quero que a senha persista em um arquivo. Existe uma abordagem semelhante para configurar uma rede WPA2 sem usar um arquivo de configuração (mesmo que seja apenas temporário), semelhante a como as redes abertas e WEP podem ser configuradas com um único comando, iwconfig wlan0 essid SSID key s:PASSWORD ?

    
por Exudes 23.08.2018 / 19:21

1 resposta

3

Começando com as ideias já sugeridas no meu comentário, gostaria de oferecer uma resposta. A resposta é testada para funcionar no caso específico de usar uma combinação de wpa_supplicant (versão v2.6), wpa_passphrase , GNU bash (versão 4.4.23) e linux 4.18.

Espero que a solução oferecida aqui, com o objetivo de evitar que algum arquivo de frase secreta remanescente seja adotável de uma maneira mais geral posix, entretanto eu testei apenas a configuração do arch linux disponível para experimentação.

Eu corri

strace wpa_supplicant -i <WIFIINTERFACE> -c <(wpa_passphrase <SSID> <PASSPHRASE>) 2>&1 | less

com os parâmetros reais da minha rede wifi. E a conexão foi estabelecida. Também navegando pelo stace eu acho isso:

execve("/usr/bin/wpa_supplicant", ["wpa_supplicant", "-i", "wlp0s29u1u2", "-c", "/dev/fd/63"], 0x7fffc7b0ad10 /* 39 vars */) = 0
[....]
openat(AT_FDCWD, "/dev/fd/63", O_RDONLY) = 3
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(3, "network={\n\tssid=\"Oscarone\"\n\t#psk"..., 4096) = 116
read(3, "", 4096)                       = 0
close(3)                                = 0
socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE) = 3
bind(3, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=0x000001}, 12) = 0
[....]

qual deve ser a maneira como o processo de substituição do processo (o command <(other command) ) funcionou. Pode ser visto que o wpa_supplicant acessou o pipe em /dev/fd/63 e leu a configuração, e depois a fechou mais, depois de fechar o fd 3 , o descritor de arquivo está sendo reutilizado diretamente para abrir um socket .

Douple verificado através de ls -ialh /proc/<pid of wpa_supplicant>/3 e ele informa: %código% significa que a única acessibilidade temporária da senha (através do fifo em 571637 lrwx------ 1 root root 64 Aug 23 20:49 3 -> 'socket:[571092]' aberto como fd /dev/fd/53 foi de fato fechada e agora ainda é o 3 como socket informado corretamente.

Parece também que as informações sobre esta maneira de criar uma linha de comandos "sem-arquivo" "sem arquivo" para strace são discutidas no wiki do linux do arco ( link )

Eu também quero salientar o óbvio. Desde que você introduza a senha no shell, certifique-se de que ela não será gravada no histórico do shell, portanto faça algo parecido com:

set +o history
wpa_supplicant -i INTERFACE -c <(wpa_passphrase SSID PASSPHRASE) &
set -o history

(como mostrado aqui link )

    
por 23.08.2018 / 21:10