บลูทู ธ LE สแกนว่าไม่เป็นรากหรือไม่


13

ในการสแกนหาอุปกรณ์บลูทู ธ LE hcitoolจะต้องมีสิทธิ์รูท สำหรับผู้ใช้ปกติผลลัพธ์จะเป็นดังนี้:

$ hcitool lescan
Set scan parameters failed: Operation not permitted

ทำไมhcitoolต้องการสิทธิ์รูทสำหรับการสแกน LE

เป็นไปได้ไหมที่จะทำการสแกน LE ด้วยวิธีที่ไม่ใช่รูท?

คำตอบ:


21

โปรโตคอล Bluetooth stack สำหรับ Linux ตรวจสอบความสามารถสองอย่าง ความสามารถเป็นระบบที่ใช้กันทั่วไปในการจัดการสิทธิ์บางอย่าง พวกเขาสามารถจัดการได้โดยโมดูล PAM หรือผ่านคุณสมบัติไฟล์เพิ่มเติม (ดูhttp://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )

 $> sudo apt-get install libcap2-bin

ติดตั้งเครื่องมือจัดการความสามารถของ linux

 $> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`

ตั้งค่าความสามารถที่หายไปของไฟล์ที่ใช้งานได้ซึ่งคล้ายกับ setuid bit

 $> getcap !$
 getcap `which hcitool`
 /usr/bin/hcitool = cap_net_admin,cap_net_raw+eip

ดังนั้นเราดีไป:

$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error

ใช่อะแดปเตอร์ BT ของคุณไม่รองรับ BLE

$>hcitool -i hci1 lescan
LE Scan...

หนึ่งนี้จะไปและกดปุ่มบนอุปกรณ์ของคุณ


1
ขอบคุณสี่ชี้ให้เห็นความสามารถที่หายไป มันยังช่วยให้ฉันใช้ bluetoothctl ในฐานะผู้ใช้ที่ไม่ใช่รูทบน Raspberry Pi ที่รัน Raspbian Stretch! แต่ในกรณีของฉันฉันเพิ่มความสามารถในการ /lib/systemd/system/bluetooth.service
Stefan Wegener

7

อย่างน้อยฉันก็ค้นพบบางส่วนว่าทำไมhcitoolต้องการสิทธิ์รูทสำหรับการสแกน LE แต่ไม่ใช่สำหรับการสแกนปกติ ส่วนหนึ่งหมายถึงฉันพบการโทรของระบบซึ่งล้มเหลวเนื่องจากมีสิทธิ์ไม่เพียงพอเมื่อเรียกใช้ LE scan ในฐานะผู้ใช้ปกติ

"การดำเนินงานไม่ได้รับอนุญาต" ข้อผิดพลาดจะถูกสร้างขึ้นโดยwritevเรียกระบบที่มีการเรียกกองล็อคดังต่อไปนี้ (ฟังก์ชั่นการใช้งานในทุกhci.cดูซอร์สโค้ด bluez):

hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev

การสแกนปกติ ("hcitool scan") เห็นได้ชัดว่าไม่จำเป็นต้องส่งการร้องขอใด ๆ ไปยังคอนโทรลเลอร์ แต่ใช้การร้องขอioctlเฉพาะการโทร:

ioctl(dd, HCIINQUIRY, (unsigned long) buf);

ดูเหมือนว่าการเข้าถึงการเขียนไปยังคอนโทรลเลอร์บลูทู ธ นั้นถูก จำกัด แต่ทำไมและฉันจะยกเลิกการใช้งานได้อย่างไร


0

ฉันไม่ได้ติดตั้งสิ่งนี้ แต่ระบบย่อยของอุปกรณ์ที่เขียนได้ดีมักจะมีกลุ่มที่เกี่ยวข้อง เพิ่มผู้ใช้ในกลุ่มและคุณสามารถเข้าถึงอุปกรณ์ (เช่นdiskกลุ่มอนุญาตการเข้าถึงฮาร์ดไดรฟ์แบบดิบ) เพียงทำls -lใน/devการตรวจสอบนี้ หากไม่ใช่กรณีและอุปกรณ์อยู่ในrootกลุ่มคุณสามารถเปลี่ยนแปลงสิ่งนี้ได้โดยปรับudevกฎที่ควบคุมการตั้งชื่อสิทธิ์และการดำเนินการกับฮาร์ดแวร์ที่ตรวจจับได้ (ไม่ต้องถามฉันว่า)

นี่เป็นการเข้าถึงอุปกรณ์โดยตรงที่คุณอาจต้องใช้ในกรณีนี้ ฟังก์ชั่นปกติของบลูทู ธ มักจัดการผ่านภูตด้วยการกำหนดค่ากลุ่มสิทธิ์และอื่น ๆ ตรวจสอบเอกสารการจำหน่ายของคุณกลุ่มอาจแตกต่างกันเล็กน้อย

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