Nie można otworzyć pliku konfiguracyjnego „/ dev / fd / 63”, błąd: Brak takiego pliku lub katalogu dla wpa_supplicant

12

Kiedy to zrobię:

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

dostaję

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'

Jakieś pomysły?

Oskar K.
źródło

Odpowiedzi:

14

Cytując wiki ArchLinux :

Uwaga: Z powodu podstawienia procesu nie można uruchomić tego polecenia z sudo - potrzebujesz powłoki root.

Powinieneś być w stanie używać su -cw sudotaki sposób:

$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
    <(wpa_passphrase "some ssid" "password")'
Alexander Batischev
źródło
11

Podstawienie procesu <(…) tworzy potok, używa /dev/fddo podania ścieżki równoważnej deskryptorowi pliku, w którym potok się znajduje, i przekazuje nazwę pliku jako argument do programu. Tutaj program jest sudoi przekazuje ten argument (który jest tylko ciągiem, jeśli chodzi o to) wpa_supplicant, który traktuje go jako nazwę pliku.

Problem polega na tym, że sudo zamyka wszystkie deskryptory plików oprócz standardowych (stdin = 0, stdout = 1 i stderr = 2). Potok zastępowania procesu znajduje się na innym deskryptorze, który zostaje zamknięty, więc gdy wpa_supplicantpróbuje go otworzyć, znajduje plik, który nie istnieje.

Jeśli twoje zasady sudo na to pozwalają ( closefrom_overrideopcja włączona), możesz powiedzieć, aby nie zamykać deskryptorów plików. Ale zwykle tak nie jest.

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

Alternatywnie, ponieważ nie używasz standardowego wejścia, przekaż tam dane.

wpa_passphrase  | sudo wpa_supplicant  -c /dev/stdin

Alternatywnie, uruchom powłokę z sudo i umieść tam podstawienie procesu. Ostrożnie z cytowaniem, jeśli polecenie zawiera znaki specjalne.

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
Gilles „SO- przestań być zły”
źródło
1

Dla tych, którzy pochodzą z wyszukiwarki internetowej: upewnij się, że /devjest zamontowany. Łatwy błąd do popełnienia podczas chrootowania, który może następnie spowodować błędy takie jak ten.

Vladimir Panteleev
źródło