Impossible d'ouvrir le fichier de configuration '/ dev / fd / 63', erreur: aucun fichier ou répertoire de ce type pour wpa_supplicant

12

Quand je fais ça:

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

Je reçois

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'

Des idées?

Oskar K.
la source

Réponses:

14

Citant le wiki ArchLinux :

Remarque: En raison de la substitution de processus, vous ne pouvez pas exécuter cette commande avec sudo - vous aurez besoin d'un shell racine.

Vous devriez pouvoir utiliser su -csous sudocomme ceci:

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

La substitution de processus <(…) crée un canal, utilise /dev/fdpour donner un chemin équivalent au descripteur de fichier où se trouve le canal et transmet le nom du fichier comme argument au programme. Ici, le programme est sudo, et il passe cet argument (qui n'est qu'une chaîne, en ce qui le concerne) à wpa_supplicant, qui le traite comme un nom de fichier.

Le problème est que sudo ferme tous les descripteurs de fichiers à l'exception des descripteurs standard (stdin = 0, stdout = 1 et stderr = 2). Le canal de la substitution de processus se trouve sur un autre descripteur, qui se ferme, donc quand il wpa_supplicantessaie de l'ouvrir, il trouve un fichier qui n'existe pas.

Si votre stratégie sudo le permet ( closefrom_overrideoption activée), vous pouvez lui dire de ne pas fermer les descripteurs de fichiers. Mais ce n'est généralement pas le cas.

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

Alternativement, puisque vous n'utilisez pas d'entrée standard, passez-y les données.

wpa_passphrase  | sudo wpa_supplicant  -c /dev/stdin

Vous pouvez également exécuter un shell à partir de sudo et y placer la substitution de processus. Soyez prudent en citant si la commande contient des caractères spéciaux.

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
Gilles 'SO- arrête d'être méchant'
la source
1

Pour ceux qui viennent d'un moteur de recherche Web: assurez-vous que votre /devest monté. Une erreur facile à faire lors du chrootage, qui peut alors entraîner des erreurs comme celle-ci.

Vladimir Panteleev
la source