मैं क्षमताओं के साथ प्रयोग कर रहा हूं, डेबियन ग्नू / लिनक्स पर।
मैंने अपनी वर्तमान कार्यशील निर्देशिका में कॉपी / बिन / पिंग की नकल की है। जैसा कि उम्मीद थी कि यह काम नहीं करता है, यह मूल रूप से सेतु जड़ था।
फिर मैं अपनी पिंग को न्यूनतम क्षमताओं (रूट नहीं) को करने देता sudo /sbin/setcap cap_net_raw=ep ./pingहूं, और मेरी पिंग काम करता है, जैसी कि उम्मीद थी।
फिर sudo /sbin/setcap -r ./pingउस क्षमता को निरस्त करना है। यह अब उम्मीद के मुताबिक काम नहीं कर रहा है।
मैं अब पिंग का उपयोग कर काम पाने की कोशिश करता हूं capsh।
capsh कोई विशेषाधिकार नहीं है, इसलिए मुझे इसे रूट के रूप में चलाने की आवश्यकता है, लेकिन फिर रूट को छोड़ दें और इस प्रकार अन्य सभी विशेषाधिकार।
मुझे लगता है कि मुझे भी इसकी आवश्यकता है secure-keep-caps, यह प्रलेखित नहीं है capsh, लेकिन क्षमता मैनुअल में है। मुझे इससे कुछ नम्बर मिले /usr/include/linux/securebits.h। वे सही प्रतीत होते हैं, क्योंकि --printइन बिट्स का आउटपुट सही होना दर्शाता है।
मैं घंटों से फिडिंग कर रहा हूं, अभी तक मेरे पास यही है।
sudo /sbin/capsh --keep=1 --secbits=0x10 --caps="cap_net_raw+epi" == --secbits=0x10 --user=${USER} --print -- -c "./ping localhost"
हालाँकि pingत्रुटियों के साथ ping: icmp open socket: Operation not permitted, यह तब होता है जब यह क्षमता नहीं होती है। इसके अलावा --printशो Current: =p cap_net_raw+i, यह पर्याप्त नहीं है जो हमें चाहिए e।
sudo /sbin/capsh --caps="cap_net_raw+epi" --print -- -c "./ping localhost"सेट करने की क्षमता Current: = cap_net_raw+eipसही है, लेकिन हमें छोड़ देता है root।
संपादित करें -1
मैंने अब कोशिश की है sudo /sbin/capsh --keep=1 --secbits=0x11 --caps=cap_net_raw+epi --print -- -c "touch zz; ./ping -c1 localhost;"
यह उत्पादन करता है:
touch: cannot touch `zz': Permission denied
ping: icmp open socket: Operation not permitted
पहली त्रुटि अपेक्षित है secure-noroot: yes
लेकिन दूसरी नहीं हैCurrent: = cap_net_raw+eip
संपादित -2
अगर मैं इसे ==पहले रखता हूं , तो --printयह अब पता चलता है Current: = cap_net_raw+i, ताकि पिछली त्रुटि बताई जा सके, लेकिन यह नहीं कि हम जड़ से स्विच करते समय क्षमता क्यों खो रहे हैं, हालांकि मुझे लगता है कि secure-keep-capsइसे ठीक करना चाहिए।
संपादित -3
जब मैं निष्पादित कर सकता हूं, तो मैं प्रभावी (ई), और अनुमत (पी) खो रहा हूं। यह अपेक्षित है, लेकिन मुझे लगा कि सिक्योर-की-कैप, उन्हें खो जाने से रोकना चाहिए। क्या मैं कुछ भूल रहा हूँ।
संपादित -4
मैं और अधिक शोध कर रहा हूं, और फिर से मैनुअल पढ़ रहा हूं। ऐसा लगता है कि सामान्य रूप से eऔर pक्षमताओं को खो दिया जाता है: जब आप उपयोगकर्ता से स्विच करते हैं root(या लागू होते हैं secure-noroot, इस प्रकार रूट को एक सामान्य उपयोगकर्ता बनाते हैं), तो इसके साथ ओवरडाइड किया जा सकता है secure-keep-caps; जब आप फोन करते हैं exec, जहां तक मैं बता सकता हूं कि यह एक आक्रमणकारी है।
जहां तक मैं बता सकता हूं, यह मैनुअल के अनुसार काम कर रहा है। जहां तक मैं बता सकता हूं कि कुछ भी उपयोगी करने का कोई तरीका नहीं है capsh। जहाँ तक मैं बता सकता हूँ, क्षमताओं का उपयोग करने के लिए: आपको फ़ाइल क्षमताओं का उपयोग करना चाहिए या क्षमताओं के बारे में पता होना चाहिए, जो उपयोग नहीं करता है exec। इसलिए कोई विशेषाधिकार प्राप्त आवरण।
तो अब मेरा सवाल यह है कि मैं क्या याद कर रहा हूं, इसके capshलिए क्या है ।
संपादित -5
मैंने एक उत्तर पुन: परिवेश क्षमताओं को जोड़ा है। शायद capshविरासत में मिली क्षमताओं के साथ भी इस्तेमाल किया जा सकता है, लेकिन उपयोगी होने के लिए इन्हें निष्पादन योग्य फ़ाइल पर सेट करना होगा। मैं यह नहीं देख सकता कि कैसे घात क्षमताओं के बिना कुछ भी उपयोगी नहीं हो सकता है, या विरासत में मिली क्षमताओं को अनुमति दे सकता है।
संस्करण:
capshपैकेजlibcap2-binसंस्करण से1:2.22-1.2- संपादन -3 से पहले मैंने नवीनतम
capshको पकड़ लियाgit://git.debian.org/collab-maint/libcap2.gitऔर उसका उपयोग शुरू कर दिया। uname -aLinux richard-laptop 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linuxउपयोगकर्ता-भूमि 32 बिट है।
capsh, परिवेश की अनुपस्थिति में (जैसा कि यह मूल रूप से था)। मैं क्या खो रहा हूँ। इसका उपयोग होना ही चाहिए।
capshcollab-maint रेपो से आप नहीं दिया होता "नवीनतम"capsh, डेबियन पैकेज अभी भी परिवेश क्षमताओं का समर्थन नहीं करता है। अपस्ट्रीम 2.27 करता है।