非ルートとしてのBluetooth LEスキャン?


12

bluetooth LEデバイスのスキャンを実行するには、hcitoolにroot権限が必要なようです。通常のユーザーの場合、出力は次のとおりです。

$ hcitool lescan
Set scan parameters failed: Operation not permitted

LEスキャンにhcitoolに root権限が必要なのはなぜですか?

非ルートとして何らかの方法でLEスキャンを実行することは可能ですか?

回答:


21

Linux用のBluetoothプロトコルスタックは、2つの機能をチェックします。機能は、一部の特権を管理するためのまだ一般的なシステムではありません。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ビットのように、実行可能ファイルに不足している機能を設定します。

 $> 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...

これは、デバイスのボタンを押して続行します。


不足している機能を指摘してくれた4人に感謝します。また、Raspbian Stretchを実行しているRaspberry Piで非rootユーザーとしてbluetoothctlを使用するのに役立ちました!しかし、私の場合、/ lib / systemd / system / bluetooth.serviceに機能を追加しました。
ステファンウェゲナー

7

OK、少なくとも私は、hcitoolがLEスキャンにはroot権限を必要とするが、通常のスキャンには必要ではない理由を部分的に発見しました。部分的には、LEスキャンを通常のユーザーとして実行すると、権限が不十分なために失敗するシステムコールを見つけたことを意味します。

「Operation not allowed」エラーは、writevシステムコールによって生成され、コールスタックは次のようにロックされます(hci.cに実装されているすべての関数、bluezソースコードを参照)。

hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev

通常のスキャン(「hcitoolスキャン」)は、リクエストをコントローラに送信する必要はないようですが、専用のioctlリクエストを使用して呼び出します:

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

Bluetoothコントローラへの書き込みアクセスが制限されているようですが、なぜそれを無効にするにはどうすればよいですか?


0

私はこれをインストールしていませんが、よく書かれたデバイスサブシステムには通常、それに関連付けられたグループがあります。グループにユーザーを追加すると、デバイスにアクセスできます(たとえば、diskグループはrawハードドライブアクセスを許可します)。ただ、やるls -l/devこれを確認すること。そうでなく、デバイスがrootグループに属している場合は、udev検出時のハードウェアの命名、許可、およびアクションを管理するルールを調整することにより、これを変更できます(方法は問わないでください)。

これは、おそらくこの場合に必要なデバイスへの直接アクセスに当てはまります。通常、Bluetoothの通常の機能は、独自の構成、グループ、権限などを備えたデーモンによって処理されます。配布資料を確認してください。グループは多少異なる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.