Falha ao abrir o arquivo de configuração '/ dev / fd / 63', erro: Nenhum arquivo ou diretório para wpa_supplicant

10

Quando faço isso:

sudo wpa_supplicant -D nl80211,wext -i wlp4s0 -c <(wpa_passphrase "some ssid" "password")

Eu obtenho

Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'

Alguma idéia?

    
por Oskar K. 27.04.2016 / 19:04

3 respostas

13

Citando o Wiki do ArchLinux :

Note: Because of the process substitution, you cannot run this command with sudo - you will need a root shell.

Você deve poder usar su -c em sudo da seguinte forma:

$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
    <(wpa_passphrase "some ssid" "password")'
    
por 27.04.2016 / 19:23
10

Processo de substituição <(…) cria um canal, usa /dev/fd para dar um caminho que é equivalente ao descritor de arquivo onde o pipe é e passa o nome do arquivo como um argumento para o programa. Aqui o programa é sudo , e ele passa esse argumento (que é apenas uma string, no que diz respeito a ele) para wpa_supplicant , que o trata como um nome de arquivo.

O problema é que o sudo fecha todos os descritores de arquivos, exceto os padrões (stdin = 0, stdout = 1 e stderr = 2). O pipe da substituição do processo está em outro descritor, que é fechado, então quando wpa_supplicant tenta abri-lo, ele encontra um arquivo que não existe.

Se sua política sudo permitir (a opção closefrom_override está habilitada), você pode dizer para não fechar os descritores de arquivos. Mas isso geralmente não é o caso.

sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)

Como alternativa, como você não está usando a entrada padrão, passe os dados para lá.

wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin

Como alternativa, execute um shell do sudo e coloque a substituição do processo lá. Tome cuidado com as citações se o comando contiver caracteres especiais.

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
    
por 29.04.2016 / 02:00
0

Para quem vem de um mecanismo de pesquisa da Web: verifique se /dev está montado. Um erro fácil de fazer quando chrooting, o que pode resultar em erros como este.

    
por 01.12.2017 / 04:17