
Para realizar uma verificação de dispositivos Bluetooth LEhcitoolaparentemente requer privilégios de root. Para usuários normais, a saída é a seguinte:
$ hcitool lescan
Set scan parameters failed: Operation not permitted
Porquehcitoolprecisa de privilégios de root para uma varredura LE?
É possível realizar de alguma forma uma varredura LE como não-root?
Responder1
A pilha de protocolos Bluetooth para Linux verifica dois recursos. As capacidades ainda não são um sistema comum para gerenciar alguns privilégios. Eles poderiam ser tratados por um módulo PAM ou por meio de atributos de arquivo estendidos. (verhttps://elixir.bootlin.com/linux/v5.8.10/source/net/bluetooth/hci_sock.c#L1307)
$> sudo apt-get install libcap2-bin
instala ferramentas de manipulação de recursos do Linux.
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
define os recursos ausentes no executável como o bit setuid.
$> getcap !$
getcap `which hcitool`
/usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
então estamos prontos para ir:
$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error
Sim, seu adaptador BT não suporta BLE
$>hcitool -i hci1 lescan
LE Scan...
Este sim, vá em frente e pressione um botão no seu dispositivo.
Responder2
Ok, pelo menos descobri parcialmente o porquêhcitoolrequer privilégios de root para uma varredura LE, mas não para uma varredura normal. Parcialmente significa que localizei a chamada do sistema que falha devido a privilégios insuficientes ao executar a varredura LE como um usuário normal.
O erro "Operação não permitida" é gerado por umescrevervchamada de sistema, com a pilha de chamadas bloqueada da seguinte forma (todas as funções implementadas emhci.c, veja o código-fonte do bluez):
hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev
A varredura normal ("hcitool scan") aparentemente não precisa enviar nenhuma solicitação ao controlador, mas usa um dedicadoioctlsolicitação, ligando para:
ioctl(dd, HCIINQUIRY, (unsigned long) buf);
Parece que o acesso de gravação ao controlador bluetooth é restrito, mas por que e como posso desativar isso?
Responder3
Não tenho isso instalado, mas um subsistema de dispositivo bem escrito geralmente possui um grupo associado a ele. Adicione um usuário ao grupo e você poderá acessar o dispositivo (por exemplo, disk
o grupo permite acesso bruto ao disco rígido). Basta ls -l
entrar /dev
para verificar isso. Se esse não for o caso e o dispositivo pertencer ao root
grupo, você poderá alterar isso ajustando as udev
regras que regem a nomenclatura, as permissões e as ações no hardware na detecção (não me pergunte como).
Isso se aplica ao acesso direto ao dispositivo que você provavelmente precisará neste caso. A funcionalidade normal do bluetooth geralmente é controlada por meio de um daemon com sua própria configuração, grupos, permissões e assim por diante. Verifique a documentação de distribuição, os grupos podem variar um pouco.