"ओमस्क" क्या है और यह कैसे काम करता है?


190

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

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

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

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

app_mode 666 rw- rw- rw- umask 644 --0 -00 -00 file_mode 022 --- -w- -w-
२०:०२

जवाबों:


143

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

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

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

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

उबंटू पर डिफ़ॉल्ट umask था 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

उबंटू वनरिक (11.10) में शुरू होने वाले डिफ़ॉल्ट umask को शिथिल कर दिया गया 002, जो मालिक के समूह को लिखने-पहुंच का विस्तार करता है:

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

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

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

umask

वर्तमान शेल के 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 शुरू करें और gedit का उपयोग करके एक फ़ाइल सहेजें। आप देखेंगे कि नई बनाई गई फ़ाइल टर्मिनल में उसी umask सेटिंग से प्रभावित है।

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

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

umask 007

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

chmod -R o-rwx ~

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


3
तो, ओमास्क में अंकों का क्या मतलब है? इसका 777मतलब यह क्यों है कि समूह और अन्य इसे लिख पाएंगे, जबकि 077इसका मतलब यह नहीं हो सकता है?
हैलोगूडबी

3
इसके अलावा, आप कहते हैं कि यदि umask है 000, तो फ़ाइल अनुमति होगी 777। तो एक डिफ़ॉल्ट मुखौटा के साथ 022, फ़ाइल की अनुमति नहीं होनी चाहिए 755, अर्थात के अनुरूप -rwxr-xr-x, नहीं -rw-r--r--?
हैलोगूडीबाई

12
स्वीकार करना चाहिए, इस स्पष्टीकरण ने मुझे इससे अधिक भ्रमित किया, इससे मुझे मदद मिली।
कोनेल हूले

8
ध्यान दें कि इस जवाब के पोस्ट होने के एक महीने बाद ही उबंटू का डिफॉल्ट उमस्क 0002 में बदल गया।
जेफ पकेट ने

7
@HelloGoodbye अगर umask है 000तो कोई अनुमतियाँ नहीं निकाली जाएंगी। ऐप्स पसंद करते हैं touchऔर nanoडिफ़ॉल्ट रूप से फ़ाइलें बनाते हैं, 666इसलिए फ़ाइल अनुमति बनी रहेगी, 666लेकिन 022समूह और अन्य लोगों के लिए लेखन बिट्स हटा देगा, इसलिए aka के 666लिए कम हो जाता है पर विचार करें कि डिफ़ॉल्ट रूप से umask के साथ मोड बनाने के लिए अनुमतियों को कम करेगा644-rw-r--r--mkdir777022755
Jeff Puckett

38

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

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

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

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

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

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

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

डिफ़ॉल्ट umask पर एक नोट

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

जबकि उबंटू पर डिफ़ॉल्ट umask 022 है, यह पूरी कहानी नहीं है, क्योंकि इसमें एक सेटिंग है /etc/login.defsकि यदि कोई शर्त पूरी होती है तो umask गैर-रूट उपयोगकर्ताओं के लिए 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और उबंटू ऑनलाइन का प्रबंधन करता है


ऐसा लगता है कि आपका दूसरा भाग कुछ याद कर रहा है? (USERGROUP_ENABLE?) अपडेट की गई जानकारी के लिए +1
Lekensteyn

2
@Lekensteyn काफी अजीब, सेटिंग में /etc/login.defsनिश्चित रूप से USERGROUPS_ENAB yesयह जाँच के बाद है। उस फ़ाइल का सिंटैक्स थोड़ा असामान्य है।

मैंने सिर्फ फ़ाइल और स्रोत की जाँच की और आप सही हैं, यह (और कुछ अन्य) सेटिंग्स को भ्रमवश "_ENAB" नाम दिया गया है।
लेकेनस्टाइन

33

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

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

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

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

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

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

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

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

3
मुझे नहीं लगता कि अंतिम परमिटों की गणना कैसे की जाती है, अगर अनमास्क मूल्य क्या है तो 077आप 666-077उस मामले में कैसे घटाएंगे ?
सूफियान घोरी

5
@ सूफियानगोरी बैरन की व्याख्या फाइलों की अनुमति के लिए पूरी नहीं है। आपके मामले में और किसी भी भविष्य की गणना के लिए, याद रखने में आसान के लिए, आपको उन्हें इस तरह से घटाना ध्यान में रखना चाहिए: 6-0 6-7 6-7 यदि उन तीनों में से कोई भी परिणाम -1 है तो इसे 0. होने दें। अंतिम परिणाम 600
Huy.PhamNhu

1
@ Huy.PhamNhu यह भी सही नहीं है। 666 की आधार अनुमति और 033 के umask के साथ आप निश्चित रूप से 633 नहीं निकालेंगे।
Maaartinus

7
नहीं नहीं नहीं। आप umask की गणना करने के लिए घटाव का उपयोग नहीं कर सकते हैं (यह कुछ मूल्यों के साथ काम करता है, लेकिन सभी नहीं)। आपको ऑमस्क को "अक्षम बिट्स" के रूप में सोचना होगा। सूफियान और विस्बकी द्वारा अन्य जवाब देखें।
बुद्धिमत्ता

33

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

सबसे पहले, "मास्क" का अर्थ "घटाना" नहीं है, अंकगणित अर्थ में - इसमें कोई उधार या कैरी नहीं है, दूसरी बात, 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

7
इसका उत्तर होना चाहिए!
अब्देलउहाब

@ सूफियानगोरी यदि umask 177(००१ १११ १११), तो यह पहले significant कम से कम महत्वपूर्ण बिट्स को बंद कर देगा यदि वे हैं1
कसुन सियामबलपिटिया २०'१ '

यह सही है @KasunSiyambalapitiya
सूफियान गोरी

1
तो सूत्र हैresult = file permission & (!umask)
एरिक हॉजिंस

1
@ एरिकहॉडगिन: हाँ, बिल्कुल।
अमित नायडू

14

मूल अवधारणा:

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

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

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

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

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

गणना:

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

  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 संकेतन का उपयोग करने का एक आसान तरीका है। जब आप इस विधि का उपयोग करते हैं, तो आप केवल मुखौटा बिट्स के बजाय पास-थ्रू बिट्स निर्दिष्ट कर रहे हैं।

  • 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)

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