यदि Im वर्तमान में उपयोगकर्ता के रूप में लॉग इन किया गया है, तो `समूहों 'से भिन्न' समूहों 'से आउटपुट क्यों है?


21

मुझे यकीन नहीं है कि निम्नलिखित में अलग आउटपुट क्यों है। मेरी समझ यह है कि उपयोगकर्ता निर्दिष्ट किए बिना समूह उन सभी समूहों को देता है जो वर्तमान में लॉग इन उपयोगकर्ता के सदस्य हैं।

jacob@box:~$ groups
jacob adm lp dialout cdrom plugdev lpadmin sambashare

jacob@box:~$ groups jacob
jacob : jacob

इसके अलावा इसका क्या मतलब है "वर्तमान प्रक्रिया के समूह" (समूह मैन पेज से)? वे कहां स्थापित हैं?

नोट: मेरा distro Ubuntu है।


@ जेक को लॉग आउट करने की कोशिश करें और फिर वापस लौटें।

1
मैं इस मुद्दे को उल्टा कर रहा हूं। 'group myname' मुझे उन सभी समूहों को देता है जो मेरे पास / etc / समूहों की फ़ाइल में हैं, लेकिन सिर्फ 'समूह' करने से मुझे केवल मेरा प्राथमिक समूह दिखाई देता है। और, वास्तव में, आज्ञाओं की आवश्यकता के कारण एक निश्चित पूरक समूह में शामिल होने की आवश्यकता वाले आदेश। यकीन है कि मैं जानता था कि यह क्या कारण था।
टॉड वाल्टन

जवाबों:


11

यह निम्नलिखित में से एक हो सकता है:

  • यह एक बग हो सकता है (हालांकि मुझे संदेह है)
  • आपको फिर से लॉगआउट और लॉगिन करने की आवश्यकता हो सकती है

समूहों में सेट कर रहे हैं /etc/group


8

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

जब आप groupsबिना किसी तर्क के साथ चलते हैं , तो अंततः यह कर्नेल से अनुपूरक समूह सूची प्राप्त करने के लिए getgroups () को आमंत्रित करता है । (मेरे लिनक्स सिस्टम पर, / usr / bin / group एक शेल स्क्रिप्ट है जो "id -Gn" चलाता है, जो बदले में getgroups () को आमंत्रित करता है।)

जब आप चलाते हैं groups username, तो कमांड को "अनुमान" करना होता है कि उपयोगकर्ता द्वारा लॉग इन करने पर पूरक समूह क्या होगा। यह आमतौर पर / etc / समूह को पढ़ने या एनआईएस से बात करने या nscd से बात करने या ... खैर, वहाँ एक हैं बहुत सारे तरीके यह काम कर सकते हैं।

आप जो देख रहे हैं वह यह पता लगाने के समान है कि आपकी वर्तमान वास्तविक उपयोगकर्ता आईडी और / etc / passwd में आपकी प्रविष्टि असंगत है। इसका मतलब है कि आपके सिस्टम के कॉन्फ़िगरेशन के बारे में कुछ अजीब है, लेकिन यह कहना मुश्किल है कि अधिक जांच के बिना क्या होगा।


3

(टिप्पणी: groupsकमान, हालांकि अभी भी उपयोगी है, ज्यादातर आईडी कमांड द्वारा अधिगृहीत है ।)

एक उपयोगकर्ता के पास एक प्राथमिक समूह होता है जिसे परंपरागत रूप से उस फ़ाइल /etc/passwdफ़ाइल में परिभाषित किया जाता है जिसके साथ वह लॉग इन करता है, लेकिन आज अन्य स्रोत हो सकते हैं। वह अतिरिक्त समूहों का सदस्य भी हो सकता है, जिसे माध्यमिक या पूरक समूहों के रूप में जाना जाता है, जो परंपरागत रूप से फ़ाइल में निर्दिष्ट है /etc/groups, लेकिन जो आज अतिरिक्त स्रोतों (जैसे एनआईएस, एलडीएपी, एसएएमबीए आदि) से भी आ सकता है या निहित हो सकता है।

प्राथमिक और पूरक समूह लॉगिन के समय परिभाषित होते हैं और वर्तमान रहते हैं । हालाँकि, उपयोगकर्ता किसी भी समय कमांड का उपयोग करके अपने वर्तमान सक्रिय प्राथमिक समूह को बदल सकता है newgrp

लॉगिन प्रक्रिया प्राथमिक और पूरक समूहों को निर्धारित करती है। बाद में, यह आम तौर पर libc फ़ंक्शन को inggroups कहता है , जो पूरक समूह डेटा की सूची को संकलित करता है और इसे सेटग्रुप फ़ंक्शन में भेजता है, जो इसे प्रक्रिया के संदर्भ में स्थापित करता है।

जानकारी के स्रोत इस प्रकार initgroupsहैं:

  • प्राथमिक प्रवेश के लिए / etc / passwd
  • पूरक समूहों के लिए / etc / समूह
  • /etc/nsswitch.conf के लिए सूत्रों का कहना है अनुपूरक समूहों, जो के रूप में वर्णन किया गया है करने के लिए:

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

groupsआदेश से पता चलता है समूहों के रूप में वर्तमान में लागू अपने उपयोगकर्ता के लिए, और सूची के साथ शुरू होगा वर्तमान प्राथमिक समूह लॉगिन के समय से अनुपूरक समूहों द्वारा पीछा किया। प्रदर्शित सूची के बाद से डेटा के स्रोतों में कोई भी परिवर्तन दिखाई नहीं देता है।

groups usernameआदेश लिनक्स के लिए पूछ रहा है की गणना है कि उपयोगकर्ता है, जो यह मुख्य फ़ाइलों का उपयोग करना होगा के लिए समूहों /etc/password और /etc/groupsऔर उसके बाद अतिरिक्त स्रोतों। यह सिस्टम फ़ाइलों की वर्तमान स्थिति को प्रतिबिंबित करेगा और लॉगिन के समय से प्रभावी होने वाले वर्तमान समूहों के बराबर नहीं हो सकता है ।

groups usernameजब यह सभी स्रोतों प्रवेश प्रक्रिया अपने अनुपूरक समूहों, जो है जाहिरा तौर पर अपने मामले में क्या हुआ की गणना करने के लिए प्रयोग किया जाता का उपयोग नहीं करता आदेश एक अलग परिणाम दे सकता है। ये स्रोत आपके लॉगिन से सुलभ नहीं हो सकते हैं या केवल कमांड द्वारा परामर्श नहीं किया जा सकता है।

id usernameआदेश का उपयोग करना बेहतर परिणाम दे सकता है, हालांकि यह भी लॉगिन प्रक्रिया के रूप में पूरा होने की गारंटी नहीं है। idआदेश से नवीनतम है, और की तुलना में, पुराने और अधिक स्पष्ट होने का इरादा था groupsआदेश।

जबकि groupsकमांड एक सटीक और सही परिणाम देता है, आपने अच्छी तरह से प्रदर्शित किया है कि groups usernameकमांड को उसी पर निर्भर नहीं किया जा सकता है।

groupsआदेश के स्रोत-कोड की जांच किए बिना , मैं यह अनुमान लगाऊंगा कि groups usernameआपके लिनक्स वितरण में कमांड का कार्यान्वयन विश्लेषण करता है /etc/groups, जिसमें आपके मामले में कुछ भी नहीं था, लेकिन उपयोग नहीं करता है /etc/nsswitch.conf, जिसमें से आपके सभी पूरक समूह आए थे। इसलिए, केवल प्राथमिक समूह का नाम सूचीबद्ध है jacob

अधिक जानकारी के लिए देखें:

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.