La pile de protocoles Bluetooth pour Linux vérifie deux capacités. Les capacités ne sont pas encore un système commun pour gérer certains privilèges. Ils peuvent être gérés par un module PAM ou via des attributs de fichier étendus. (voir http://lxr.free-electrons.com/source/net/bluetooth/hci_sock.c#L619 )
$> sudo apt-get install libcap2-bin
installe les outils de manipulation des capacités linux.
$> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
définit les capacités manquantes sur l'exécutable tout comme le bit setuid.
$> getcap !$
getcap `which hcitool`
/usr/bin/hcitool = cap_net_admin,cap_net_raw+eip
nous sommes donc prêts à partir:
$>hcitool -i hci0 lescan
Set scan parameters failed: Input/output error
Oui, votre adaptateur BT ne prend pas en charge BLE
$>hcitool -i hci1 lescan
LE Scan...
Celui-ci le fait, continuez et appuyez sur un bouton de votre appareil.
Ok, au moins j'ai découvert en partie pourquoi hcitool nécessite des privilèges root pour un scan LE mais pas pour un scan normal. Cela signifie en partie que j'ai localisé l'appel système qui échoue en raison de privilèges insuffisants lors de l'exécution de l'analyse LE en tant qu'utilisateur normal.
L'erreur "Opération non autorisée" est générée par un appel système writev , avec le verrouillage de la pile d'appels comme suit (toutes les fonctions implémentées dans hci.c , voir le code source bluez):
Le scan normal ("hcitool scan") n'a apparemment pas besoin d'envoyer de requêtes au contrôleur, mais utilise une requête ioctl dédiée , appelant:
Il semble que l'accès en écriture au contrôleur Bluetooth soit limité, mais pourquoi et comment puis-je le désactiver?
la source
Je ne l'ai pas installé, mais un sous-système de périphérique bien écrit est généralement associé à un groupe. Ajoutez un utilisateur au groupe et vous pouvez accéder à l'appareil (par exemple, le
disk
groupe autorise l'accès au disque dur brut). Il suffit de fairels -l
dans/dev
le vérifier. Si ce n'est pas le cas et que l'appareil appartient auroot
groupe, vous pouvez changer cela en ajustant lesudev
règles qui régissent les noms, les autorisations et les actions sur le matériel lors de la détection (ne me demandez pas comment).Cela vaut pour l'accès direct à l'appareil dont vous avez probablement besoin dans ce cas. La fonctionnalité normale de bluetooth est généralement gérée par un démon avec sa propre configuration, groupes, autorisations, etc. Vérifiez votre documentation de distribution, les groupes peuvent varier légèrement.
la source