जब आप दौड़ते हैं , तो यह दिए गए उपयोगकर्ता को 1 दिखता है और (हालांकि यह LDAP, NIS या कुछ और 2 हो सकता है ) और आपको मिले सभी समूहों को दिखाता है।groups username
/etc/passwd
/etc/group
दूसरी ओर, जब आप groups
कमांड को बिना किसी तर्क के चलाते हैं , तो यह केवल उन सभी समूहों को सूचीबद्ध करता है जो स्वयं 3 से संबंधित हैं - जो कि सूचीबद्ध होने के साथ जरूरी नहीं है/etc/group
। (स्पष्टीकरण के लिए नीचे देखें।) वास्तव में, समूह नाम के लिए GIDs का अनुवाद करने के लिए केवल लुकअप किए गए /etc/group
हैं।
प्रत्येक प्रक्रिया में क्रेडेंशियल्स का एक सेट होता है, जिसमें एक "वास्तविक समूह आईडी" (प्राथमिक GID), एक "प्रभावी समूह ID" (EGID) और "पूरक समूह" ID (द्वितीयक GIDs) की एक सूची होती है। डिफ़ॉल्ट रूप से, एक प्रक्रिया अपने माता-पिता से अपनी साख विरासत में लेती है; हालाँकि, रूट (UID 0) के रूप में चल रही प्रक्रियाओं या CAP_SETUID
क्षमता होने से मनमाना क्रेडेंशियल्स सेट करने की अनुमति मिलती है।
विशेष रूप से, जब आप लिनक्स में लॉग इन करते हैं (चाहे एक tty, X11, या SSH से अधिक), तो लॉगिन प्रक्रिया (/ बिन / लॉगिन, gdm, sshd) आपके UID, प्राथमिक GID और द्वितीयक GID को निर्धारित करने के लिए आपके उपयोगकर्ता नाम को देखती है। । एक व्यक्तिगत मशीन पर, इसका मतलब सिर्फ फाइलों passwd
और group
फाइलों (या एनआईएस, एलडीएपी, आदि) से उपयुक्त लाइनों को पढ़ना है ।
अगला, लॉगिन प्रक्रिया आपके सत्र को शुरू करने से पहले उन क्रेडेंशियल्स पर 4 स्विच करती है , और अब से आपके द्वारा लॉन्च की जाने वाली प्रत्येक प्रक्रिया में ठीक उसी यूआईडी और जीआईडी होंगे - सिस्टम /etc/group
अब 5 की जांच नहीं करता है और किए गए किसी भी संशोधन को नहीं उठाएगा।
इस तरह, यह /usr/bin/groups
प्रक्रिया उसी समूह से संबंधित होगी जैसा आपने लॉगिन करते समय किया था , न कि उस डेटाबेस से जो आप कहते हैं।
नोट: उपरोक्त स्पष्टीकरण लगभग सभी यूनिक्स पर भी लागू होता है; Windows NT परिवार के लिए (UIDs और GIDs सब कहा जाता है "SIDs" को छोड़कर, वहाँ कोई "प्राथमिक समूह" है, साख "प्रक्रिया टोकन" कहा जाता है, और CAP_SETUID
है SeCreateTokenPrivilege या SeTcbPrivilege ); और अधिकांश अन्य बहु-उपयोगकर्ता ऑपरेटिंग सिस्टम की संभावना है।
1 getpwuid () और getgrouplist () का उपयोग उपयोगकर्ता के समूह को देखने के लिए किया जाता है।
2 लिनक्स पर, glibc /etc/nsswitch.conf
यह निर्धारित करने के लिए उपयोग करता है कि इस जानकारी को कहाँ देखना है।
3 groups
अपने स्वयं के क्रेडेंशियल्स प्राप्त करने के लिए getgid (), getegid () और getgroups () का उपयोग करता है।
4 सेतुइड (), सेटगिड (), इनिटग्रुप () और संबंधित।
5 एक अपवाद, ज़ाहिर है, विभिन्न उपकरण है कि ऊपर उठाया रन (है setuid जैसे) su
, sudo
, sg
, newgrp
, pkexec
, और इतने पर। इसका मतलब यह है कि su $USER
अद्यतन समूह सूची के साथ एक खोल होगा।