زر VPN يحتاج إلى sudo: اضبط نطاق القاعدة وتحقق من السياسة
زر سطح المكتب ليس سببًا لجذر بلا كلمة مرور. تحقق مما إذا كان مدير الشبكة قادرًا على ذلك، وحدد نطاق أمر واحد، ثم تحقق من سياسة sudo بأكملها.
زر VPN يعمل لدى المسؤول ويفشل عند كل من سواه، فيضيف أحدهم سطرًا إلى sudoers. ذلك السطر عادةً يعيش أطول من المشكلة التي وضع من أجلها، وكثيرًا ما يمنح أكثر مما يحتاجه الزر. قبل أن تعدل السياسة، تحقق مما إذا كان مالك الاتصال المدعوم قادرًا على أداء المهمة بالفعل. الشروط الثلاثة أدناه تحدد ما إذا كان sudo معنيًا أصلًا.
الشرط 1: المالك المدعوم يستطيع ذلك دون sudo
على معظم أسطح مكتب Linux يملك مدير الشبكة اتصالات VPN بالفعل، وتمر مصادقته عبر polkit لا عبر sudo. المستخدم المسموح له بإحضار اتصال يمكنه فعل ذلك من سطر الأوامر دون أي قاعدة جذر على الإطلاق. تحقق مما يسمح به المدير قبل أن تفترض أن الزر يحتاج إلى امتياز. إذا كان الجواب نعم، فإن تعديل sudoers يحل مشكلة غير موجودة.
nmcli connection show
nmcli connection up "Work VPN"
إذا رفض المدير، فاقرأ السبب: قاعدة polkit مفقودة، أو اتصال يملكه مستخدم آخر، أو ملف تعريف مخزن حيث لا يستطيع المستخدم قراءته. لكل من ذلك إصلاح مدعوم أضيق من قاعدة sudo. تصعيد الامتيازات هو الملاذ الأخير، لا الأول.
الشرط 2: القاعدة تسمي برنامجًا قابلًا للتنفيذ واحدًا ومعاملاته
إذا كان sudo مطلوبًا فعلًا، فينبغي أن تسمي القاعدة الأمر الدقيق، وحيث أمكن، المعاملات التي يجوز استخدامها. القاعدة التي تسمح للمستخدم بتشغيل سكربت غلاف ليست أكثر أمانًا من صلاحيات ذلك السكربت، لأن المستخدم يمكنه تعديل ما سينفذه الجذر. قاعدة تحوي حرفًا بديلًا بعد الأمر هي المشكلة نفسها في صورة أقصر.
sudo -l -U alice
ls -l /usr/local/sbin/vpn-up
افحص كل مسار في سلسلة الأوامر: الملف التنفيذي، والسكربت الذي يستدعيه، وملف الإعدادات الذي يقرأه، وأي مجلد بينها. إذا كان أي منها قابلًا للكتابة من قبل المستخدم، فإن القاعدة المحددة النطاق هي في الواقع جذر بلا قيود. المعاملات مهمة أيضًا، لأن أمرًا يقبل مسار إعدادات يمكن توجيهه إلى ملف يتحكم فيه المستخدم. اكتب القاعدة للعملية، لا للزر.
توقف إذا كان الأمر يحتاج إلى ملف يتحكم فيه المستخدم كي يعمل. عندئذٍ يكون التصميم خاطئًا، ولن تجعله أي صياغة sudoers آمنًا.
الشرط 3: السياسة كلها تُحلَّل، لا سطرك وحده
تحقق بالمحرر الذي يقفل الملف ويفحص الصياغة، وتحقق من السياسة المجمعة لا من جزء منها. الملف الذي يُحلَّل وحده يمكنه مع ذلك كسر ترتيب التضمين أو تكرار قاعدة بطريقة تغيّر السلوك.دليل visudo يوثّق كلا الأمرين: المحرر القافل ووضع الفحص فقط المستخدم هنا.
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/vpn-launcher
يبلّغ الفحص عن الملف والسطر عند فشله، وهذا التقرير هو الجزء المفيد. أصلح التغيير المقصود عبر المحرر بدلًا من حفظ خطأ معروف بالقوة، لأن سياسة معطوبة يمكنها إقصاء كل مسؤول في وقت واحد. الملفات تحت دليل التضمين تحتاج أيضًا إلى الملكية والوضع الذي يشترطه الدليل، وإلا فستُتجاهل أو تُرفض. الصياغة هي البوابة الأولى فقط: بعد اجتيازها، اقرأ القاعدة مرة أخرى واسأل عمّا تسمح به فعلًا.
توقف إذا كانت الطريقة الوحيدة لجعل التغيير يعمل هي تعطيل فحص الصياغة. تلك ليست سياسة، بل انقطاع ينتظر إعادة تشغيل.
الاستعادة: احتفظ بجلسة لا تزال تعمل
قبل أن تحفظ، تأكد من أن جلسة إدارية مخوّلة مفتوحة بالفعل وأن مسارًا ثانيًا إلى الجهاز موجود. خطأ في sudoers يمكنه أن ينزع قدرتك على إصلاحه، وزر على سطح المكتب لا يستحق ذلك الخطر. إذا كان sudo معطوبًا بالفعل، فاستخدم مسار الاستعادة الموثّق في النظام بدلًا من ارتجال واحد.
sudo -n true
id
بدائل مثل pkexec تعتمد على تنصيبها وسياستها الخاصة، لذا ليست مطالبة جذر ثانية مضمونة. أبقِ التخويل المحلي منفصلًا عن تزويد سر VPN أيضًا: قاعدة sudo لا تفتح وكيل أسرار غائبًا، ولا تلبي المصادقة متعددة العوامل للبوابة. بعد التصحيح، اختبر الحساب العادي وهو ينفذ العملية المقصودة فقط، ثم استخدم عناصر التحكم العادية في المدير.
ينتهي القرار عندما تستطيع أن تقول أي شرط برّر sudo، وما الذي تسميه القاعدة، وأن السياسة كلها تُحلَّل، وكيف كنت ستستعيدها لو لم يحدث ذلك. مشغّل متمتع بالامتيازات يكلفك وصولك الإداري صفقة سيئة، وهي عادةً صفقة يمكن تفاديها.