في Linux، تتمتع جميع الدلائل والملفات بأذونات الوصول. يمكنك استخدام chmod
لتعيين حقوق الوصول المفضلة للمستخدمين المختلفين. ولكن ما الذي يحدد أذوناتهم الافتراضية؟ دعنا نتحدث عن umask
.
أذونات الوصول
تحتوي جميع الدلائل والملفات على علامات تسمى بتات الوضع والتي تحدد ما إذا كان يمكن قراءتها أو الكتابة إليها أو تنفيذها. تنفيذ ملف يعني تشغيله مثل برنامج أو نص برمجي. بالنسبة للدليل، يجب أن تكون قادرًا على “تنفيذ” دليل لـ cd
تُسمى إعدادات وضع البت مجتمعة بأذونات الدليل أو الملف.
هناك ثلاث مجموعات من الأذونات. المجموعة الأولى مخصصة لمالك الدليل أو الملف. ما لم يتم تغيير الملكية باستخدام
chown
المالك هو الشخص الذي قام بإنشاء الدليل أو الملف.
المجموعة الثانية من الأذونات مخصصة لأعضاء مجموعة المستخدمين التي تم تعيين الدليل أو الملف لها. وعادةً ما تكون هذه هي مجموعة المستخدمين الخاصة بالمالك.
توجد مجموعة ثالثة وأخيرة من الأذونات لـ”الآخرين”. وهي مجموعة شاملة لكل الأشخاص غير المشمولين في المجموعتين الأوليين.
من خلال فصل الأذونات على هذا النحو، يمكن منح قدرات مختلفة للفئات الثلاث. وهذه هي الطريقة التي يتم بها التحكم في الوصول إلى الدليل والملف في Linux. ورغم أن هذا مخطط بسيط، فإنه يوفر طريقة مرنة وقوية لتحديد من يمكنه القيام بأي شيء مع أي دليل أو ملف.
بتات الوضع
يمكنك رؤية الأذونات الخاصة بالملفات باستخدام ls
الأمر و
-l
خيار (التنسيق الطويل).
ls -l any*
سننظر أيضًا إلى الدليل عن طريق إضافة -d
خيار (الدليل). بدون هذا الخيار، ls
سوف ينظر إلى الملفات الموجودة داخل الدليل، وليس إلى الدليل نفسه.
ls -ld
في بداية كل إدخال في ls
في القائمة، توجد مجموعة من 10 أحرف. فيما يلي صورة مقربة لتلك الأحرف لملف ودليل.
الملف هو السطر العلوي، والدليل هو السطر السفلي. يخبرنا الحرف الأول ما إذا كنا ننظر إلى دليل أم ملف. يشير الحرف “d” إلى دليل والشرطة “-
” يشير إلى ملف.
يتم الإشارة إلى المجموعات الثلاث من الأذونات من خلال كل مجموعة من ثلاثة أحرف. من اليسار إلى اليمين، هذه هي الأذونات الخاصة بالمالك والمجموعة والآخرين. في كل مجموعة من الأذونات، تشير الأحرف الثلاثة، من اليسار إلى اليمين، إلى الإعداد الخاص بإذن القراءة “r” وإذن الكتابة “w” وإذن التنفيذ “x”. يشير الحرف إلى أن الإذن تم تعيينه. الشرطة “-
“يعني أن الإذن غير محدد.”
بالنسبة لملف المثال الخاص بنا، تعني الأحرف العشرة ما يلي:
- –:هذا ملف وليس دليل.
- روكس:يمكن للمالك قراءة هذا الملف وكتابته وتنفيذه.
- ر-و-:يمكن لأعضاء آخرين من نفس المجموعة التي تم تعيين هذا الملف لها القراءة والكتابة إلى الملف، ولكن لا يمكنهم تنفيذه.
- ر–:يمكن لأي شخص آخر قراءة الملف فقط.
بالنسبة لدليل المثال الخاص بنا، تعني الأحرف العشرة ما يلي:
- د:هذا هو الدليل.
- روكس:يمكن للمالك القراءة والكتابة والتنفيذ (
cd
إلى هذا الدليل. - روكس:يمكن للأعضاء الآخرين في نفس المجموعة القراءة والكتابة و
cd
إلى هذا الدليل. - ار اكس:يمكن للجميع الآخرين
cd
في هذا الدليل، ولكن لا يمكنهم سوى قراءة الملفات. ولا يمكنهم حذف الملفات أو تحريرها أو إنشاء ملفات جديدة.
يتم تخزين الأذونات في بتات الوضع في بيانات التعريف الخاصة بالدليل أو الملف. كل بت وضع له قيمة عددية. وكلها لها قيمة صفر إذا لم يتم تعيينها.
- ر:يكون لبت القراءة قيمة 4 إذا تم ضبطه.
- و:يكون لبت الكتابة قيمة 2 إذا تم ضبطه.
- س:يكون لبت التنفيذ قيمة 1 إذا تم ضبطه.
يمكن تمثيل مجموعة من ثلاثة أذونات بمجموع قيم البتات. القيمة القصوى هي 4+2+1=7، وهو ما من شأنه أن يضبط الأذونات الثلاثة في مجموعة على “تشغيل”. وهذا يعني أنه يمكن التقاط جميع التباديل الخاصة بالمجموعات الثلاث في مجموعة مكونة من ثلاثة أرقام. القيمة الثماني (القاعدة 8).
باستخدام ملف المثال الخاص بنا من الأعلى، يتمتع المالك بأذونات القراءة والكتابة والتنفيذ، والتي تساوي 4+2+1=7. يتمتع الأعضاء الآخرون في المجموعة التي يوجد بها الملف بأذونات القراءة والكتابة، والتي تساوي 4+2=6. تحتوي فئة الآخرين فقط على مجموعة أذونات القراءة، والتي تساوي ببساطة 4.
لذا يمكن التعبير عن الأذونات لهذا الملف على أنها 764.
باستخدام نفس المخطط، ستكون أذونات الدليل 775. يمكنك رؤية التمثيل الثماني للأذونات باستخدام stat
يأمر.
ال chmod
(شأنجي تعديليعد الأمر (e bits) الأداة المستخدمة لتعيين الأذونات على الدلائل والملفات. لكنه لا يحدد الأذونات التي يتم تعيينها على دليل أو ملف عند إنشائه. يتم استخدام مجموعة افتراضية من الأذونات لذلك.
الأذونات الافتراضية وumask
الأذونات الافتراضية للدليل هي 777، والأذونات الافتراضية للملف هي 666. وهذا يمنح كل مستخدم حق الوصول الكامل إلى جميع الدلائل، والقدرة على قراءة وكتابة أي ملف. لا يتم تعيين بت التنفيذ على الملفات. لا يمكنك إنشاء ملف تم تعيين بت التنفيذ عليه بالفعل. وهذا قد يؤدي إلى مخاطر أمنية.
ومع ذلك، إذا قمت بإنشاء دليل جديد وملف جديد ونظرت إلى أذوناتهما، فلن يتم تعيينهما على 777 و666. سننشئ ملفًا ودليلًا، ثم نستخدم stat
من خلال الأنابيب grep
لاستخراج السطر باستخدام التمثيل الثماني لأذوناتهم.
touch umask-article.txt
mkdir howtogeek
stat umask-article.txt | grep "Access: ("
stat howtogeek | grep "Access: ("
تم ضبطها على 775 للدليل و664 للملف. لم يتم ضبطها على الأذونات الافتراضية العالمية لأن قيمة أخرى تعدلها، تسمى قيمة umask.
قيمة أوماسك
يتم تعيين قيمة umask عالميًا بقيمة واحدة للجذر وقيمة مختلفة لجميع المستخدمين الآخرين. ولكن يمكن تعيينها بقيمة جديدة لأي شخص. لمعرفة إعداد umask الحالي، استخدم umask
يأمر.
umask
وللجذر:
umask
إن الأذونات على الدليل أو الملف الذي تم إنشاؤه حديثًا هي نتيجة لتعديل قيمة umask للأذونات الافتراضية العالمية.
تمامًا مثل بتات الوضع، تمثل قيمة umask نفس المجموعات الثلاث من الأذونات – المالك والمجموعة وغيرها – وتمثلها بثلاثة أرقام ثماني. سترى أحيانًا أنها مكتوبة بأربعة أرقام، حيث يكون الرقم الأول صفرًا. هذه طريقة مختصرة لقول “هذا رقم ثماني”. الأرقام الثلاثة الموجودة في أقصى اليمين هي التي يتم حسابها.
لا يمكن لقيمة umask إضافة أذونات. بل يمكنها فقط إزالة الأذونات أو إخفاءها. ولهذا السبب فإن الأذونات الافتراضية سخية للغاية. فهي مصممة بحيث يتم تقليصها إلى مستويات معقولة من خلال تطبيق قيمة umask.
لن تناسب مجموعة واحدة من الأذونات الافتراضية جميع المستخدمين، ولن تناسب جميع السيناريوهات. على سبيل المثال، ستحتاج الدلائل والملفات التي ينشئها الجذر إلى أذونات أكثر تقييدًا من المستخدم العادي. وحتى المستخدم العادي لا يريد أن يتمكن الجميع في فئة الآخرين من رؤية ملفاتهم وتغييرها.
كيف يقوم umask بإخفاء الأذونات
يؤدي طرح قيمة القناع من الأذونات الافتراضية إلى حصولك على الأذونات الفعلية. بعبارة أخرى، إذا تم تعيين إذن في قيمة umask، فلن يتم تعيينه في الأذونات المطبقة على الدليل أو الملف.
تعمل قيم umask بمثابة عكس لقيم الأذونات المعتادة.
- 0:لا تتم إزالة أي أذونات.
- 1:تم إلغاء تعيين بت التنفيذ في الأذونات.
- 2:تم إلغاء تعيين بت الكتابة في الأذونات.
- 4:تم إلغاء تعيين بت القراءة في الأذونات.
تم تعديل الأذونات الافتراضية 777 للمجلدات و666 للملفات بقيمة umask 002 لإنتاج الأذونات النهائية 775 و664 على دليل الاختبار والملف الخاص بنا.
stat umask-article.txt | grep "Access: ("
stat howtogeek | grep "Access: ("
يؤدي هذا إلى إزالة إذن الكتابة من فئة الآخرين على كل من الدليل والملف.
إذا قام الجذر بإنشاء دليل، فسيتم تطبيق قيمة umask الخاصة به وهي 022. تتم إزالة إذن الكتابة لفئة الآخرين وفئة المجموعة أيضًا.
sudo mkdir root-dir
stat howtogeek | grep "Access: ("
يمكننا أن نرى أن الأذونات الافتراضية لـ 777 تم تقليصها إلى 755.
تغيير قيمة umask الافتراضية
توجد قيم umask مختلفة لأغلفة تسجيل الدخول وأغلفة عدم تسجيل الدخول. أغلفة تسجيل الدخول هي الأغلفة التي تتيح لك تسجيل الدخول، إما محليًا أو عن بُعد عبر SSH. الغلاف غير المخصص لتسجيل الدخول هو غلاف داخل نافذة طرفية عندما تكون مسجلاً الدخول بالفعل.
كن حذرًا للغاية إذا قمت بتغيير واجهة تسجيل الدخول umask. لا تزيد الأذونات وتخفض مستوى الأمان. بل يجب أن تميل إلى تقليلها وجعلها أكثر تقييدًا.
في Ubuntu وManjaro، يمكن العثور على إعدادات umask في هذه الملفات:
- تسجيل الدخول إلى Shell umask:بالنسبة لقيمة umask الافتراضية لواجهة تسجيل الدخول: /etc/profile
- غلاف غير قابل لتسجيل الدخول:بالنسبة لقيمة umask الافتراضية لـ shell غير تسجيل الدخول: /etc/bash.bashrc
في Fedora، يمكن العثور على إعدادات umask في هذه الملفات:
- تسجيل الدخول إلى Shell umask:بالنسبة لقيمة umask الافتراضية لسجل الدخول: /etc/profile
- غلاف غير قابل لتسجيل الدخول:بالنسبة لقيمة umask الافتراضية لـ shell غير المسجل: /etc/bashrc
إذا لم تكن لديك حاجة ملحة لتغيير هذه العناصر، فمن الأفضل تركها بمفردها.
الطريقة المفضلة هي تعيين قيمة umask جديدة لأي حسابات مستخدم فردية تحتاج إلى الاختلاف عن القيمة الافتراضية. يمكن وضع إعداد umask جديد في ملف “.bashrc” الخاص بالمستخدم في الدليل الرئيسي الخاص به.
gedit .bashrc
أضف إعداد umask الخاص بك بالقرب من أعلى الملف.
احفظ الملف وأغلق المحرر. افتح نافذة طرفية جديدة وتحقق من قيمة umask باستخدام umask
يأمر.
umask
القيمة الجديدة نشطة.
تغييرات قصيرة المدى في umask
إذا كان لديك متطلب قصير المدى لقيمة umask مختلفة، فيمكنك تغييرها لجلسة العمل الحالية باستخدام umask
ربما تقوم بإنشاء شجرة دليل وبعض الملفات وترغب في زيادة مستوى الأمان عليها.
يمكنك تعيين قيمة umask إلى 077، ثم التحقق من أن القيمة الجديدة نشطة.
umask 077
umask
يؤدي ضبط القناع ليكون له قيمة 7 في فئات المجموعة والفئات الأخرى إلى إزالة جميع الأذونات من هذه الفئات. لن يتمكن أحد غيرك (والجذر) من الدخول إلى الدلائل الجديدة وقراءة ملفاتك وتحريرها.
mkdir secure-dir
ls -ld secure-dir
الأذونات الوحيدة مخصصة لمالك الدليل.
mkdir secure-file.txt
ls -ld secure-file.txt
الملف آمن ضد التطفل من قبل أي مستخدمين آخرين. يؤدي إغلاق نافذة المحطة الطرفية إلى التخلص من إعداد umask المؤقت.
طرق أخرى لاستخدام umask
يسمح Linux لبعض العمليات بتوارث قيم umask الخاصة بالنظام، أو منحها إعدادات umask الخاصة بها. على سبيل المثال، useradd
يستخدم إعداد umask لإنشاء أدلة منزلية للمستخدمين الجدد.
يمكن تطبيق قيمة umask على نظام الملفات أيضًا.
less /etc/fstab
على هذا الكمبيوتر، تم تطبيق إعداد umask 077 على نظام الملفات “/boot/efi”.
النظر إلى نقطة تثبيت نظام الملفات باستخدام ls
يمكننا التحقق من أن قيمة umask قد أزالت جميع الأذونات من الجميع باستثناء المالك، الجذر.
ls /boot/efi -ld
umask والأذونات تحتاج إلى بعضها البعض
يتم تطبيق الأذونات الافتراضية على الدليل أو الملف بعد تحويلهما بقيمة umask. سيكون من النادر جدًا أن تحتاج إلى تغيير قيمة umask بشكل دائم لمستخدم، ولكن تعيين قيمة umask مؤقتًا لمنح مجموعة أكثر صرامة من الأذونات أثناء إنشاء مجموعة من الدلائل أو المستندات الحساسة هي طريقة سريعة وسهلة لتعزيز أمانها.