2015-03-17 4 views
8

टी एल का उपयोग नहीं; डॉ: क्यों हैं cap_net_raw, cap_net_admin क्षमताओं केवल /usr/bin (या /usr/sbin) में काम कर रहे हैं, लेकिन नहीं अन्य स्थान? क्या इसे किसी जगह से कॉन्फ़िगर किया जा सकता है?कच्चे कब्जा क्षमताओं (CAP_NET_RAW, CAP_NET_ADMIN) काम कर बाहर/usr/bin और दोस्तों के पैकेट पर कब्जा कार्यक्रम के लिए libpcap

मुझे उबंटू 14.04 में libpcap का उपयोग करने वाले मेरे सी प्रोग्राम में क्षमताओं को आवंटित करने में समस्याएं आ रही हैं। setcap(8) का उपयोग करके क्षमताओं को असाइन करने के बाद भी और getcap(8) का उपयोग करके इसे जांचने के बाद भी मुझे अनुमति त्रुटि मिलती है। ऐसा लगता है कि क्षमता केवल \usr\bin और दोस्तों में निष्पादन योग्य के लिए काम करती है।

मेरे कार्यक्रम test.c इस प्रकार दिखता है:

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char **argv) { 
    if (argc != 2) { 
     printf("Specify interface \n"); 
     return -1; 
    } 
    char errbuf[PCAP_ERRBUF_SIZE]; 
    struct pcap* pcap = pcap_open_live(argv[1], BUFSIZ, 1, 0, errbuf); 
    if (pcap == NULL) { 
     printf("%s\n", errbuf); 
     return -1; 
    } 
    return 0; 
} 

और

gcc test.c -lpcap 

पैदा a.out निष्पादन के साथ संकलित किया गया है। मैं क्षमताओं सेट:

sudo setcap cap_net_raw,cap_net_admin=eip ./a.out 

और देखने के लिए कि यह सही लग रहा है की जाँच करें:

./a.out eth0 
eth0: You don't have permission to capture on that device (socket: Operation not permitted) 

रनिंग:

getcap a.out 

जो मुझे

a.out = cap_net_admin,cap_net_raw+eip 

a.out चल देता है मुझे देता हैके साथअपेक्षित काम करता है (प्रोग्राम प्रिंट करता है और बाहर निकलता है)।

यहां दिलचस्प हिस्सा है: यदि मैं a.out से /usr/bin (और क्षमताओं को दोबारा लागू करता हूं) चलाता हूं, तो यह काम करता है। इसके विपरीत: लेने की क्षमता सक्षम wireshark से /usr/bin/dumpcap (जो wireshark समूह के उपयोगकर्ताओं के लिए ठीक काम करता है) और यह बाहर /usr/bin की चलती, मेरे घर निर्देशिका करने के लिए कहते हैं, एक ही क्षमताओं फिर से आवेदन करने, यह काम नहीं करता है। इसे वापस ले जाना, यह काम करता है।

SO: ये क्षमताएं केवल /usr/bin (और /usr/sbin) में क्यों काम कर रही हैं, लेकिन अन्य जगह नहीं? क्या इसे किसी जगह से कॉन्फ़िगर किया जा सकता है?

+0

परीक्षण प्रोजेक्ट (ऊपर की क्षमताओं के साथ) बॉक्स में फेडोरा -21 के बहुत सारे बाहर AOK काम करता है। अंधेरे में गोली मार दी: सुरक्षा अनुमतियाँ संबंधित?(मुझे उबंटू से विशेष रूप से कुछ भी नहीं पता है, लेकिन मैं उबंटू पर एपअर्मोर नामक कुछ इकट्ठा करता हूं जो फेडोरा पर एसईएलएनक्स के समान हो सकता है)। – willyo

+0

आप शायद सही हैं, @ विलीओ ... मैंने ऐपअर्मर और अनलोडिंग प्रोफाइल को अक्षम करने का प्रयास किया था (कोई फायदा नहीं हुआ), लेकिन – dirkhas

उत्तर

8

ऐसा इसलिए हो सकता है क्योंकि आपकी होम निर्देशिका nosuid के साथ घुड़सवार है, जो काम करने की क्षमताओं को रोकने के लिए प्रतीत होता है। उबंटू होम निर्देशिका को एन्क्रिप्ट करता है, और यह बताता है कि ecryptfs के साथ nosuid के रूप में।

क्षमता वाले बिनरी /usr/, और /home/ में मेरे लिए काम करते हैं, लेकिन मेरी होम निर्देशिका नहीं।

एकमात्र संदर्भ मैं nosuid क्षमताओं को हराने के लिए पा सकता हूं यह लिंक है: http://www.gossamer-threads.com/lists/linux/kernel/1860853#1860853। मुझे एक आधिकारिक स्रोत मिलना अच्छा लगेगा।

+1

पर और अधिक नहीं गए, इससे मुझे और अधिक अपवर्तक मिलना चाहिए क्योंकि मैंने इस समस्या से भी ठोकर खाई, खरोंच मेरे सिर एक लंबे समय के लिए। मुझे यह जवाब नहीं मिला क्योंकि मैं जिस क्षमता की खोज कर रहा था वह 'CAP_NET_BIND_SERVICE' था जिसका उल्लेख यहां और अधिक लोगों की उम्मीद में किया जाना चाहिए। – TabascoEye

+1

आप चल रहे प्रक्रिया की क्षमताओं को सूचीबद्ध करने के लिए 'getpcaps $ (pidof ./a.out) 'का उपयोग कर सकते हैं। 'Sudo mount -o remount, suid/home' आज़माएं और जांचें कि यह तब काम करता है या नहीं। – user1225999

संबंधित मुद्दे