मैंने एक उपयोगकर्ता को एक समूह में जोड़ा, लेकिन फ़ाइलों पर समूह अनुमतियों का अभी भी कोई प्रभाव नहीं है


17

मैंने एक फ़ाइल ( chmod g+w testfile) की अनुमति बदल दी है और चल रहा ls -l testfileहै:

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

मैंने तब एक उपयोगकर्ता को उस समूह में जोड़ा (" / etc / group " में user1:x:1000:user2लाइन है), लेकिन मैं उस फाइल को user2 के रूप में संपादित करने में विफल रहा हूं। ऐसा क्यों है?


जवाबों:


28

user2 लॉग आउट करने और वापस करने की आवश्यकता है। समूह अनुमतियाँ इस तरह से काम करती हैं:

  • जब आप लॉग इन करते हैं, तो आपकी प्रक्रियाओं का उल्लेख आपके मुख्य समूह में समूह सदस्यता के लिए मिलता है /etc/passwd, साथ ही उन सभी समूहों में जहां आपके उपयोगकर्ता में उल्लेख किया गया है /etc/group। (अधिक सटीक रूप से, वह pw_gidफ़ील्ड getpw(your_uid), जिसके साथ ही आपका उपयोगकर्ता एक स्पष्ट सदस्य है , के सभी समूह । परे और जानकारी, NIS या LDAP जैसे अन्य प्रकार के उपयोगकर्ता डेटाबेस से आ सकते हैं।) मुख्य समूह प्रक्रिया का प्रभावी समूह आईडी बन जाता है। और अन्य समूह इसके पूरक समूह आईडी बन जाते हैं ।/etc/passwd/etc/group
  • जब एक प्रक्रिया एक ऑपरेशन करती है, जिसमें एक निश्चित समूह में सदस्यता की आवश्यकता होती है, जैसे कि फ़ाइल तक पहुंचना , तो उस समूह को प्रभावी समूह आईडी या प्रक्रिया के पूरक समूह आईडी में से एक होना चाहिए।

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

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

एक एकल अपवाद है: एक सेट्यूड या सेटगिड प्रोग्राम को निष्पादित करना । उस कार्यक्रम को अतिरिक्त अनुमति प्राप्त होती है: यह मूल प्रक्रिया के सदस्यों के विभिन्न सबसेट के तहत कार्य करने का विकल्प चुन सकता है। विशेष रूप से, एक setuid रूट प्रोग्राम में रूट अनुमतियां हैं, इसलिए सब कुछ कर सकते हैं; इस तरह से कार्यक्रम suऔर sudoअपना काम कर सकते हैं।

( कभी-कभी ऐसी प्रक्रियाएं होती हैं जो init (initrd, udev) से नहीं ली जाती हैं, लेकिन सिद्धांत एक ही है: मूल के रूप में शुरू करें और समय के साथ विशेषाधिकारों को खो दें।
SEL SELinux जैसे बहुस्तरीय सुरक्षा ढांचे को वर्जित करना।


1
ध्यान दें कि यदि आप डेस्कटॉप GUI का उपयोग कर रहे हैं, तो बस लॉग आउट करके टर्मिनल विंडो में वापस समूह सदस्यता को रीसेट नहीं करेगा। मुझे यह समस्या थी और मुझे अपने GUI सत्र से भी बाहर निकलने की आवश्यकता है:
39

3
@ user394 समूह सदस्यता को रीसेट करने के लिए लॉग आउट और बैक करना। यदि आप केवल एक टर्मिनल विंडो बंद करते हैं, तो आप लॉग आउट नहीं कर रहे हैं।
गिल्स एसओ- बुराई को रोकना '

10

आपको उपयोगकर्ता 2 लॉग आउट और बैक इन होना चाहिए (या नया लॉगिन सत्र बनाने के लिए ssh'ing में प्रयास करें)। id --groupsकिसी उपयोगकर्ता के लिए संख्यात्मक समूह आईडी दिखाने के लिए आउटपुट की जाँच करें।


1

sudo su $(whoami)

अनिवार्य रूप से समान वर्कअराउंड ssh localhost, लेकिन एक ssh सर्वर स्थापित किए बिना प्रयोग करने योग्य।

जब तक तुम्हारे पास जड़ है। लेकिन अगर आपने अभी एक नया समूह जोड़ा है और अनुमतियाँ बदली हैं, तो आप इसकी संभावना रखते हैं।


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

0

एक मामला है जब उपयोगकर्ता लॉगआउट मदद नहीं करता है - यदि आप होस्ट के लिए ControlMaster ssh निर्देश का उपयोग कर रहे हैं। यदि आप अपने खाते को एक समूह, लॉगऑफ़ और लॉगऑन में फिर से उसी कंट्रोलमास्टर कनेक्शन के साथ जोड़ते हैं, तो सत्र अभी भी आपको नई सदस्यता दिखा रहा है। आपको जबरन मास्टर कनेक्शन को तोड़ना होगा

ssh -O exit hostname

फिर से लॉगिन करने से पहले।

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