चिपचिपा सा कैसे काम करता है?


148

SUID

चिपचिपा सा प्रणाली पर चिह्नित करने की स्मृति में कार्यक्रम की एक छवि रखने के लिए के बाद कार्यक्रम का चलना समाप्त निष्पादन योग्य कार्यक्रमों के लिए आवेदन किया।

लेकिन मुझे नहीं पता कि यह स्मृति में संग्रहीत है। और मैं उन्हें इस मामले में कैसे देख सकता हूं।?


यहाँ काम उदाहरण और स्पष्टीकरण के साथ एक अच्छा ट्यूटोरियल है। इसे समझने की कुंजी इसमें शामिल ऑक्टल सिस्टम है। लिनक्स स्टिकी काम किए गए उदाहरणों के साथ ट्यूटोरियल को काटता है
CMP

जवाबों:


193

यह शायद मेरी सबसे अजीब चीजों में से एक है जो लोग हर समय गड़बड़ करते हैं। SUID / GUID बिट और स्टिकी-बिट 2 पूरी तरह से अलग चीजें हैं।

यदि आप करते हैं तो man chmodआप SUID और स्टिकी-बिट्स के बारे में पढ़ सकते हैं। आदमी पेज यहाँ उपलब्ध है के रूप में अच्छी तरह से।

पृष्ठभूमि

अंश

प्रभावित उपयोगकर्ताओं के लिए अक्षर rwxXst फ़ाइल मोड बिट्स का चयन करें: पढ़ें (r), लिखें (w), निष्पादित करें (या निर्देशिकाओं की खोज करें) (x), निष्पादित करें / खोजें तभी करें जब फ़ाइल निर्देशिका है या पहले से ही कुछ के लिए अनुमति है। उपयोगकर्ता (एक्स), सेट उपयोगकर्ता या समूह आईडी निष्पादन (ओं) पर , प्रतिबंधित विलोपन ध्वज या चिपचिपा बिट (टी)

SUID / GUID

उपरोक्त मैन पेज जो कहना चाह रहा है वह यह है कि एक्स बिट में rwxrwxrwx में उपयोगकर्ता ऑक्टल (rwx का पहला समूह) और समूह ऑक्टल (rwx का दूसरा समूह) के लिए एक अतिरिक्त स्थिति ले सकता है जहां x हो जाता है a s। जब यह फ़ाइल तब होती है जब निष्पादित किया जाता है (यदि यह एक कार्यक्रम है और सिर्फ एक शेल स्क्रिप्ट नहीं है) स्वामी या फ़ाइल के समूह की अनुमति से चलेगा।

इसलिए यदि फ़ाइल रूट के स्वामित्व में है और SUID बिट चालू है, तो प्रोग्राम रूट के रूप में चलेगा। भले ही आप इसे एक नियमित उपयोगकर्ता के रूप में निष्पादित करें। यही बात GUID बिट पर लागू होती है।

अंश

सेट और सेट बिट्स

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

जब तक आप स्पष्ट रूप से अन्यथा निर्दिष्ट नहीं करते हैं तब तक chmod एक निर्देशिका के सेट-यूजर-आईडी और सेट-ग्रुप-आईडी बिट्स को संरक्षित करता है। आप बिट्स को यू + एस और जीएस जैसे प्रतीकात्मक मोड के साथ सेट या साफ़ कर सकते हैं, और आप बिट्स को एक संख्यात्मक मोड के साथ सेट (लेकिन स्पष्ट नहीं) कर सकते हैं।

SUID / GUID उदाहरण

कोई suid / गाइड नहीं - बस बिट्स rwxr-xr-x सेट हैं।

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & user का निष्पादन योग्य सक्षम (लोअरकेस s) - बिट्स rwsr-xrx सेट हैं।

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

सक्षम और निष्पादन योग्य बिट अक्षम (अपरकेस एस) - बिट्स rwSr-xr-x सेट हैं।

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

गाइड और समूह का निष्पादन योग्य सक्षम (लोअरकेस s) - बिट्स rwxr-sr-x सेट हैं।

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

गाइड सक्षम और निष्पादन योग्य बिट अक्षम (अपरकेस एस) - बिट्स rwxr-Sr-x सेट हैं।

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

चिपचिपा सा

दूसरी ओर चिपचिपा सा है t, जैसे कि /tmpनिर्देशिका के साथ :

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

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

अंश

संक्षिप्त विवरण फ्लैग या स्टिकी बीआईटी

प्रतिबंधित विलोपन ध्वज या चिपचिपा बिट एक एकल बिट है, जिसकी व्याख्या फ़ाइल प्रकार पर निर्भर करती है। निर्देशिकाओं के लिए, यह
अप्रकाशित उपयोगकर्ताओं को निर्देशिका में किसी फ़ाइल को हटाने या नाम बदलने से रोकता है जब तक कि वे फ़ाइल या निर्देशिका के मालिक न हों; इसे निर्देशिका के लिए प्रतिबंधित विलोपन ध्वज कहा जाता है, और सामान्यतः विश्व-योग्य निर्देशिकाओं जैसे / tmp पर पाया जाता है। कुछ पुराने सिस्टम पर नियमित फ़ाइलों के लिए, बिट स्वैप प्रोग्राम पर प्रोग्राम की टेक्स्ट इमेज को सेव करता है, इसलिए इसे चलाने पर अधिक तेज़ी से लोड होगा; इसे चिपचिपा सा कहा जाता है।


43
वास्तव में स्टिकी-बिट को पहले निष्पादन योग्य पर लागू किया जा सकता था, जिसके कारण उन्हें पहली बार लोड होने के बाद स्वैप में रहना पड़ता था। यह उन अनावश्यक डिस्क / नेटवर्क (एनएफएस) और सीपीयू के बहुत से कार्यक्रमों को बचा सकता है जो बहुत अधिक उपयोग किए गए थे। हालांकि, न तो लिनक्स और न ही अधिकांश (सभी?) यूनिक्स सिस्टम किसी भी लंबे समय तक इसका समर्थन करते हैं (इसे कर्नेल से हटा दिया गया था)। यह "चिपचिपा" है, क्योंकि निष्पादन योग्य स्वैप में फंस गया है। इसके अलावा, इसका उपयोग निर्देशिकाओं के लिए किया गया था जैसा कि आप वर्णन करते हैं।
बार्ड कोपरुड

4
वास्तव में "ज्यादा इस्तेमाल किया या बहुत बड़ा" एक बेहतर वर्णन होगा। याद है कि मेरे कॉलेज में 1995 में अपने HP-UX कंप्यूटर पर नेटस्केप वेब-ब्राउज़र "चिपचिपा" था। इसलिए छोटे प्रोग्राम जो बहुत बार उपयोग किए जाते थे (जैसे। सिस्टम-कमांड अक्सर क्रॉन द्वारा चलाया जाता था) और बड़े प्रोग्राम (जैसे। नेटस्केप)। "चिपचिपा" बनाए जाने वाले प्रमुख उम्मीदवार थे। दोनों मामलों में, डिस्क / एनएफएस से उन्हें लगातार लोड करना बेकार होगा।
बारोप कोपरुड जू

8
स्टिकी-बिट प्रोग्राम रैम में रहने के लिए थे, स्वैप में नहीं (स्वैप फ़ाइल से एक छवि को लोड करना एक फाइलसिस्टम डिस्क से इसे लोड करने की तुलना में बहुत तेज नहीं है)। यह आवश्यक ओएस-स्तरीय कमांड जैसे के लिए था ls। जाहिर है, केवल सुपरयुजर एक फाइल पर चिपचिपा सा सेट कर सकता था। वर्चुअल मेमोरी और साझा लाइब्रेरी शुरू होने के बाद यह कम महत्वपूर्ण हो गया, और विशेष रूप से पेजर के रूप में स्मार्ट बन गए और गतिशील रूप से तय कर सकते हैं कि कौन से पेज निवासी रखना चाहते हैं।
एलेक्सिस

4
और चूंकि चिपचिपी संपत्ति को एक निर्देशिका के लिए कोई मतलब नहीं था, इसलिए अनुमतियों के एक ही बिट बाद में निर्देशिकाओं के लिए पारंपरिक फ़ाइल-निर्माण शब्दार्थ को संशोधित करने के लिए व्याख्या की गई थी ।
एलेक्सिस

5
@alexis: मूल रूप से, चिपचिपे बिट प्रोग्राम स्वैप स्पेस में रखे गए थे। यह फाइलसिस्टम से पढ़ने की तुलना में बहुत तेज था क्योंकि स्वैप फाइल इमेज पढ़ना रिग्रेसिव सेक्टर्स थे और इसलिए ज्यादातर अतुल्यकालिक रूप से पढ़े जा सकते थे। शुरुआती फाइल सिस्टम के साथ, कोई सेक्टर "रन लेंथ" नहीं थे और अधिकांश शुरुआती फाइल सिस्टम ड्राइवर एक सेक्टर को एक समय में पढ़ते थे, भले ही सेक्टर लगातार हुआ हो। एक पीडीपी -40 पर परिणाम चिपचिपा कार्यक्रम तुरंत लोड करने के लिए लग रहा था, जबकि गैर-चिपचिपा कार्यक्रमों को सामान्य रूप से दूसरा या दो लिया गया। मुझे लगता है कि हमारे पास केवल edचिपचिपा था।
18

8

"प्रोग्राम समाप्त होने के बाद मेमोरी में प्रोग्राम की एक छवि को बनाए रखने के लिए सिस्टम को फ़्लैग करने वाले निष्पादन योग्य कार्यक्रमों पर लागू चिपचिपा सा।"

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

वैसे भी, उस पुराने व्यवहार में छवि (केवल "कोड", डेटा नहीं) को केवल आभासी मेमोरी में रखा गया था-वास्तविक रूप से स्वैप किया गया था, वास्तविक मेमोरी में नहीं, ताकि अगली बार इसे तेजी से चलाने के लिए।


3

चिपचिपा बिट्स क्या हैं?

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

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


1
यह सही नहीं है: en.wikipedia.org/wiki/Sticky_bit
AB

7
@AB यह मेरे लिए बहुत सटीक लगता है, लगभग विकिपीडिया लेख की शुरुआत में आप को हवाला देते हुए। इसके साथ गलत क्या है?
रोज़ा

मैं कहूंगा कि उत्तर अपूर्ण है। "स्टिकी" यह भी दर्शाता है कि निष्पादन योग्य को स्वैप में रखा जाएगा ताकि इसे जल्दी से चलाया जा सके। अब, यह प्राचीन इतिहास है लेकिन पुराने फाइल सिस्टम में ड्राइवर एक सेक्टर को एक समय में पढ़ते थे, भले ही सेक्टर लगातार हुआ हो। इसने गैर-चिपचिपा निष्पादनयोग्य को धीमा कर दिया, चिपचिपाहट ने उस समय पूरी तरह से बना दिया।
घोस्टकोड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.