الكروم تحت عامل الميناء: كاب_سيس_مشرف مقابل متميز?

أنا تشغيل كروميدريفر + كروم داخل عامل الميناء في بيئة الاختبار بلدي.

كل شيء كان يعمل بشكل جيد حتى أحدث ترقية كوريوس.

هذه هي الإصدارات التي يبدو أنها تعمل:

VERSION=1185.5.0VERSION_ID=1185.5.0BUILD_ID=2016-12-07-0937

وهذا الإصدار الأحدث الذي يسبب كروم إلى كوريدومب:

VERSION=1235.4.0VERSION_ID=1235.4.0BUILD_ID=2017-01-04-0450

بالنظر إلى التغييرات ، يبدو أن عامل الميناء تمت ترقيته من 1.11.س إلى 1.12.س ، الذي كسر setns() استدعاء داخل الحاوية. setns() يستخدم من قبل كروم لإنشاء مساحات الأسماء.

هذا هو مثال المخرجات:

jsosic-coreos-test-20161207 ~ # docker --versionDocker version 1.11.2, build bac3bae

من داخل حاوية واحدة على هذا المربع:

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:

هذه هي الطريقة التي كسرها الإصدار الجديد:

jsosic-coreos-test-2017-01-04 ~ # docker --versionDocker version 1.12.3, build 34a2ead[root@13ab34c36c82 /]# /opt/google/chrome/chromeFailed to move to new namespace: PID namespaces supported,  Network namespace supported,  but failed: errno = Operation not permittedAborted (core dumped)

ما اكتشفته هو أنه إذا بدأت الحاوية مع أي منهما --cap-add=SYS_ADMIN أو --privileged - كروم يعمل كما هو متوقع.

ما هو الفرق بين هذين المفتاحين? ما هي القدرات التي يتم تمكينها من خلال --privileged?

و, هل يمكنني السماح setns() داخل الحاوية دون المساس بالأمن?

الفسيفساء ، الوثائق يقترح منح القدرات اللازمة للحاوية ، بدلا من استخدام --privileged التبديل. تشغيل في وضع متميز يبدو أن منح الحاوية جميع القدرات (بالضبط ما يتم سردها في عنوان ورل الأول ، شريطة أن تكون المستندات محدثة).

باختصار ، أود أن أقول ذلك --cap-add=SYS_ADMIN يمنح مجموعة فرعية أصغر من القدرات للحاوية ، مقارنة بـ --privileged التبديل. حدث يبدو أن الأمثلة في وثائق عامل الميناء (عنوان ورل الأول) تفضل فقط إضافة SYS_ADMIN أو NET_ADMIN القدرة عند الحاجة.

فرق واحد هو أن privileged يتصاعد متميز / ديف و / سيس كما رو ، حيث كما سيس_أدمن يتصاعد لهم كما رو.هذا يعني أن الحاوية المميزة لديها حق الوصول الكامل إلى الأجهزة الموجودة على النظام. مسؤول النظام لا يعطيك ذلك.

شكرا على هذا. لقد قدمت مشكلة ، باستخدام الكثير من الأشياء الخاصة بك: Allow setns() in container, or add flag to allow it specifically · Issue #496 · docker/for-linux · GitHub أعتقد أنه يجب الحصول على ثابت

أنا على وشك 2 سنوات متأخرة جدا, ولكن هناك حل أفضل وأكثر أمانا في التذكرة أعلاه إذا كنت لا تزال مهتما.

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