CGroups

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मौलिक जानकारी

लिनक्स कंट्रोल ग्रुप्स, या cgroups, लिनक्स कर्नेल की एक विशेषता है जो प्रक्रिया समूहों के बीच सिस्टम संसाधनों जैसे CPU, मेमोरी, और डिस्क I/O का आवंटन, सीमिती, और प्राथमिकता अनुमति देती है। ये प्रक्रिया संग्रहों के संसाधन उपयोग का प्रबंधन और अलगाव करने के लिए एक तंत्र प्रदान करते हैं, जो संसाधन सीमिती, वर्कलोड अलगाव, और विभिन्न प्रक्रिया समूहों के बीच संसाधन प्राथमिकता के लिए उपयुक्त है।

cgroups के दो संस्करण हैं: संस्करण 1 और संस्करण 2। दोनों को सिस्टम पर समकालिक रूप से उपयोग किया जा सकता है। मुख्य भिन्नता यह है कि cgroups संस्करण 2 एक वृक्षाकार, पेड़-जैसा संरचना पेश करता है, जो प्रक्रिया समूहों के बीच अधिक सूक्ष्म और विस्तृत संसाधन वितरण को संभावित बनाता है। साथ ही, संस्करण 2 नए संसाधन नियंत्रकों का समर्थन, पुराने अनुप्रयोगों के लिए बेहतर समर्थन, और बेहतर प्रदर्शन जैसी कई सुधार भी लाता है।

समग्रतः, cgroups संस्करण 2 अधिक सुविधाएं और बेहतर प्रदर्शन प्रदान करता है संस्करण 1 से, लेकिन अंतिम को उस स्थितियों में उपयोग किया जा सकता है जहाँ पुराने सिस्टमों के साथ संगतता की चिंता है।

आप किसी प्रक्रिया के cgroup फ़ाइल में जाकर उसके v1 और v2 cgroups को सूचीबद्ध कर सकते हैं। इस कमांड के साथ अपने शैल के cgroups को देखने से आप शुरू कर सकते हैं:

$ cat /proc/self/cgroup
12:rdma:/
11:net_cls,net_prio:/
10:perf_event:/
9:cpuset:/
8:cpu,cpuacct:/user.slice
7:blkio:/user.slice
6:memory:/user.slice 5:pids:/user.slice/user-1000.slice/session-2.scope 4:devices:/user.slice
3:freezer:/
2:hugetlb:/testcgroup
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
0::/user.slice/user-1000.slice/session-2.scope

देखना cgroups

फ़ाइल सिस्टम सामान्यत: cgroups तक पहुंचने के लिए उपयोग किया जाता है, जो कि कर्नेल इंटरेक्शन के लिए पारंपरिक रूप से उपयोग किया जाने वाला यूनिक्स सिस्टम कॉल इंटरफेस से भिन्न है। एक शैल के cgroup कॉन्फ़िगरेशन की जांच करने के लिए, किसी को /proc/self/cgroup फ़ाइल की जांच करनी चाहिए, जो शैल का cgroup दिखाती है। फिर, /sys/fs/cgroup (या /sys/fs/cgroup/unified) निर्देशिका में जाकर एक नाम साझा करने वाली निर्देशिका को ढूंढकर, व्यक्तिगत cgroup के संबंधित सेटिंग्स और संसाधन उपयोग सूचना को देख सकते हैं।

cgroups के मुख्य इंटरफेस फ़ाइलों का प्रिफ़िक्स होता है cgroupcgroup.procs फ़ाइल, जिसे cat जैसे मानक कमांड्स के साथ देखा जा सकता है, cgroup में प्रक्रियाएँ सूचीबद्ध करती है। एक और फ़ाइल, cgroup.threads, धागा सूचना शामिल करती है।

शैल को प्रबंधित करने वाले cgroups सामान्यत: दो नियंत्रकों को सम्मिलित करते हैं जो स्मृति उपयोग और प्रक्रिया गणना को विनियंत्रित करते हैं। नियंत्रक के सम्मुख उपसर्ग वाली फ़ाइलों के साथ संवाद करने के लिए उन्हें देखना चाहिए। उदाहरण के लिए, pids.current का संदर्भ लिया जाएगा ताकि cgroup में धागों की गणना की जा सके।

किसी मान में max का संकेत देता है कि cgroup के लिए कोई विशिष्ट सीमा नहीं है। हालांकि, cgroups की पुंजीय नियमिता के कारण, सीमाएँ निर्देशिका वर्गीकरण में निचले स्तर पर एक cgroup द्वारा लागू की जा सकती हैं।

cgroups को बदलना और बनाना

प्रक्रियाएँ cgroups को उनके प्रक्रिया आईडी (PID) को cgroup.procs फ़ाइल में लिखकर दिए जाते हैं। इसके लिए रूट विशेषाधिकार चाहिए। उदाहरण के लिए, एक प्रक्रिया जोड़ने के लिए:

echo [pid] > cgroup.procs

उसी तरह, cgroup गुणों को संशोधित करना, जैसे कि एक PID सीमा सेट करना, चाहिए मान को संबंधित फ़ाइल में लिखकर किया जाता है। एक cgroup के लिए 3,000 PIDs की अधिकतम सीमा सेट करने के लिए:

echo 3000 > pids.max

नए cgroups बनाना cgroup वर्चस्व में एक नया उपनिर्देशिका बनाने का काम है, जिससे कर्नेल को स्वचालित रूप से आवश्यक इंटरफेस फ़ाइलें उत्पन्न करने के लिए प्रेरित किया जाता है। rmdir के साथ निष्क्रिय प्रक्रियाओं के बिना cgroups को हटाया जा सकता है, लेकिन कुछ नियमों के बारे में जागरूक रहें:

  • प्रक्रियाएँ केवल पत्ते वाले cgroups में रखी जा सकती हैं (अर्थात, वर्चस्व में सबसे अंतिम नेस्टेड होते हैं)।

  • एक cgroup अपने माता-पिता में अनुपस्थित नियंत्रक को नहीं धारण कर सकता

  • बाल cgroups के लिए नियंत्रकों को स्पष्ट रूप से घोषित किया जाना चाहिए cgroup.subtree_control फ़ाइल में। उदाहरण के लिए, एक बाल cgroup में CPU और PID नियंत्रकों को सक्षम करने के लिए:

echo "+cpu +pids" > cgroup.subtree_control

रूट सीग्रुप इन नियमों की एक अपवाद है, जो सीधी प्रक्रिया स्थानांतरण की अनुमति देता है। इसका उपयोग प्रक्रियाओं को सिस्टमडी प्रबंधन से हटाने के लिए किया जा सकता है।

सीग्रुप के भीतर CPU उपयोग की मॉनिटरिंग cpu.stat फ़ाइल के माध्यम से संभव है, जो कुल CPU समय का उपयोग दिखाता है, सेवा के सबप्रोसेस के उपयोग को ट्रैक करने के लिए उपयोगी है:

संदर्भ

  • पुस्तक: How Linux Works, 3rd Edition: What Every Superuser Should Know By Brian Ward

Last updated