Fehler beim Öffnen der Konfigurationsdatei '/ dev / fd / 63', Fehler: Keine solche Datei oder kein solches Verzeichnis für wpa_supplicant

12

Wenn ich das mache:

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

Ich bekomme

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'

Irgendwelche Ideen?

Oskar K.
quelle

Antworten:

14

Zitieren des ArchLinux-Wikis :

Hinweis: Aufgrund der Prozessersetzung können Sie diesen Befehl nicht mit sudo ausführen. Sie benötigen eine Root-Shell.

Sie sollten in der Lage sein, su -cunter sudowie folgt zu verwenden:

$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
    <(wpa_passphrase "some ssid" "password")'
Alexander Batischev
quelle
11

Durch die Prozessersetzung <(…) wird eine Pipe erstellt, /dev/fdein Pfad angegeben, der dem Dateideskriptor entspricht, in dem sich die Pipe befindet, und der Dateiname als Argument an das Programm übergeben. Hier ist das Programm sudo, und es übergibt dieses Argument (das für ihn nur eine Zeichenfolge ist) an wpa_supplicant, das es als Dateinamen behandelt.

Das Problem ist, dass sudo alle Dateideskriptoren außer den Standarddeskriptoren schließt (stdin = 0, stdout = 1 und stderr = 2). Die Pipe der Prozessersetzung befindet sich in einem anderen Deskriptor, der geschlossen wird. Wenn Sie also wpa_supplicantversuchen, ihn zu öffnen, wird eine Datei gefunden, die nicht vorhanden ist.

Wenn Ihre Sudo-Richtlinie dies zulässt ( closefrom_overrideOption aktiviert), können Sie festlegen, dass Dateideskriptoren nicht geschlossen werden sollen. Dies ist jedoch normalerweise nicht der Fall.

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

Alternativ können Sie die Daten dort übergeben, da Sie keine Standardeingabe verwenden.

wpa_passphrase  | sudo wpa_supplicant  -c /dev/stdin

Alternativ können Sie eine Shell von sudo ausführen und die Prozessersetzung dort ablegen. Achten Sie beim Zitieren darauf, ob der Befehl Sonderzeichen enthält.

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
Gilles 'SO - hör auf böse zu sein'
quelle
1

Für diejenigen, die von einer Websuchmaschine kommen: Stellen Sie sicher, dass Ihre /devgemountet ist. Ein leichter Fehler beim Chrooten, der dann zu Fehlern wie diesem führen kann.

Vladimir Panteleev
quelle