लिनक्स: समूह बनाम समूह उपयोगकर्ता नाम


12

क्या किसी को पता है कि लिनक्स कमांड क्यों है

    groups 

से अलग आउटपुट दिखाता है

    groups username 

उपयोगकर्ता में लॉग इन पैरामीटर उपयोगकर्ता नाम के समान है। उदाहरण:

    thorsten@ubuntu:~/tmp$ groups
    thorsten adm dialout cdrom plugdev lpadmin admin sambashare
    thorsten@ubuntu:~/tmp$ groups thorsten
    thorsten : thorsten adm dialout cdrom plugdev nogroup lpadmin admin sambashare

1
इस सवाल के बहुत सारे डुप्लिकेट हैं कि मुझे यह भी नहीं पता है कि कहां से शुरू करना है।
user1686

जवाबों:


12

जब आप दौड़ते हैं , तो यह दिए गए उपयोगकर्ता को 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अद्यतन समूह सूची के साथ एक खोल होगा।


3

groupsअपने आप प्रक्रिया के मालिक की वर्तमान समूह सदस्यता देता है। यह तब से भिन्न हो सकता है groups <username>जब प्रक्रिया शुरू होने के बाद या प्रक्रिया के मालिक को बदल दिया गया है।


groupsवर्तमान सदस्यता नहीं देता है , बल्कि उस समय जो "वर्तमान" था जब लॉगिन प्रक्रिया (/ sbin / login, gdm, sshd) कहलाती है initgroups()
user1686

1

बस कंप्यूटर को पुनरारंभ करें और उपयोगकर्ता और समूह उपयोगकर्ता दोनों को समान परिणाम देना चाहिए।

उनके अलग होने का कारण यह था कि आपने खुद को एक नए समूह में जोड़ा था, जब आप कंप्यूटर शुरू करते थे तब आप सदस्य नहीं थे।


आपको निश्चित रूप से पूरे सिस्टम को रिबूट करने की आवश्यकता नहीं है! आपको बस एक नया लॉगिन सत्र शुरू करने की आवश्यकता है (यानी नए वर्चुअल कंसोल पर, suवर्तमान सत्र को फिर से खोलना बंद करके )। आप newgrpशामिल नए समूह के साथ प्रक्रिया शुरू करने के लिए भी उपयोग कर सकते हैं ।
पाबौक

1
मेरा मतलब केवल एक सरल त्वरित समाधान देना था जो हर बार काम करेगा। बहुत सारे अन्य उत्तर हैं जो पहले से ही इस प्रश्न का बहुत विस्तार से उत्तर देते हैं। कभी-कभी लोग जो चाहते हैं, जैसे यह मेरे मामले में था, एक सरल समाधान है जो बस कई चरणों से गुजरने के बिना काम करता है।
एलेक्स

0

भागो updatedb, देखो कि क्या कोई बदलाव है।

मेरे OSX मशीन में वही जब ग्रुपडब नहीं बदला है:

albert-hotspot:~ sami$ groups sami
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ groups
staff com.apple.access_screensharing com.apple.sharepoint.group.2 everyone _appstore localaccounts _appserverusr admin _appserveradm _lpadmin _lpoperator _developer
albert-hotspot:~ sami$ 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.