تمت إعادة إنشاء Nginx.http.sock بسياق selinux غير صحيح

لديك نسخة من Discourse تعمل خلف خادم Apache وتتعامل عبر منفذ، كما هو موضح هنا.

لقد فعّلت SELinux، ولتمكين httpd من استخدام المنفذ، قمت بتعيين سياق للمنفذ يمنح httpd صلاحيات القراءة والكتابة، كما هو مُوصى به:

semanage fcontext -a -t httpd_sys_rw_content_t /var/discourse/shared/standalone/nginx.http.sock
restorecon /var/discourse/shared/standalone/nginx.http.sock

هذا يعمل بشكل ممتاز!

(ملاحظة جانبية: هل سيكون السياق httpd_var_run_t أكثر ملاءمة، حيث أن المنفذ نفسه ليس محتوى، وهذا هو السياق الذي يستخدمه httpd للبنية التحتية التشغيلية الأخرى؟)

ومع ذلك، في كل مرة يتم فيها إعادة تشغيل حاوية Discourse، يُعاد إنشاء ملف المنفذ بسياقه الأصلي وليس بالسياق الجديد، مما يضطرني إلى تشغيل restorecon قبل أن يتمكن Apache من التواصل مع Discourse. من السهل نسيان القيام بذلك والنتيجة أن تصبح المنتدى غير قابلة للوصول. خطر ببالي استخدام سكريبت cron لتشغيل restorecon بشكل دوري حتى لا أضطر لتذكير نفسي بالقيام بذلك يدويًا، لكن هذا حل غير أنيق.

كيف يمكنني ضمان حصول ملف المنفذ على السياق الصحيح عند إنشائه (أو على الأقل إعادة تعيين سياقه كجزء من عملية الإنشاء)؟

يمكنني إنشاء سكريبت إعادة تشغيل يبدأ الحاوية ويغير الأذونات (وآخر يقوم بإعادة البناء).

ما لا يمكن أن يكتشفه سكريبت إعادة التشغيل هو إجراء الترقية عبر الويب من لوحة الإدارة — وهذا ما حدث لي في المرة السابقة، مما دفعني للتساؤل عما إذا كان هناك حل ينطبق على جميع الحالات.

يجب أن أضيف أيضًا: لا أفهم لماذا لا يحصل المقبس على السياق الصحيح عند إنشائه. فمن الواضح أن SELinux يعرف السياق الافتراضي الذي يجب أن يكون للمقبس، كما يظهر عند تشغيل أمر restorecon. (كما يمكنني رؤية الإدخال الخاص بالمقبس الذي تم إنشاؤه عند تشغيل semanage fcontext في الملف /etc/selinux/targeted/contexts/files/file_contexts.local.)