सवाल "उमास्क" क्या है और यह कैसे काम करता है?


मेरा मानना ​​है कि उमास्क कुछ ऐसा नियंत्रण करता है फ़ाइल अनुमतियां, लेकिन इसे पूरी तरह से समझ में नहीं आता है।

चलने के बाद umask 0644 में टर्मिनल, मैं कमांड लाइन पाठ संपादक के साथ बनाई गई फ़ाइलों को नहीं पढ़ सकता nano। मैंने देखा कि उस फ़ाइल की अनुमतियां सेट हैं 0022 डिफ़ॉल्ट के बजाय 0755

उमास्क कैसे काम करता है? मैंने सोचा कि मैं सिर्फ उमास्क में प्रत्येक अंक को हटा सकता हूं 0777, 7 - 6 = 1 तथा 7 - 4 = 3, इसलिए मुझे अनुमति होने की उम्मीद है 0133, लेकिन जाहिर है, यह मामला नहीं है।

  1. उमास्क बिल्कुल क्या है? मुझे यह समझाओ जैसे मैं "लिनक्स नोब" था
  2. मैं उमास्क के साथ कैसे गणना करूं?
  3. उमास्क के लिए उपयोग के मामले क्या हैं?

160
2018-05-22 20:42


मूल


app_mode 666 rw- rw- rw-  umask 644 --0 -00 -00  file_mode 022 --- -w- -w- - grabantot


जवाब:


उमास्क उन अनुमतियों के सेट के रूप में कार्य करता है जो अनुप्रयोग फ़ाइलों पर सेट नहीं हो सकते हैं। यह एक फ़ाइल मोड निर्माण मास्क के लिए है प्रक्रियाओं और निर्देशिकाओं के लिए खुद को सेट नहीं किया जा सकता है। अधिकांश एप्लिकेशन निष्पादन अनुमति सेट के साथ फ़ाइलें नहीं बनाएंगे, इसलिए उनके पास डिफ़ॉल्ट होगा 666, जिसे उमास्क द्वारा संशोधित किया जाता है।

जैसा कि आपने मालिक के लिए पढ़ने / लिखने के बिट्स को हटाने और दूसरों के लिए पढ़ने के बिट्स को हटाने के लिए उमास्क सेट किया है, एक डिफ़ॉल्ट जैसे 777 अनुप्रयोगों में फ़ाइल अनुमतियों के परिणामस्वरूप होगा 133। इसका मतलब यह होगा कि आप (और अन्य) फ़ाइल निष्पादित कर सकते हैं, और अन्य इसे लिखने में सक्षम होंगे।

यदि आप फ़ाइलों को किसी भी व्यक्ति द्वारा पढ़ा / लिखना / निष्पादित नहीं करना चाहते हैं, तो आपको एक उमास्क का उपयोग करना चाहिए 077 समूह और अन्य के लिए उन अनुमतियों को बंद करने के लिए।

इसके विपरीत, का एक उमास्क 000 नव निर्मित निर्देशिकाओं को पठनीय, लिखने योग्य और हर किसी के लिए वंशज बना देगा (अनुमतियां होगी 777)। ऐसा उमास्क बेहद असुरक्षित है और आपको कभी भी उमास्क सेट नहीं करना चाहिए 000

उबंटू पर डिफ़ॉल्ट उमास्क है 022 जिसका अर्थ है कि नव निर्मित फाइलें सभी के द्वारा पठनीय हैं, लेकिन केवल मालिक द्वारा लिखने योग्य हैं:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

उमास्क देखना और संशोधित करना

अपनी वर्तमान उमास्क सेटिंग देखने के लिए, टर्मिनल खोलें और आदेश चलाएं:

umask

वर्तमान खोल की उमास्क सेटिंग को किसी और चीज़ में बदलने के लिए, 077 कहें, चलाएं:

umask 077

यह जांचने के लिए कि क्या यह सेटिंग काम करती है या नहीं, आप एक बना सकते हैं नया फ़ाइल (मौजूदा फ़ाइल की फ़ाइल अनुमतियां प्रभावित नहीं होंगी) और फ़ाइल के बारे में जानकारी दिखाएं, चलाएं:

user@computer:~$ touch new-file-name
user@computer:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

उमास्क सेटिंग उसी शेल से शुरू की गई प्रक्रियाओं द्वारा विरासत में प्राप्त होती है। उदाहरण के लिए, निष्पादित करके टेक्स्ट एडिटर GEdit प्रारंभ करें gedit टर्मिनल में और जीएडिट का उपयोग कर फाइल को सेव करें। आप देखेंगे कि नव निर्मित फ़ाइल टर्मिनल में समान उमास्क सेटिंग से प्रभावित होती है।

केस का प्रयोग करें: बहु-उपयोगकर्ता प्रणाली

यदि आप एक ऐसे सिस्टम पर हैं जो एकाधिक उपयोगकर्ताओं द्वारा साझा किया गया है, तो यह वांछित है कि अन्य लोग आपकी होम निर्देशिका में फ़ाइलों को नहीं पढ़ सकते हैं। इसके लिए, एक उमास्क बहुत उपयोगी है। संपादित करें ~/.profile और इसके साथ एक नई लाइन जोड़ें:

umask 007

आपको इस उमास्क परिवर्तन के लिए फिर से लॉगिन करने की आवश्यकता है ~/.profile प्रभावी बनाना। इसके बाद, आपको दुनिया के लिए बिट को पढ़ने, लिखने और निष्पादित करने के द्वारा अपनी होम निर्देशिका में फ़ाइलों की मौजूदा फ़ाइल अनुमतियों को बदलने की आवश्यकता है। एक टर्मिनल खोलें और निष्पादित करें:

chmod -R o-rwx ~

यदि आप चाहते हैं कि यह उमास्क सेटिंग सिस्टम पर सभी उपयोगकर्ताओं पर लागू हो, तो आप सिस्टम-व्यापी प्रोफाइल फ़ाइल को संपादित कर सकते हैं /etc/profile


125
2018-05-22 20:59



तो, उमास्क में अंक क्या मतलब है? क्यों करता है 777 इसका मतलब है कि समूह और अन्य इसे लिखने में सक्षम होंगे, जबकि 077 मतलब वे नहीं कर सकते हैं? - HelloGoodbye
इसके अलावा, आप कहते हैं कि अगर उमास्क है 000, फ़ाइल अनुमति होगी 777। तो एक डिफ़ॉल्ट मुखौटा के साथ 022, फ़ाइल अनुमतियाँ नहीं होनी चाहिए 755, यानी इसी के अनुरूप -rwxr-xr-x, नहीं -rw-r--r--? - HelloGoodbye
स्वीकार करना चाहिए, इस स्पष्टीकरण ने मुझे मेरी मदद करने से ज्यादा भ्रमित कर दिया। - Connel Hooley
ध्यान दें उस उबंटू का डिफ़ॉल्ट उमास्क 0002 हो गया इस उत्तर पोस्ट करने के सिर्फ एक महीने बाद। - Jeff Puckett
@ हेल्लो गुडबी अगर उमास्क है 000 तो कोई अनुमति नहीं हटा दी जाएगी। जैसे अनुप्रयोग touch तथा nano डिफ़ॉल्ट रूप से फाइलें बनाएँ 666 तो फाइल अनुमति रहेगी 666 लेकिन एक उमास्क 022 समूह और अन्य के लिए लिखने के बिट्स को हटा देंगे, इसलिए 666 कम हो जाता है 644 उर्फ -rw-r--r-- विचार करें mkdir जो डिफ़ॉल्ट रूप से बना मोड 777 एक उमास्क के साथ 022 अनुमतियों को कम करेगा 755 - Jeff Puckett


स्वीकार्य उत्तर में अच्छी चर्चा के अलावा, इसके बारे में कुछ और अंक जोड़ने लायक है umask, 12.04 और उसके बाद में इसका प्रबंधन कैसे किया जाता है इसके संदर्भ में।

उमास्क और पाम_मास्क

डिफ़ॉल्ट umask अब में है /etc/login.defs और अंदर नहीं /etc/profile, आधिकारिक नोट के रूप में /etc/profile पढ़ता है:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

Pam_umask संक्षेप में नीचे समझाया गया है, और यह कहा जाना चाहिए कि उपयोगकर्ता के लिए अपनी कस्टम उमास्क सेटिंग रखने के लिए डिफ़ॉल्ट फ़ाइल अभी भी है ~/.profile

Pam_umask कई महत्वपूर्ण में से एक है पीएएम मॉड्यूल उबंटू के ऑपरेशन में महत्वपूर्ण हैं (रन apropos '^pam_' अन्य लोगों के लिए मैनपेज ढूंढने के लिए)। में मैनपेज के लिये pam_umask यह उल्लेखनीय है कि

pam_umask वर्तमान वातावरण के फ़ाइल मोड निर्माण मास्क को सेट करने के लिए एक PAM मॉड्यूल है। उमास्क प्रभावित करता है          नई बनाई गई फ़ाइलों को आवंटित डिफ़ॉल्ट अनुमतियां।

डिफ़ॉल्ट उमास्क पर एक नोट

में नए फ़ोल्डर्स $HOME द्वारा बनाया जा सकता है mkdir डिफ़ॉल्ट 775 अनुमतियों और फ़ाइलों के साथ बनाया गया है touch डिफ़ॉल्ट umask 022 होने पर भी डिफ़ॉल्ट 664 अनुमतियों के साथ। ऐसा लगता है कि, पहले, विरोधाभासी, और समझाया जा सकता है।

जबकि उबुंटू पर डिफ़ॉल्ट उमास्क 022 है, यह पूरी कहानी नहीं है, क्योंकि इसमें एक सेटिंग है /etc/login.defs यदि कोई शर्त पूरी हो जाती है (नीचे उद्धरण देखें) तो उमस्क गैर रूट उपयोगकर्ताओं के लिए 002 होने की अनुमति देता है। एक सामान्य स्थापना पर, /etc/login.defs सेटिंग है USERGROUPS_ENAB yes। यह क्या है

उमास्क समूह बिट्स की सेटिंग को मालिक बिट्स के समान होने में सक्षम बनाता है    (उदाहरण: 022 -> 002, 077 -> 007) गैर-मूल उपयोगकर्ताओं के लिए, यदि यूआईडी है    ग्रिड के समान, और उपयोगकर्ता नाम प्राथमिक समूह नाम के समान है।

तो आप निम्नलिखित के साथ क्यों देखते हैं stat जब एक नया फ़ोल्डर बनाया गया है mkdir एक उपयोगकर्ता प्रणाली जैसे मेरा (यूआईडी और ग्रिड एक ही हैं):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

अधिक जानकारी के लिए देखें man pam_umask और यह उबंटू ऑनलाइन हस्तक्षेप


35
2018-04-02 00:16



ऐसा लगता है कि आपके दूसरे भाग में कुछ याद आ रहा है? (USERGROUP_ENABLE?) अद्यतन जानकारी के लिए +1 - Lekensteyn
@Lekensteyn आश्चर्यजनक रूप से पर्याप्त, सेटिंग में /etc/login.defs निश्चित रूप से है USERGROUPS_ENAB yes इसे जांचने के बाद। उस फ़ाइल का वाक्यविन्यास थोड़ा असामान्य है।
मैंने अभी फ़ाइल और स्रोत की जांच की है और आप सही हैं, यह (और कुछ अन्य) सेटिंग्स भ्रमित रूप से "_ENAB" नामित हैं। - Lekensteyn


यह बहुत पुराना है, लेकिन यह उल्लेख करने लायक है। फ़ाइल सिस्टम अनुमतियों के विपरीत, उमास्क के लिए गणना करने के लिए। ऑक्टल umasks bitwise के माध्यम से बिटवाई के माध्यम से और तर्क के असीमित पूरक के माध्यम से गणना की जाती है। अंडाकार नोटेशन निम्नानुसार हैं:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

फिर आप umask उचित प्रीमियर सेट करने के लिए गणना कर सकते हैं जैसे:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

फ़ाइलों के लिए अंतिम अनुमति की गणना

फ़ाइल के लिए अंतिम अनुमति निर्धारित करने के लिए आप बस अनुमतियों से उमास्क घटा सकते हैं:

666 – 022 = 644
  • फ़ाइल आधार अनुमतियां: 666
  • उमास्क मूल्य: 022
  • नई फाइल की अनुमति प्राप्त करने के लिए घटाएं (666-022) : 644 (rw-r–r–)

निर्देशिकाओं के लिए अंतिम अनुमति की गणना

निर्देशिका के लिए अंतिम अनुमति निर्धारित करने के लिए आप बेस अनुमतियों से उमास्क को घटा सकते हैं:

777 – 022 = 755
  • निर्देशिका आधार अनुमतियां: 777
  • उमास्क मूल्य: 022
  • नई निर्देशिका की अनुमति प्राप्त करने के लिए घटाना (777-022) : 755 (rwxr-xr-x)

30
2018-04-06 08:27



मुझे नहीं लगता कि अंतिम अनुमतियों की गणना कैसे की जाती है, अगर अनमास्क मान है तो क्या होगा 077 आप कैसे घटाएंगे 666-077 उस स्तिथि में ? - Sufiyan Ghori
@ सुफियान गोरी बैरन की व्याख्या फाइल अनुमति के लिए पूरी नहीं है। आपके मामले और किसी भी भविष्य की गणना में, याद रखने के लिए, आपको इस तरह से घटाने के लिए ध्यान में रखना चाहिए: 6-0 6-7 6-7 यदि उन तीनों का कोई परिणाम -1 है तो इसे 0 होना चाहिए। इसलिए हम अंतिम परिणाम 600 है - Huy.PhamNhu
@ हू.फम्हू यह भी सही नहीं है। 666 की बेस अनुमति और 033 के उमास्क के साथ आपको निश्चित रूप से 633 आउट नहीं मिलेगा। - maaartinus
नहीं नहीं नहीं। आप उमास्क की गणना करने के लिए घटाव का उपयोग नहीं कर सकते (यह कुछ मूल्यों के साथ काम करता है, लेकिन सभी नहीं)। आपको उमास्क को "अक्षम बिट्स" के रूप में सोचना होगा। सुफियान और विस्बकी द्वारा अन्य उत्तरों देखें। - wisbucky


अन्य ने उत्तर दिया है कि उमास्किंग की अवधारणा वास्तव में अच्छी तरह से समझाई गई है और इसकी आवश्यकता क्यों है। मुझे अपना दो प्रतिशत जोड़ने दें और आपको गणितीय उदाहरण दें कि वास्तव में अनुमतियों की गणना कैसे की जाती है।

सबसे पहले, "मास्क" का मतलब अंकगणितीय अर्थ में "घटाना" नहीं है - इसमें कोई उधार नहीं है या इसमें शामिल नहीं है, दूसरा, umask एक मुखौटा है; यह घटाने की संख्या नहीं है।

तीसरा, मास्क अनुमति बिट्स बंद कर देता है। अगर वे पहले से ही बंद हैं, तो umask अनुमति में कोई बदलाव नहीं करता है,

उदाहरण के लिए, मान लीजिए कि आपको अनमास्क करना है 077 फाइलों के लिए सिस्टम डिफ़ॉल्ट से है 666 और निर्देशिका है जो है 777

आप जिस आदेश का उपयोग करेंगे, वह है,

umask 077

(बाइनरी में मूल्य अनमास्क करें, 000 111 111)

यह अनमास्क क्या करेगा यह है कि यह पहले छह एलएसबी (कम से कम महत्वपूर्ण बिट्स) में से किसी एक को बंद कर देगा यदि वे हैं 1 और उनमें से कोई भी पहले से बंद होने पर कोई बदलाव नहीं करेगा।

यहां बताया गया है कि अंतिम अनुमति की गणना कैसे की जाती है:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

निरीक्षण करें कि दोनों कैसे 110 मूल्य बदल गए हैं 000

इसी तरह,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000

24
2018-06-05 14:09



यह जवाब होना चाहिए! - Abdelouahab
@ सुफियान गोरी तो अगर umask 177 (001 111 111), यदि वे हैं तो यह पहले 7 कम महत्वपूर्ण बिट्स को बंद कर देगा 1 - Kasun Siyambalapitiya
यह सही @ कसुन सिंबलपतिया है - Sufiyan Ghori


मूल अवधारणा:

यदि आप ज्यादातर इंसानों की तरह हैं और समझ में नहीं आता कि बिल्ली क्या है "ऑक्टल उमास्क की गणना बिटवाई के माध्यम से और बिटवाई के उपयोग से तर्क के असीमित पूरक के माध्यम से की जाती है" मतलब, यहां मेरा सरल स्पष्टीकरण है:

सबसे पहले, "मुखौटा" क्या है इसके बारे में सोचें। एक मुखौटा कुछ ब्लॉक करता है। मास्किंग टेप के बारे में सोचो। इस मामले में, umask नई फ़ाइल या डीआईआर बनाते समय अनुमतियों को ब्लॉक / अक्षम करने के लिए मास्किंग टेप की तरह है।

एक नया डीआईआर बनाते समय डिफ़ॉल्ट अनुमतियां होती हैं octal 777 (111 111 111), और एक नई फाइल है octal 666 (110 110 110)। हमने कुछ अनुमतियों को ब्लॉक / अक्षम करने के लिए उमास्क सेट किया है।

  • का एक मुखौटा बिट 1 उस अनुमति को ब्लॉक / अक्षम करने का मतलब है (उस बिट पर मास्किंग टेप डालें)।
  • का एक मुखौटा बिट 0 अनुमति को पार करने की अनुमति देगा (उस बिट पर कोई मास्किंग टेप नहीं)।

तो ए octal 022 (000 010 010) मास्क अक्षम करने का मतलब है group write तथा others write, और अन्य सभी अनुमतियों को पारित करने की अनुमति दें।

गणना:

022 उमास्क के साथ एक नई फ़ाइल (डिफ़ॉल्ट 666 अनुमति) के लिए एक उदाहरण गणना यहां दी गई है:

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

तो जब आप एक नई फाइल बनाते हैं तो 644 के परिणाम के साथ आप समाप्त होते हैं।

आसान तरीका:

लेकिन यदि उलटा मुखौटा गणना सिर्फ आपको भ्रमित करती है, तो प्रतीकात्मक उमास्क नोटेशन का उपयोग करने का एक आसान तरीका है। जब आप इस विधि का उपयोग करते हैं, तो आप केवल मुखौटा बिट्स के बजाय पास-थ्रू बिट्स निर्दिष्ट कर रहे हैं।

  • umask u=rwx,g=rx,o=rx मतलब के माध्यम से गुजरने की अनुमति है user rwx, group rx, other rx। जो अक्षम का तात्पर्य है group w, others w। यदि आप यह आदेश चलाते हैं तो जांचें umask, तुम्हे मिल जाएगा 022
  • umask u=rwx,g=,o= मतलब के माध्यम से गुजरने की अनुमति है user rwx। जिसका अर्थ है कि सभी पहुंच अक्षम करें group तथा others। यदि आप यह आदेश चलाते हैं तो जांचें umask, तुम्हे मिल जाएगा 077

बोनस गणना:

यदि आप वास्तव में क्या समझना चाहते हैं "ऑक्टल उमास्क की गणना बिटवाई के माध्यम से और बिटवाई के उपयोग से तर्क के असीमित पूरक के माध्यम से की जाती है" मतलब, यहां कुछ तर्क सारणी हैं जो प्रदर्शन में मदद कर सकती हैं। याद रखें, एक मुखौटा बिट 1 मतलब अक्षम है, 0 माध्यम से गुजरना मतलब है।

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

यदि आप टेबल बनाते हैं NOT(mask), अब यह सिर्फ एक साधारण है AND तर्क तालिका!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

तो इसके लिए सूत्र है: result = perm AND (NOT mask)


9
2018-04-03 22:30