ไม่สามารถเปิดไฟล์กำหนดค่า '/ 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ในการกำหนดพา ธ ที่เทียบเท่ากับ file descriptor ที่ไพพ์อยู่และส่งชื่อไฟล์เป็นอาร์กิวเมนต์ไปยังโปรแกรม นี่คือโปรแกรมsudoและมันจะส่งผ่านอาร์กิวเมนต์นั้น (ซึ่งเป็นเพียงสตริงเท่าที่เกี่ยวข้อง) ไปยังwpa_supplicantซึ่งถือว่าเป็นชื่อไฟล์

ปัญหาคือ sudo ปิดไฟล์ descriptors ทั้งหมดยกเว้นตัวมาตรฐาน (stdin = 0, stdout = 1 และ stderr = 2) ไปป์ของการทดแทนกระบวนการอยู่บน descriptor อื่นซึ่งถูกปิดดังนั้นเมื่อ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 ซึ่งจะส่งผลให้เกิดข้อผิดพลาดเช่นนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.