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.
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):
Pemindaian normal ("pemindaian hcitool") tampaknya tidak perlu mengirim permintaan apa pun ke controller, tetapi menggunakan permintaan ioctl khusus , memanggil:
Tampaknya akses tulis ke pengontrol bluetooth dibatasi, tetapi mengapa dan bagaimana saya bisa menonaktifkannya?
sumber
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
disk
grup memungkinkan akses hard drive mentah). Hanya melakukanls -l
di/dev
untuk memeriksa ini. Jika bukan itu masalahnya dan perangkat tersebut milikroot
grup, Anda dapat mengubahnya dengan menyesuaikanudev
aturan 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.
sumber