Pemindaian LE Bluetooth sebagai bukan root?

12

Untuk melakukan pemindaian untuk perangkat LE Bluetooth hcitool tampaknya membutuhkan hak akses root. Untuk pengguna normal, hasilnya adalah sebagai berikut:

$ hcitool lescan
Set scan parameters failed: Operation not permitted

Mengapa hcitool membutuhkan hak akses root untuk pemindaian LE?

Apakah mungkin melakukan pemindaian LE sebagai non-root?

kassiopeia
sumber

Jawaban:

21

Tumpukan protokol Bluetooth untuk Linux memeriksa dua kemampuan. Kemampuan adalah sistem yang belum umum untuk mengelola beberapa hak istimewa. Mereka dapat ditangani oleh modul PAM atau melalui atribut file yang diperluas. (lihat http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )

 $> sudo apt-get install libcap2-bin

menginstal alat manipulasi kemampuan linux.

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

set kemampuan yang hilang pada executable seperti bit setuid.

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

jadi kami baik untuk pergi:

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

Ya, adaptor BT Anda tidak mendukung BLE

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

Yang ini, terus dan tekan tombol pada perangkat Anda.

schnippe
sumber
Terima kasih empat menunjukkan kemampuan yang hilang. Itu juga membantu saya menggunakan bluetoothctl sebagai pengguna non root pada Raspberry Pi yang menjalankan Raspbian Stretch! tetapi dalam kasus saya, saya menambahkan kemampuan ke /lib/systemd/system/bluetooth.service.
Stefan Wegener
7

Ok, setidaknya saya menemukan sebagian mengapa hcitool membutuhkan hak akses root untuk pemindaian LE tetapi tidak untuk pemindaian normal. Berarti sebagian, bahwa saya menemukan panggilan sistem yang gagal karena tidak cukupnya hak istimewa ketika menjalankan pemindaian LE sebagai pengguna normal.

Kesalahan "Operasi tidak diizinkan" dihasilkan oleh panggilan sistem writev , dengan penguncian tumpukan panggilan sebagai berikut (semua fungsi diimplementasikan dalam hci.c , lihat kode sumber bluez):

hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev

Pemindaian normal ("pemindaian hcitool") tampaknya tidak perlu mengirim permintaan apa pun ke controller, tetapi menggunakan permintaan ioctl khusus , memanggil:

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

Tampaknya akses tulis ke pengontrol bluetooth dibatasi, tetapi mengapa dan bagaimana saya bisa menonaktifkannya?

kassiopeia
sumber
0

Saya tidak menginstal ini, tetapi subsistem perangkat yang ditulis dengan baik biasanya memiliki grup yang terkait dengannya. Tambahkan pengguna ke grup, dan Anda dapat mengakses perangkat (misalnya diskgrup memungkinkan akses hard drive mentah). Hanya melakukan ls -ldi /devuntuk memeriksa ini. Jika bukan itu masalahnya dan perangkat tersebut milik rootgrup, Anda dapat mengubahnya dengan menyesuaikan udevaturan yang mengatur penamaan, izin, dan tindakan pada perangkat keras yang terdeteksi (jangan tanya saya bagaimana).

Ini berlaku untuk akses perangkat langsung yang mungkin Anda butuhkan dalam kasus ini. Fungsionalitas normal bluetooth biasanya ditangani melalui daemon dengan konfigurasi sendiri, grup, izin, dan sebagainya. Periksa dokumentasi distribusi Anda, grup mungkin sedikit berbeda.

orion
sumber