क्या प्रबंध समूहों को रूट एक्सेस की आवश्यकता है?


12

मैं दो अलग-अलग ऑपरेटिंग सिस्टम (Ubuntu और CentOS) पर नियंत्रण समूहों के साथ काम करने की कोशिश कर रहा हूं। कुछ चिंताएं हैं जो मैं पूछना चाहूंगा।

मैं cgcreateकमांड का उपयोग करके एक नियंत्रण समूह बनाने की कोशिश कर रहा हूं , और ऐसा लगता है कि मशीन पर रूट एक्सेस की आवश्यकता है। सभी उदाहरण जो मैंने अब तक देखे हैं, नियंत्रण समूह बनाने या संशोधित करने के लिए मूल उपयोगकर्ता होने की आवश्यकता के बारे में कुछ नहीं कहते हैं।

क्या रूट उपयोगकर्ता होना वास्तव में आवश्यक है? अंतिम लक्ष्य एक C ++ एप्लिकेशन लिखना है जो libcgroup API का उपयोग करके संसाधनों को नियंत्रित करने के लिए नियंत्रण समूहों का निर्माण और प्रबंधन करता है। लेकिन C ++ एप्लिकेशन किसी भी रूट उपयोगकर्ता द्वारा नहीं चलाया जाएगा। यह कोई भी सामान्य उपयोगकर्ता हो सकता है।


1
wiki.archlinux.org/index.php/Cgroups के पास कुछ जानकारी है, आपको मूल रूप से रूट द्वारा कुछ सेटअप की आवश्यकता होगी (अभी तक स्वयं cgroups में विस्तार से नहीं देखा गया है)।
Mat

वह वेबसाइट हालांकि विवरण के साथ मदद नहीं करती है। यह सिर्फ एक उच्च स्तरीय अवलोकन है।
रेम्बो

1
खैर, यह आपको बताता है कि रूट उन समूहों को सेटअप कर सकता है जो गैर-रूट उपयोगकर्ताओं द्वारा प्रबंधनीय हैं।
मैट

मैंने कुछ समय पहले बड़े पैमाने पर cgroups में देखा ; वह जानकारी आपके काम आ सकती है। हालाँकि मैं यह सब जड़ के रूप में कर रहा था, इसलिए मेरे पास इस विशेष प्रश्न का उत्तर नहीं है।
वाइल्डकार्ड

आप एक 'editcgroup' समूह बना सकते हैं, फिर उस समूह में सभी को 'sudo cgcreate' और 'sudo cgdelete' करने की अनुमति देते हैं
John Militer

जवाबों:


4

सामान्य परिदृश्य आपके द्वारा सेट किए है cgcreate, cgset, cgdelete, cggetके रूप में, आदि जड़ । आखिरकार कई संसाधनों को चूसने से प्रतिबंधित होने वाले कार्यक्रम / स्क्रिप्ट को एक सामान्य उपयोगकर्ता के रूप में निष्पादित किया जाएगा। इसलिए, उपयोगकर्ता के रूप में रूट, उपयोग और निष्पादन के रूप में सेटअप करें।

इस के साथ किया जा रहा है -aऔर -tके मापदंडों cgcreateआदेश (रूट के रूप में मार डाला)। तो पहले से ही जब आप एक समूह स्थापित करते हैं। मेरे मामले में:

cgcreate -t ​​monero: monero -a monero: monero -g memory, cpu: monerogroup

जहां मोनो भविष्य के उपयोगकर्ता का उपयोगकर्ता नाम है जो cgroup प्रतिबंधों के साथ कार्यक्रम को निष्पादित और चलाएगा। इन -aऔर -tसबपामेटर्स के बीच ठीक अंतर के लिए मैन पेज देखें cgcreate

आदमी cgcreate

ज्यादातर मामलों में दोनों एक ही उपयोगकर्ता हैं।

फिर, प्रतिबंध स्थापित करें (अभी भी जड़ के रूप में):

cgset -r memory.limit_in_bytes = $ ((4 * 1024 * 1024 * 1024)) मोनोग्राम

cgset -r cpu.shares = 128 मोनरोग्रुप

यदि आप चाहते हैं तो अपनी प्रविष्टियों की जाँच करें:

cgget -g memory: / monerogroup | ग्रीप बाइट्स

और फिर अंततः उपयोगकर्ता को स्विच करें, मेरे मामले में उपयोगकर्ता मोनोरो, और सही फ़ोल्डर से:

cgexec -g memory, cpu: monerogroup/monerod

उपयोगकर्ता को अनुमतियों के साथ कोई कठिनाई नहीं होगी या इसलिए जैसे ही आप इसे विशेष रूप से उसके लिए सेट करते हैं।


2

इस तरफ के सुरक्षा निहितार्थ, आप setuidथोड़ा सेट कर सकते हैं

chmod +s /bin/cgcreate
chmod +s /bin/cgdelete

गैर रूट उपयोक्ता को देने के लिए जो उस प्रोग्राम रूट पॉवर को चलाता है।

पुनर्संयोजन फिर सामान्य उपयोगकर्ता पहुंच को हटाने के लिए होगा

chmod 550 /bin/cgcreate
chmod 550 /bin/cgdelete

और एक विशेष समूह बनाएं जिसे आप cgcreate IE का उपयोग करने की अनुमति देना चाहते हैं cgusers,

groupadd cgusers

और उन फ़ाइलों पर समूह सदस्यता को उस समूह में बदलें:

chgrp cgusers /bin/cgcreate
chgrp cgusers /bin/cgdelete

यह सब रूट द्वारा चलाया जाएगा, उसके बाद cgusersसमूह के सभी उपयोगकर्ता , स्वयं के बजाय रूट के रूप में cgcreateऔर चलेंगे cgdelete। आपको सिर्फ उन सदस्यों की आवश्यकता होगी जो आप इस शक्ति को सही समूह के अंतर्गत रखना चाहते हैं।


1

Cgroups अंततः cgroup filesystem (s) के माध्यम से नियंत्रित किए जाते हैं। Cgroups बनाने की क्षमता केवल उस / उनके तहत निर्देशिका बनाने और फ़ाइलों को लिखने की क्षमता होनी चाहिए। यदि आप अधिक विस्तृत अनुमतियों के साथ cgroup FSs को माउंट करते हैं, या यदि आप मक्खी पर अपनी अनुमतियाँ बदलते हैं, तो कुछ उपयोगकर्ताओं को सामान करने में सक्षम होना चाहिए। जाहिर है कि आप कार्य फ़ाइल में अन्य उपयोगकर्ताओं की प्रक्रिया की प्रक्रिया आईडी नहीं जोड़ पाएंगे। आप केवल अपने उपयोगकर्ता को जोड़ पाएंगे।

यह कहने के बाद, मुझे यकीन नहीं है कि उपरोक्त वैश्विक है। यानी वहाँ एक मौका है कि कुछ cgroups इस का समर्थन नहीं करते हैं।

कुल मिलाकर, सबसे अच्छा तरीका यह है कि एक cgroup प्रबंधक का उपयोग किया जाए जिसे बाद में cgroup में कार्यों को संबद्ध करने के निर्देश दिए जा सकते हैं। मेरा मानना ​​है कि cgmanager कुछ ऐसा करता है।


1

लघु उत्तर नहीं है।

एक cgroup के निर्माण और स्वामित्व असाइनमेंट के लिए, आप रूट विशेषाधिकारों पर निर्भर करते हैं। इसके आसपास जाने का कोई विश्वसनीय तरीका नहीं है।

हालाँकि, आप एक cgroup बना सकते हैं और एक निश्चित उपयोगकर्ता या समूह को स्वामित्व प्रदान कर सकते हैं।

उपयोगकर्ता

$ u=$(whoami)
$ sudo mkdir /sys/fs/cgroup/cpuset/${u}
$ sudo chown -R ${u}: /sys/fs/cgroup/cpuset/${u}

समूह

$ g=MYGROUP && grep ^${g}: /etc/group || echo "Your group doesn't exist. Run \"mkgroup $g\" and repeat this command before you continue." 
$ sudo mkdir /sys/fs/cgroup/cpuset/${g}
$ sudo chgrp -R ${g} /sys/fs/cgroup/cpuset/${g}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.