ओनर, ग्रुप और अन्य के लिए रीड, राइट और एक्ज़ीक्यूट टिक करें ताकि ऑक्टल chmod नंबर, सिंबॉलिक rwx स्ट्रिंग और एक कमांड मिले जिसे आप सीधे टर्मिनल में पेस्ट कर सकें।
बॉक्स टिक करें नंबर पाने के लिए, या नंबर टाइप करें और देखें कि यह वास्तव में क्या अनुमति देता है। अनुमतियाँ तीन दर्शकों पर लागू होती हैं - फाइल ओनर, ओनिंग ग्रुप, और बाकी सभी - और हर दर्शक को रीड, राइट और एक्ज़ीक्यूट स्वतंत्र रूप से मिलते हैं। ग्रिड टॉगल करें या एक ऑक्टल मान टाइप करें; दोनों सिंक में रहते हैं।
कौन
रीड (4)
राइट (2)
एक्ज़ीक्यूट (1)
ओनर (u)
ग्रुप (g)
अन्य (o)
–
Unix अनुमति बिट्स पढ़ना और लिखना
तीन त्रिकोण, प्रत्येक तीन बिट्स
हर Unix फाइल में नौ अनुमति बिट्स होते हैं जो तीन समूहों (त्रिकोणों) में व्यवस्थित होते हैं, प्रत्येक
तीन का। पहला त्रिकोण फाइल ओनर का है, दूसरा फाइल के ग्रुप का, और तीसरा सिस्टम पर बाकी सभी का। हर
त्रिकोण के भीतर बिट्स का मतलब रीड, राइट और एक्ज़ीक्यूट है, और वे क्रमशः 4, 2 और 1 के बराबर हैं।
जिन बिट्स को आप चाहते हैं उनके मान जोड़ने से 0 से 7 तक एक अंक बनता है, जिसी वजह से अनुमतियाँ
परंपरागत रूप से तीन ऑक्टल अंकों के रूप में लिखी जाती हैं।
यही 755 जैसे नंबर के पीछे की पूरी चाल है। ओनर अंक 7 है, यानी 4 + 2 + 1, इसलिए ओनर रीड, राइट और
एक्ज़ीक्यूट कर सकता है। ग्रुप और अन्य दोनों अंक 5 हैं, यानी 4 + 1, इसलिए वे रीड और एक्ज़ीक्यूट कर सकते
हैं लेकिन संशोधित नहीं। सिंबॉलिक रूप में वही मान rwxr-xr-x पढ़ता है, जो ठीक वही है जो ls -l
अग्रणी फाइल-प्रकार वर्ण के बाद प्रिंट करता है।
तीन क्रियाएँ एक निर्देशिका (डायरेक्टरी) पर थोड़ा अलग मतलब रखती हैं। रीड आपको उसके भीतर के नाम
सूचीबद्ध करने देती है, राइट आपको प्रविष्टियाँ बनाने और हटाने देती है, और एक्ज़ीक्यूट आपको उसमें प्रवेश
करने देती है ताकि आप कोई ज्ञात पथ पहुँच सकें। रीड लेकिन बिना एक्ज़ीक्यूट वाली निर्देशिका लगभग बेकार है:
आप नाम तो देख सकते हैं लेकिन उनके पीछे कुछ भी नहीं खोल सकते।
वे मान जो आप वास्तव में टाइप करेंगे
कुछ ही संयोजन अधिकांश वास्तविक काम को कवर करते हैं। 644 (rw-r--r--) किसी दस्तावेज़ या स्रोत फाइल का
सामान्य मोड है: ओनर इसे संपादित करता है, बाकी सभी इसे पढ़ते हैं। 755 (rwxr-xr-x) किसी निर्देशिका या
एक्ज़ीक्यूटेबल स्क्रिप्ट का सामान्य मोड है, क्योंकि दोनों के उपयोग के लिए एक्ज़ीक्यूट बिट ज़रूरी है।
600 (rw-------) फाइल को केवल उसके ओनर के लिए निजी रखता है, जो OpenSSH निजी कुंजियों के लिए ज़िद करता
है, और 700 वही एक निर्देशिका के लिए करता है।
ऐसे मोड जो दूसरों को राइट अनुमति देते हैं, उन पर दोबारा विचार करने लायक हैं। 777 मशीन पर हर खाते को
फाइल को अधिलिखित या हटाने देता है, और यह लगभग कभी सही उत्तर नहीं है - यह बस बिना समझे अनुमति त्रुटि
को गायब करने का सबसे तेज़ तरीका है। जब कोई वेब सर्वर अपलोड निर्देशिका में लिख नहीं पाता, तो असली
सुधार आमतौर पर chown के साथ ओनिंग उपयोगकर्ता या ग्रुप को बदलना है, न कि फाइल को दुनिया के लिए खोलना।
अनुमतियाँ umask के साथ भी जुड़ती हैं। नई फाइलें एक डिफ़ॉल्ट मोड के साथ बनती हैं जो umask मान (आमतौर
पर 022) से घटा दी जाती हैं, जिसी वजह से नई बनी फाइल 666 के बजाय 644 के रूप में आती है।
Setuid, setgid और स्टिकी बिट
एक चौथा अंक उन तीन परिचितों के सामने बैठ सकता है, और इसमें तीन विशेष बिट्स होते हैं: setuid (4),
setgid (2), और स्टिकी बिट (1)। वे बदलते हैं कि कोई प्रोग्राम किसके रूप में चलता है और कोई निर्देशिका
उसके भीतर बनी फाइलों को कैसे मानती है।
एक्ज़ीक्यूटेबल पर Setuid इसे फाइल ओनर के विशेषाधिकारों के साथ चलाता है, न कि उस उपयोगकर्ता के जिसने
इसे लॉन्च किया। यही वजह है कि passwd कोई सिस्टम-व्यापी फाइल अपडेट कर सकता है जबकि एक गैर-विशेषाधिकार
उपयोगकर्ता इसे चलाता है, और यही वजह है कि setuid बाइनरीज़ का इतना सावधानीपूर्वक ऑडिट किया जाता है - उनमें
से एक में एक बग ओनर के विशेषाधिकारों तक सीधा रास्ता है। Setgid ग्रुप के लिए वही करता है। एक निर्देशिका
पर, setgid का एक अधिक मित्रवत अर्थ है: उसके भीतर बनी नई फाइलें निर्देशिका के ग्रुप को विरासत में पाती
हैं, जो एक साझा प्रोजेक्ट फोल्डर को चाहे कोई भी लिखे सुसंगत रखता है।
स्टिकी बिट सबसे परिचित /tmp पर है, आमतौर पर 1777 लिखा जाता है। यह किसी को भी निर्देशिका में फाइलें
बनाने देता है जबकि हटाने का प्रतिबंध प्रत्येक फाइल के अपने ओनर तक सीमित करता है, ताकि उपयोगकर्ता एक-दूसरे
की अस्थायी फाइलें न हटा सकें। एक लंबी सूची में ये बिट्स एक्ज़ीक्यूट वर्ण को प्रतिस्थापित करते हैं: x की
जगह s का मतलब setuid या setgid सेट है, बड़ा S का मतलब बिट सेट है लेकिन एक्ज़ीक्यूट नहीं, और t
स्टिकी बिट को चिह्नित करता है।
FAQ
755 का सटीक मतलब क्या है?
ओनर रीड, राइट और एक्ज़ीक्यूट कर सकता है; ग्रुप और बाकी सभी रीड और एक्ज़ीक्यूट कर सकते हैं लेकिन संशोधित नहीं। यह निर्देशिकाओं और उन स्क्रिप्ट्स के लिए सामान्य मोड है जिन्हें अन्य उपयोगकर्ताओं द्वारा चलाया जाना चाहिए।
मेरी स्क्रिप्ट पढ़ी जा सकती है लेकिन अनुमति अस्वीकृत कहती है। क्यों?
किसी फाइल को पढ़ना और उसे चलाना अलग-अलग बिट्स हैं। किसी स्क्रिप्ट को उस उपयोगकर्ता के लिए एक्ज़ीक्यूट बिट चाहिए जो इसे चलाने की कोशिश कर रहा है, इसलिए 644 पर्याप्त नहीं है - 755 का उपयोग करें, या इसे स्पष्ट रूप से उसके इंटरप्रेटर के माध्यम से चलाएँ।
क्या 777 कभी सही विकल्प है?
साझा या इंटरनेट-सामने वाली मशीन पर लगभग कभी नहीं, क्योंकि यह किसी भी स्थानीय खाते को फाइल को अधिलिखित या हटाने देता है। यदि कोई सेवा कहीं लिख नहीं पाती, तो मोड को चौड़ा करने के बजाय ओनर या ग्रुप बदलें।
644 और 0644 में क्या अंतर है?
नौ मानक बिट्स के लिए कुछ नहीं। अग्रणी शून्य विशेष-बिट्स का अंक है और इसे 0 पर सेट करने से setuid, setgid और स्टिकी बिट साफ़ हो जाते हैं। कई लोग चार अंक आदत से लिखते हैं।
SSH मेरी निजी कुंजी उपयोग करने से इनकार क्यों करता है?
OpenSSH वह निजी कुंजी अस्वीकार कर देता है जिसे अन्य उपयोगकर्ता पढ़ सकते हैं। कुंजी को 600 और उसकी .ssh निर्देशिका को 700 पर सेट करें, और चेतावनी चली जाती है।
क्या chmod macOS और Linux पर समान व्यवहार करता है?
संख्यात्मक मोड समान हैं। अंतर एक्सटेंडेड एट्रिब्यूट्स और ACLs के आसपास दिखते हैं, जिन्हें macOS अनुमति स्ट्रिंग के बाद एक `+` के साथ रिपोर्ट करता है और जिन्हें अकेले chmod प्रबंधित नहीं करता।