Не удалось открыть файл конфигурации '/ dev / fd / 63', ошибка: нет такого файла или каталога для wpa_supplicant

12

Когда я делаю это:

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

я получил

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'

Есть идеи?

Оскар К.
источник

Ответы:

14

Цитирую ArchLinux вики :

Примечание: из-за подстановки процесса вы не можете запустить эту команду с помощью sudo - вам потребуется корневая оболочка.

Вы должны быть в состоянии использовать su -cпод sudoтак:

$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
    <(wpa_passphrase "some ssid" "password")'
Александр Батищев
источник
11

Подстановка процесса <(…) создает канал, использует /dev/fdдля указания пути, эквивалентного дескриптору файла, в котором находится канал, и передает имя файла в качестве аргумента программе. Здесь есть программа sudo, и она передает этот аргумент (который является просто строкой) wpa_supplicant, который обрабатывает его как имя файла.

Проблема в том, что sudo закрывает все файловые дескрипторы, кроме стандартных (stdin = 0, stdout = 1 и stderr = 2). Канал подстановки процесса находится в другом дескрипторе, который закрывается, поэтому при wpa_supplicantпопытке открыть его он находит файл, который не существует.

Если ваша политика sudo это позволяет ( closefrom_overrideопция включена), вы можете запретить закрывать дескрипторы файлов. Но обычно это не так.

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

Кроме того, поскольку вы не используете стандартный ввод, передайте данные туда.

wpa_passphrase  | sudo wpa_supplicant  -c /dev/stdin

В качестве альтернативы, запустите оболочку из sudo и поместите подстановку процесса туда. Будьте осторожны с кавычками, если команда содержит специальные символы.

sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
Жиль "ТАК - перестань быть злым"
источник
1

Для тех, кто приходит с веб-поисковой системы: убедитесь, что ваш /devподключен. Легкая ошибка, которую можно совершить при chrooting, которая может привести к таким ошибкам, как эта.

Владимир Пантелеев
источник