Bluetooth LE digitaliza como não raiz?

11

Para realizar uma varredura em dispositivos bluetooth LE, hcitool aparentemente requer privilégios de root. Para usuários normais, a saída é a seguinte:

$ hcitool lescan
Set scan parameters failed: Operation not permitted

Por que o hcitool precisa de privilégios de root para uma varredura de LE?

É possível de alguma forma executar uma varredura LE como não-raiz?

    
por kassiopeia 15.10.2013 / 12:12

3 respostas

15

A pilha do protocolo Bluetooth para Linux verifica dois recursos. As capacidades são um sistema ainda não comum para gerenciar alguns privilégios. Eles podem ser manipulados por um módulo PAM ou por meio de atributos de arquivo estendidos. (veja link )

 $> 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 que faltam no executável, bem como o bit setuid.

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

então estamos prontos:

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

Sim, o seu adaptador BT não suporta BLE

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

Este, vá em frente e pressione um botão no seu dispositivo.

    
por 03.02.2015 / 00:11
7

Ok, pelo menos eu descobri parcialmente porque o hcitool requer privilégios de root para uma varredura de 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 uma chamada de sistema writev , com a pilha de chamadas bloqueando da seguinte maneira (todas as funções implementadas em hci.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 nenhum pedido ao controlador, mas usa uma solicitação ioctl dedicada, chamando:

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

Parece que o acesso de gravação ao controlador bluetooth é restrito, mas por que e como posso desativá-lo?

    
por 18.10.2013 / 17:50
0

Eu não tenho isso instalado, mas um subsistema de dispositivos bem escrito geralmente tem um grupo associado a ele. Adicione um usuário ao grupo e você poderá acessar o dispositivo (por exemplo, disk group permite acesso bruto ao disco rígido). Basta fazer ls -l em /dev para verificar isso. Se esse não for o caso e o dispositivo pertencer ao grupo root , você poderá alterar isso ajustando as regras udev que regem a nomeação, as permissões e as ações no hardware na detecção (não me pergunte como).

Isso vale para o acesso direto ao dispositivo que você provavelmente precisa neste caso. A funcionalidade normal do bluetooth é normalmente tratada através de um daemon com sua própria configuração, grupos, permissões e assim por diante. Verifique sua documentação de distribuição, os grupos podem variar um pouco.

    
por 17.03.2014 / 23:35