GID, वर्तमान, प्राथमिक, पूरक, प्रभावी और वास्तविक समूह ID?


22

निम्नलिखित लिंक विभिन्न संदर्भों में इन अवधारणाओं पर चर्चा करते हैं। मैंने उनकी परिभाषाएँ पढ़ी हैं, लेकिन मैं अभी भी नहीं बता सकता कि वे कैसे संबंधित हैं, या यदि उनमें से कुछ सिर्फ एक ही हैं।

यहाँ मेरे भ्रम के स्रोत का एक उदाहरण है:

के अनुसार man id, यदि मैं टाइप करता हूं, तो मुझे idवह प्राप्त करना चाहिए जिसे वे प्रभावी और वास्तविक समूह आईडी कहते हैं।

id uid=501(joe) gid=501(joe) groups=501(joe), 100(users)

हालांकि, विकिपीडिया प्राथमिक और पूरक आईडी के idबीच अंतर करने के लिए आउटपुट को संदर्भित करता है । इसके अलावा, विकिपीडिया प्राथमिक बनाम पूरक और प्रभावी बनाम वास्तविक समूह आईडी के बीच अंतर करता है । ये अवधारणाएँ एक-दूसरे से कैसे संबंधित हैं?

इसके अलावा, क्या यह सच है कि प्राथमिक समूह आईडी = समूह आईडी = वर्तमान समूह आईडी?


प्रश्न स्पष्ट नहीं है: आपके द्वारा प्रदान की गई लिंक बहुत अधिक जानकारी देती हैं। इसके बारे में आपको क्या नहीं मिलता है?
psusi

जवाबों:


24

आप यहां दो अलग-अलग भेदों को मिलाते हैं:

  1. वास्तविक और प्रभावी समूह आईडी के बीच
  2. प्राथमिक और पूरक उपयोगकर्ताओं के समूहों के बीच

पहले भेद से तात्पर्य है कि प्रक्रियाओं को कैसे चलाया जा रहा है । आम तौर पर, जब आप एक कमांड / प्रोग्राम चलाते हैं, तो यह आपके उपयोगकर्ता के विशेषाधिकारों के साथ चलाया जाता है। इसमें वास्तविक समूह आईडी है जो आपके उपयोगकर्ता के प्राथमिक समूह के समान है। किसी अन्य विशेष समूह के सदस्य के रूप में कुछ कार्य करने के लिए इसे एक प्रक्रिया द्वारा बदला जा सकता है। ऐसा करने के लिए, प्रोग्राम उस setgidफ़ंक्शन का उपयोग करते हैं जो उनके प्रभावी समूह आईडी को बदलता है ।

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

[संपादित करें]:

मैं मानता हूं कि यहां का मेनपेज idकुछ भ्रामक है। यह शायद इसलिए है क्योंकि यह जानकारी दस्तावेज़ द्वारा प्रदान किए गए विवरण का एक स्ट्रिप-डाउन संस्करण है। इसे और अधिक स्पष्ट रूप से देखने के लिए, चलाएं info coreutils "id invocation"(जैसा कि idमैनुअल के अंत में सुझाव दिया गया है)।


धन्यवाद @rozcietrzewiacz यह बहुत मददगार था। क्या तब मैं मान सकता हूं कि वर्तमान समूह आईडी = प्राथमिक समूह?
एमिलियो वाज़क्वेज़-रीना

1
सामान्य तौर पर, नहीं। वर्तमान "वास्तविक" समूह को newgrpकमांड का उपयोग करके बदला जा सकता है - अपने पहले लिंक में मैनुअल का दूसरा पैराग्राफ देखें!
रोज़ज़ेट्रिएवेज़ेज़

18

कर्नेल का दृश्य

वैचारिक रूप से, समूहों के तीन समूह हैं जो एक प्रक्रिया का एक सदस्य है। प्रत्येक सेट निम्नलिखित में से एक सबसेट है।

  1. एकल समूह जो प्रक्रिया का डिफ़ॉल्ट समूह है, इस प्रक्रिया द्वारा बनाई गई फाइलें किससे संबंधित होंगी।
  2. जब समूह को फ़ाइल खोलने के लिए अनुमति की आवश्यकता होती है, तो समूह का समूह।
  3. समूहों का समूह जो अतिरिक्त विशेषाधिकारों की प्रक्रिया से चल रहा है, वह आकर्षित कर सकता है।

ऐतिहासिक कारणों से, ये सेट क्रमशः हैं:

  1. प्रभावी समूह आईडी (egid);
  2. प्रभावी समूह आईडी और पूरक समूह आईडी ;
  3. उपरोक्त सभी प्लस वास्तविक समूह आईडी और सहेजे गए सेट-समूह-आईडी

आम तौर पर, एक प्रोग्राम में एक एकल उपयोगकर्ता आईडी होती है। यदि निष्पादन योग्य में सेट्यूड मोड बिट सेट है, तो प्रोग्राम में दो उपयोगकर्ता आईडी हैं: इसकी प्रभावी उपयोगकर्ता आईडी वह है जो फ़ाइल अनुमति, प्रति-उपयोगकर्ता सीमा के लिए मायने रखती है, यह निर्धारित करती है कि क्या प्रक्रिया रूट और इसी तरह चल रही है। प्रक्रिया प्रभावी और वास्तविक उपयोगकर्ता आईडी के बीच स्विच कर सकती है, अगर उसे हर समय अपने अतिरिक्त विशेषाधिकारों की आवश्यकता नहीं है, या यदि उसे दो गैर-रूट उपयोगकर्ताओं के बीच स्विच करने की आवश्यकता है।

समूह के लिए एक ही तंत्र मौजूद है। समूहों के लिए, एक अतिरिक्त विशेषता है जो सिस्टम के डिजाइन किए जाने पर मौजूद नहीं थी: एक प्रक्रिया किसी भी संख्या में समूहों का सदस्य हो सकती है; ये पूरक समूह आईडी हैं।

उपयोगकर्ता डेटाबेस दृश्य

एक बार उपयोगकर्ता प्रमाणित हो जाने के बाद, उपयोगकर्ता के खोल (या उपयोगकर्ता जो भी अनुरोध करता है) को लॉन्च करने से ठीक पहले लॉगिन प्रक्रिया उस उपयोगकर्ता के पास चली जाती है। वांछित उपयोगकर्ता (और रूट विशेषाधिकार खोने) पर स्विच करने से ठीक पहले, लॉगिन प्रक्रिया वांछित समूहों में स्विच हो जाती है।

शुरुआती यूनिक्स संस्करणों में, एक प्रक्रिया केवल एक ही समूह में हो सकती है। यह समूह उपयोगकर्ता का प्राथमिक समूह आईडी है, जिसे उपयोगकर्ता डेटाबेस में संग्रहीत किया जाता है (आमतौर पर/etc/passwd ) । यह समूह शेल या लॉगिन प्रक्रिया द्वारा शुरू किए गए अन्य कार्यक्रम की वास्तविक और प्रभावी समूह आईडी बन जाता है।

आजकल, एक प्रक्रिया कई समूहों में हो सकती है, इसलिए उपयोगकर्ता कई समूहों में भी हो सकते हैं। समूह डेटाबेस (आमतौर पर /etc/group) में प्रत्येक समूह के लिए उपयोगकर्ताओं की एक सूची होती है। ये समूह लॉगिन प्रक्रिया द्वारा शुरू किए गए कार्यक्रम के लिए पूरक समूह आईडी बन जाते हैं।


धन्यवाद। मुझे आपके उत्तर को समझने में कुछ प्रश्न हैं। unix.stackexchange.com/questions/466742/…
टिम

1

यहाँ कई अन्य उत्कृष्ट उत्तर हैं, लेकिन यदि आप अभी भी उलझन में हैं जैसा कि मैं था, यहाँ एक और दृष्टिकोण है। कृपया ध्यान दें कि मैं केवल इस सामान का एक छात्र हूं, न कि एक मास्टर , इसलिए यह उत्तर एक कार्य प्रगति पर है, और एक ठोस उत्तर नहीं माना जाना चाहिए, कम से कम अभी तक नहीं। इस उत्तर पर विचार करें v0.2।

समूह एक ही समय में सरल और जटिल हैं।

नीचे दी गई आईडी की कुंजी:

KEY  Full name --------  Description---------------------------------------------

 u   User                 uID = User  ID (a unique # associated with each user)
 g   Group                gID = Group ID (a unique # associated with each group)
                            While each /etc/passwd entry has one uID and one gID,
                            additional gIDs can be associated with a users via
                            /etc/group.


 L   Login          IDs - uID and gID produced from the Login process.  
                            ('L' is not exactly standard Linux terminology, but
                            useful for explanations below.)

 F   File           IDs - uID and gID retrieved from a file's ownership.
                            ('F' is not exactly standard Linux terminology, but
                            useful for explanations below.)


 R   Real           IDs - Who actually                      runs a process 
 E   Effective      IDs - Who spoofed via setuid or setgid, runs a process
 O   Original Eff.  IDs - Place to save the original Effective ID when changing 
                          it (e.g. temporarily downgrading it) so can later 
                          restore it.  Also called "Saved ID"; (but 'S' was not 
                          used for here to help avoid confusion with the 'S' in  
                          'SetUserID' & SetGroupID.)
 +   Supplimentary gIDs - Optional, additional groups (none or more) running 
                          this process which can be used to test for permissions.

उपयोगकर्ता और समूह आईडी नाम:

Category          USER  GROUP  Notes  
----------------- ----  -----  -------------------------------------------  
 From login:      LuID  LgID   From /etc/passwd lookup

 From files:      FuID  FgID   Each file has these. Set by creator process.


 For each running process:

            Real  RuID  RgID   Actual   user starting the program
       Effective  EuID  EgID   Assigned user starting the program*
           Saved  OuID  OgID   Saves original effective ID.
   Supplementary        +gID1  (optional, additional groups)
                        +gID2     
                         ...  

प्रक्रियाएँ ID कैसे प्राप्त करती हैं:

1) लॉगिन यूज़रनेम और रिटर्न LuIDऔर LgIDसे प्रमाणित करता है /etc/passwd

2) पहली प्रक्रिया प्रभावी = वास्तविक = लॉगिन, अर्थात सेट करती है

EuID=RuID=LuID 
EgID=RgID=LgID

3) कांटे वाले बच्चे विरासत RuIDमें मिले EuID, RgIDऔर EgID, और , (और संभवतः बचाए गए और दबाए गए), हालांकि,

  • यदि नया प्रोग्राम निष्पादित करने के लिए s u id बिट (s) सेट है, तो फाइल से प्रभावी सेट करें:

    EuID = FuID

  • यदि s g id बिट (s) निष्पादित करने के लिए नए प्रोग्राम की फ़ाइल पर सेट है, तो फ़ाइल से प्रभावी सेट करें:

    Egid = FgID

नोट: अंतर्निहित फाइल सिस्टम की suid और nosuid माउंट विकल्प भी लागू होते हैं।

4a) यदि s u id को सेट करने के लिए उपयोग किया गया थाEuID , तो EuIDअस्थायी रूप से बदला जा सकता है (जैसे रूट से डाउनग्रेड किया गया), लेकिन पहले इसका मूल मूल्य बच जाता है, OuIDइसलिए बाद में इसे वांछित होने पर बहाल किया जा सकता है।

4b) यदि s g id को सेट करने के लिए उपयोग किया गया थाEgID , तो EgIDअस्थायी रूप से परिवर्तित किया जा सकता है (जैसे मूल से डाउनग्रेड किया गया), लेकिन पहले इसका मूल मूल्य बच जाता है, OgIDइसलिए बाद में इसे वांछित होने पर बहाल किया जा सकता है।


जब एक फ़ाइल बनाई जानी है:

File's new id's are set from effective id's: FuID=EuID and FgID=EgID
(Permissions are set from umask.)

पढ़ने के लिए खोलने के लिए:

If FuID = EuID  and  user-read bit is set, or  
If FgID = EgID  and group-read bit is set, or  
If FgID = +gID1 and group-read bit is set, or  
If FgID = +gID2 and group-read bit is set, ...  
then allow reading.

लिखने के लिए खोलने के लिए:

(Same as above but write bit set to allow writing.)

निष्पादन के लिए खोलने के लिए:

(Same as above but execute bit set to allow execution.)

जब एक संदेश भेजने की आवश्यकता हो:

Use RuID and RgID.  (Not EuID or EgID). *(Not sure where I read this.)*

सन्दर्भ: आदमी साख

अतिरिक्त: यहाँ अपने / etc / group फ़ाइल को प्रिंट करने के लिए एक उपयोगिता है:

cat /etc/group | sort -t: -k3n | awk  -F ':' \
  'BEGIN{printf "\n%-20s %-3s %-8s %s", \
           "Group name","pw", "Group ID ", "User list"}\
   BEGIN{printf "\n%-20s %-3s %-8s %s\n", \
           "----------","--", "---------", "---------"} \
        { printf "%-20s %-3s %8d %s\n", $1, $2, $3, $4 }'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.