سؤال ما هو "umask" وكيف يعمل؟


أعتقد أن umask هو الشيء الذي يتحكم أذونات الملف، لكن لا نفهمها تمامًا.

بعد تشغيل umask 0644 في طرفية، لا أستطيع قراءة الملفات التي قمت بإنشائها باستخدام محرر نصوص سطر الأوامر nano. لقد لاحظت أن أذونات هذا الملف مضبوطة على 0022 بدلا من الافتراضي 0755.

كيف يعمل umask؟ اعتقدت أنني يمكن فقط إزالة كل رقم في umask من 0777، 7 - 6 = 1 و 7 - 4 = 3، لذلك أتوقع أن تكون الأذونات 0133، ولكن على ما يبدو ، هذا ليس هو الحال.

  1. ما هو umask بالضبط؟ اشرح لي كما لو كنت "noob Linux"
  2. كيف أحسب مع umask؟
  3. ما هي حالات الاستخدام ل umask؟

160
2018-05-22 20:42


الأصل


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


الأجوبة:


يعمل umask كمجموعة من الأذونات التي لا يمكن تعيين التطبيقات على الملفات. إنه قناع إنشاء وضع ملف لـ العمليات ولا يمكن تعيينها للأدلة نفسها. لن تقوم معظم التطبيقات بإنشاء ملفات مع تعيين أذونات التنفيذ ، بحيث يكون لها افتراضيًا 666، والتي يتم تعديلها بعد ذلك بواسطة umask.

أثناء تعيين umask لإزالة بتات القراءة / الكتابة للمالك وبتات القراءة للآخرين ، يكون الإعداد الافتراضي مثل 777 في التطبيقات قد ينتج عنه أذونات الملفات 133. هذا يعني أنه يمكنك (والآخرين) تنفيذ الملف ، وسيتمكن آخرون من الكتابة إليه.

إذا كنت ترغب في جعل الملفات لا تقرأ / تكتب / تنفذ من قبل أي شخص سوى المالك ، يجب عليك استخدام umask مثل 077 لإيقاف هذه الأذونات للمجموعة وغيرها.

في المقابل ، 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

عرض وتعديل umask

لعرض إعداد 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

يتم توارث إعداد umask بواسطة عمليات تم البدء بها من نفس shell. على سبيل المثال ، ابدأ محرر النص GEdit من خلال التنفيذ gedit في المحطة وحفظ ملف باستخدام gedit. ستلاحظ أن الملف الذي تم إنشاؤه حديثًا يتأثر بنفس إعدادات umask الموجودة في الجهاز.

حالة الاستخدام: نظام متعدد المستخدمين

إذا كنت تستخدم نظامًا مشتركًا مع مستخدمين متعددين ، فمن المستحسن ألا يتمكن الآخرون من قراءة الملفات في الدليل الرئيسي. لذلك ، فإن umask مفيد جدا. تصحيح ~/.profile وإضافة خط جديد مع:

umask 007

يجب إعادة تسجيل الدخول لتغيير هذا الرمز في ~/.profile نافذة المفعول. بعد ذلك ، تحتاج إلى تغيير أذونات الملفات الموجودة للملفات في الدليل الرئيسي الخاص بك عن طريق إزالة القراءة والكتابة والتنفيذ للعالم. افتح محطة وتنفيذ:

chmod -R o-rwx ~

إذا كنت تريد تطبيق إعداد umask على جميع المستخدمين على النظام ، فيمكنك تحرير ملف التوصيف على مستوى النظام على /etc/profile.


125
2018-05-22 20:59



إذن ، ماذا تعني الأرقام في umask؟ لماذا 777 يعني أن المجموعة وغيرهم سيكونون قادرين على الكتابة إليها ، بينما 077 يعني انهم لا يستطيعون؟ - HelloGoodbye
أيضا ، أنت تقول أنه إذا كانت umask 000، سيكون إذن الملف 777. لذلك مع قناع افتراضي من 022، لا ينبغي أن يكون أذونات الملف 755، على سبيل المثال -rwxr-xr-x، ليس -rw-r--r--؟ - HelloGoodbye
يجب أن أعترف ، هذا التفسير أربكني أكثر مما ساعدني. - Connel Hooley
ملحوظة أن تغيرت umubbu الافتراضي umask إلى 0002 بعد شهر واحد فقط من نشر هذه الإجابة. - Jeff Puckett
HelloGoodbye إذا كانت umask 000 ثم سيتم إزالة أي أذونات. تطبيقات مثل touch و nano إنشاء ملفات مع الافتراضي 666 لذا سيبقى إذن الملف 666 لكن umask من 022 سيزيل بتات الكتابة للمجموعة وغيرها ، لذلك 666 يحصل على خفض ل 644 الملقب -rw-r--r-- يعتبر mkdir ما الافتراضية التي تخلق وضع 777 مع umask من 022 سوف يقلل من أذونات ل 755 - Jeff Puckett


بالإضافة إلى المناقشة الجيدة في الإجابة المقبولة ، من الجدير إضافة بعض النقاط حول umask، مع الإشارة إلى كيفية إدارتها في 12.04 فصاعدًا.

اوماسك و pam_umask

الافتراضي 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 هو موضح بإيجاز أدناه ، وينبغي أن يقال أن الملف الافتراضي للمستخدم لوضع إعداد umask المخصصة في لا يزال ~/.profile.

Pam_umask هي واحدة من العديد من المهمات وحدات PAM التي تعتبر حاسمة في تشغيل أوبونتو (تشغيل apropos '^pam_' للعثور على manpages للآخرين). في ال manpage إلى عن على pam_umask لوحظ أن

pam_umask عبارة عن وحدة PAM لتعيين قناع إنشاء وضع الملف للبيئة الحالية. ويؤثر umask على          الأذونات الافتراضية المخصصة للملفات التي تم إنشاؤها حديثًا.

ملاحظة على umask الافتراضي

مجلدات جديدة في $HOME يمكن إنشاؤها بواسطة mkdir مع أذونات 775 الافتراضية والملفات التي تم إنشاؤها باستخدام touch مع الافتراضي 664 أذونات حتى عندما يكون umask الافتراضي هو 022. وهذا يبدو ، في البداية ، متناقضة ، ويستحق الشرح.

في حين أن umask الافتراضي هو 022 على أوبونتو ، هذه ليست القصة بأكملها ، حيث يوجد إعداد في /etc/login.defs التي تسمح لل umask أن يكون 002 للمستخدمين غير الجذر إذا تم استيفاء شرط (انظر مقتطفات أدناه). على التثبيت العادي ، /etc/login.defs يحتوي على الإعداد USERGROUPS_ENAB yes. هذا هو ما

تُمكّن إعداد بتات المجموعة umask لتكون مماثلة لبتات المالك    (أمثلة: 022 -> 002 ، 077 -> 007) للمستخدمين غير الجذر ، إذا كان uid    نفس gid ، واسم المستخدم هو نفس اسم المجموعة الأساسي.

ولهذا السبب ترى ما يلي مع stat عندما يتم إنشاء مجلد جديد mkdir على نظام مستخدم واحد مثل الألغام (uid و gid هي نفسها):

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

لمزيد من المعلومات، راجع man pam_umask و ال Ubuntu manpages online.


35
2018-04-02 00:16



يبدو أن الجزء الثاني الخاص بك هو شيء مفقود؟ (USERGROUP_ENABLE؟) +1 للحصول على معلومات محدثة - Lekensteyn
Lekensteyn الغريب ، الإعداد في /etc/login.defs هو بالتأكيد USERGROUPS_ENAB yes بعد التحقق من ذلك. بناء جملة هذا الملف غير معتاد قليلاً.
لقد تحققت للتو من الملف والمصدر وكنت على حق ، هذه الإعدادات (وبعضها الآخر) تسمى "_ENAB". - Lekensteyn


هذا قديم جدا ، ولكن هذا الجدير بالذكر. لحساب umask ، على عكس أذونات نظام الملفات. يتم حساب الأوقيانوغال الثمانية عن طريق البايتة و من مكملة الحجة الأحادية باستخدام NOT. التدوينات الثمانية هي كما يلي:

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

ثم يمكنك حساب لتعيين premask المناسبة مثل:

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

30
2018-04-06 08:27



لا أعتقد أن هذا هو كيفية حساب permissons النهائي ، ماذا لو كانت قيمة قناع 077 كيف ستطرح 666-077 في هذه الحالة ؟ - Sufiyan Ghori
@ تفسير SuufiyanGhori بارون ليست كاملة للحصول على إذن الملفات. في حالتك وأي حسابات مستقبلية ، لسهولة التذكر ، يجب أن تضع في ذهنك لطرحها بهذه الطريقة: 6-0 6-7 6-7 إذا كانت أي نتيجة لتلك الثلاثة هي -1 ثم اتركها تكون 0. لذلك نحن يكون النتيجة النهائية 600 - Huy.PhamNhu
@ Huy.PhamNhu هذا غير صحيح سواء. بإذن أساس من 666 و umask من 033 أنت بالتأكيد لن تحصل على 633. - maaartinus
لا لا لا. لا يمكنك استخدام الطرح لحساب umask (يعمل مع قيم معينة ، ولكن ليس كل). عليك أن تفكر في umask باسم "تعطيل بت". انظر الإجابات الأخرى من قبل Sufiyan و Wisbucky. - wisbucky


وقد اجاب آخرون الاجابه بشكل جيد حقا مفهوم umasking ولماذا هو مطلوب. اسمحوا لي أن أضيف سنتي وأعطيك مثال رياضي على كيفية حساب الأذونات بالفعل.

بادئ ذي بدء ، لا يعني "قناع" "طرح" ، بالمعنى الحسابي - لا يوجد اقتراض أو تحمل المشاركة ، وثانيا ، umask هو قناع ليس رقمًا مطروحًا.

ثالثًا ، يقوم القناع بإيقاف بتات الإذن. إذا كانوا بالفعل خارج ، فإن umask لا يغير في الإذن ،

على سبيل المثال ، افترض أنه يجب عليك كشف 077 من افتراضيات النظام للملفات التي هي 666 والدلائل التي هي 777.

الأمر الذي ستستخدمه هو ،

umask 077

(قيمة قناع في ثنائي ، 000 111 111)

ما ستفعله هذه المقنعة هو أنها ستوقف تشغيل أي من أول LSBs الستة (الأجزاء الأقل أهمية) إذا كانت 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
SufiyanGhori حتى إذا umask 177 (001 111 111) ، فإنه سيتم إيقاف البت 7 الأقل الهامة إذا كانت 1 - Kasun Siyambalapitiya
هذا صحيحKasunSiyambalapitiya - Sufiyan Ghori


مبدأ اساسي:

إذا كنت مثل معظم البشر ولا تفهم ما هيك "تُحسب الأوقيانوغتان الثمانية عن طريق البتات" و "التوحيد الأحادي للحجة باستخدام" "bitwise NOT" يعني ، هنا شرحي البسيط:

بادئ ذي بدء ، فكر في ما هو "قناع". قناع كتل شيء ما. فكر في إخفاء الشريط. في هذه الحالة ، umask مثل شريط masking لحظر / تعطيل الأذونات عند إنشاء ملف جديد أو dir.

الأذونات الافتراضية عند إنشاء dir جديدة octal 777 (111 111 111)، وملف جديد هو octal 666 (110 110 110). قمنا بتعيين umask لحظر / تعطيل أذونات معينة.

  • قناع قليلا من 1 يعني حظر / تعطيل هذا الإذن (وضع شريط لاصق على هذا البت).
  • قناع قليلا من 0 سيسمح بإذن المرور (لا يوجد شريط لاصق فوق ذلك البت).

لذا octal 022 (000 010 010) قناع يعني لتعطيل group write و others write، والسماح لجميع الأذونات الأخرى بالمرور.

عملية حسابية:

هنا مثال حساب لملف جديد (إذن 666 الافتراضي) مع umask 022:

  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.

حساب المكافأة:

إذا كنت تريد بالفعل فهم ما "تُحسب الأوقيانوغتان الثمانية عن طريق البتات" و "التوحيد الأحادي للحجة باستخدام" "bitwise NOT" يعني ، هنا بعض الجداول المنطقية التي يمكن أن تساعد في التظاهر. تذكر ، وقناع قليلا 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