एक एम्बेडेड सिस्टम (2.4 कर्नेल) में मुझे रूट के रूप में चलने वाली प्रक्रिया से eth0 इंटरफेस में कच्ची सॉकेट पहुंच की आवश्यकता है।लिनक्स पर सामान्य उपयोगकर्ता के रूप में कच्चे सॉकेट का उपयोग 2.4
मैंने कमांड लाइन से CAP_NET_RAW क्षमता सेट करके और cap_set_proc() का उपयोग करके प्रोग्रामेटिक रूप से किसी भी सफलता के साथ इस समस्या को हल करने का प्रयास किया। ऐसा लगता है कि मैं कमांड लाइन
टोपी प्रक्रिया `1586 पर है 'सेट करने में विफल पर कार्यक्रम मैं एक EPERM त्रुटि मिलती है, ऐसा करने के लिए, की अनुमति नहीं है: (कार्रवाई की अनुमति नहीं)
क्या मैं चाहता हूं कि ऐसा करने का कोई आसान तरीका है? यदि नहीं, तो CAP_NET_RAW क्षमता को सफलतापूर्वक सेट करने के लिए कौन से कदम आवश्यक हैं?
संपादित करें: मेरे पास रूट पहुंच है, लेकिन प्रक्रिया को स्थायी रूप से चलाना क्योंकि रूट कोई विकल्प नहीं है। Libcap का संस्करण 1.10 है, कोई 'setcap' बाइनरी नहीं है, लेकिन 'setpcaps' है।
संपादित करें - जॉर्ज Skoptsov का जवाब दे:
अगर मैं तुम्हें सही, अपने सुझाव setuid के साथ एक प्रक्रिया शुरू है, तो CAP_NET_RAW क्षमता सेट और फिर विशेषाधिकार ड्रॉप करने के लिए है मिलता है। मैंने निम्न कोड के साथ यह कोशिश की, लेकिन ऐसा लगता है कि कैप्स कमांड त्रुटियों को वापस नहीं करता है। seteuid के साथ() बाहर टिप्पणी की, कच्चे पहुँच काम करता है, लेकिन केवल के बाद से प्रक्रिया रूट के रूप में तो चल रहा है:
cap_t caps = cap_get_proc();
cap_value_t cap_list[1];
cap_list[0] = CAP_NET_RAW;
if (cap_set_flag(caps, CAP_EFFECTIVE, 1, cap_list, CAP_SET) == -1)
{
printf("cap_set_flag error");
}
if (cap_set_proc(caps) == -1)
{
printf("cap_set_proc error");
}
if (seteuid(getuid()) != 0)
{
printf("seteuid error");
}
function_that_needs_raw_access();
आपकी मदद के लिए धन्यवाद। क्रिस
यदि आप नीचे दिए गए मेरे सुझाव का पालन करते हैं, तो आपकी प्रक्रिया एक नहीं चल जाएगी जड़, लेकिन स्टार्ट-अप पर रूट विशेषाधिकार होंगे, जो आपको इच्छित क्षमताओं को सेट करने की अनुमति देगा। –
आपके सुझावों के लिए धन्यवाद जॉर्ज, हालांकि, मुझे कोई सफलता नहीं मिली ... मेरे संपादन देखें। – Chris
क्रिस, शायद आप 'function_that_needs_raw_access()' में स्पष्ट रूप से आवश्यक होने पर विशेषाधिकारों को बढ़ाने के साथ बहुत सावधान रह सकते हैं? –