गैर-रूट के रूप में ब्लूटूथ ले स्कैन?


13

ब्लूटूथ ले उपकरणों hcitool के लिए एक स्कैन करने के लिए जाहिर तौर पर रूट विशेषाधिकारों की आवश्यकता होती है। सामान्य उपयोगकर्ताओं के लिए आउटपुट निम्न है:

$ hcitool lescan
Set scan parameters failed: Operation not permitted

LE स्कैन के लिए hcitool को मूल विशेषाधिकारों की आवश्यकता क्यों है ?

क्या गैर-रूट के रूप में किसी तरह LE स्कैन करना संभव है?

जवाबों:


21

लिनक्स के लिए ब्लूटूथ प्रोटोकॉल स्टैक दो क्षमताओं की जाँच करता है। कुछ विशेषाधिकार प्रबंधित करने के लिए क्षमताएं अभी तक एक सामान्य प्रणाली नहीं हैं। वे एक PAM मॉड्यूल या विस्तारित फ़ाइल विशेषताओं के माध्यम से नियंत्रित किया जा सकता है। (देखें http://lxr.free-electrons.com/source/net/bluaxy/hci_sock.c#L619 )

 $> sudo apt-get install libcap2-bin

लिनक्स क्षमताओं में हेरफेर उपकरण स्थापित करता है।

 $> sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`

सेट्युड बिट की तरह निष्पादन योग्य पर लापता क्षमताओं को सेट करता है।

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

हाँ, आपका बीटी एडॉप्टर BLE का समर्थन नहीं करता है

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

यह एक करता है, जाओ और अपने डिवाइस पर एक बटन दबाएं।


1
धन्यवाद चार लापता क्षमताओं की ओर इशारा करते हुए। इसने मुझे रास्पबेरी स्ट्रेच चलाने वाले रास्पबेरी पाई पर गैर रूट उपयोगकर्ता के रूप में ब्लूटूथ का उपयोग करने में भी मदद की! लेकिन मेरे मामले में मैंने /lib/systemd/system/bluaxy.service में क्षमता जोड़ी।
स्टीफन वीगनर

7

ठीक है, कम से कम मुझे आंशिक रूप से पता चला कि hcitool को LE स्कैन के लिए रूट विशेषाधिकार की आवश्यकता है लेकिन सामान्य स्कैन के लिए नहीं। आंशिक रूप से इसका मतलब है, कि मैं एक सामान्य उपयोगकर्ता के रूप में ले स्कैन चलाने के दौरान अपर्याप्त विशेषाधिकार के कारण सिस्टम कॉल को विफल कर देता हूं।

"ऑपरेशन की अनुमति नहीं" त्रुटि एक राइटव सिस्टम कॉल द्वारा उत्पन्न होती है, कॉल स्टैक लॉकिंग निम्नानुसार है ( hci.c में कार्यान्वित सभी फ़ंक्शन , ब्लूज़ स्रोत कोड देखें):

hci_le_set_scan_parameters -> hci_send_req -> hci_send_cmd -> writev

सामान्य स्कैन ("hcitool स्कैन") को जाहिरा तौर पर नियंत्रक को किसी भी अनुरोध को भेजने की आवश्यकता नहीं है, लेकिन एक समर्पित ioctl अनुरोध का उपयोग करता है , कॉलिंग:

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

ऐसा लगता है कि ब्लूटूथ नियंत्रक तक पहुंच लिखना प्रतिबंधित है, लेकिन मैं इसे क्यों और कैसे निष्क्रिय कर सकता हूं?


0

मेरे पास यह स्थापित नहीं है, लेकिन एक अच्छी तरह से लिखित डिवाइस सबसिस्टम में आमतौर पर एक समूह जुड़ा होता है। उपयोगकर्ता को समूह में जोड़ें, और आप डिवाइस तक पहुंच सकते हैं (उदाहरण के लिए diskसमूह कच्ची हार्ड ड्राइव की अनुमति देता है)। बस कर ls -lमें /devयह जांच करने के लिए। अगर ऐसा नहीं है और डिवाइस rootसमूह से संबंधित है , तो आप इसका udevपता लगाने के लिए हार्डवेयर पर नामकरण, अनुमतियों और कार्यों को नियंत्रित करने वाले नियमों को समायोजित करके बदल सकते हैं (मुझसे कैसे पूछें)।

यह सीधे डिवाइस एक्सेस के लिए जाता है जिसकी आपको संभवतः इस मामले में आवश्यकता है। ब्लूटूथ की सामान्य कार्यक्षमता को आमतौर पर अपने स्वयं के कॉन्फ़िगरेशन, समूहों, अनुमतियों और इसी के साथ डेमॉन के माध्यम से नियंत्रित किया जाता है। अपने वितरण प्रलेखन की जाँच करें, समूह थोड़े भिन्न हो सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.