डॉकर के तहत क्रोम: CAP_SYS_ADMIN बनाम विशेषाधिकार प्राप्त? [बन्द है]


11

मैं अपने परीक्षण वातावरण में डॉकर के अंदर क्रोमेड्रिवर + क्रोम चला रहा हूं।

नवीनतम कोरओएस अपग्रेड तक सब कुछ ठीक काम कर रहा था।

ये वे संस्करण हैं जो काम करने लगते हैं:

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

और यह एक नया संस्करण है जो क्रोम से कोरपम्प का कारण बनता है:

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

परिवर्तनों को देखते हुए, ऐसा लगता है कि docker को 1.11.x से 1.12.x में अपग्रेड किया गया, जिसने setns()कंटेनर के अंदर कॉल को तोड़ दिया । setns()Chrome द्वारा नाम स्थान बनाने के लिए उपयोग किया जाता है।

यह उदाहरण आउटपुट हैं:

jsosic-coreos-test-20161207 ~ # docker --version
Docker 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 --version
Docker version 1.12.3, build 34a2ead

[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
  Network namespace supported,
  but failed: errno = Operation not permitted
Aborted (core dumped)

मुझे जो पता चला है वह यह है कि अगर मैं कंटेनर को या तो शुरू करता हूं --cap-add=SYS_ADMINया --privileged- क्रोम अपेक्षा के अनुरूप काम करता है।

उन दो स्विच में क्या अंतर है? कौन सी क्षमताएं सक्षम हैं --privileged?

और, क्या मैं setns()सुरक्षा से समझौता किए बिना कंटेनर के अंदर अनुमति दे सकता हूं ?


इसके लिए धन्यवाद। मैंने आपके सामान का उपयोग करते हुए एक मुद्दा बनाया: github.com/docker/for-linux/issues/496 मुझे लगता है कि इसे ठीक करना चाहिए
Merc

मुझे लगभग 2 साल बहुत देर हो गई है, लेकिन अगर आप अभी भी रुचि रखते हैं तो टिकट में एक बेहतर और सुरक्षित समाधान है।
Merc

यदि मूल पोस्टर उत्तर को अपडेट नहीं करता है (वह SO पर सक्रिय नहीं लगता है), तो मुझे बताएं कि क्या आप किसी अन्य को स्वीकार करने के लिए उपलब्ध होंगे। मैंने इस पर घंटों बर्बाद किया, मैं केवल कल्पना कर सकता हूं कि हम अन्य लोगों को कितने घंटे बचाएंगे।
Merc

जवाबों:


7

AFAICS, दस्तावेज़ीकरण स्विच का उपयोग करने के बजाय एक कंटेनर के लिए आवश्यक क्षमताओं को देने का सुझाव देता है--privileged । विशेषाधिकार प्राप्त मोड में चलने से कंटेनर को सभी क्षमताओं को प्रदान करने लगता है (वास्तव में जो पहले URL में सूचीबद्ध हैं, बशर्ते कि डॉक्स अद्यतित हैं)।

संक्षेप में, मैं कहूंगा कि स्विच --cap-add=SYS_ADMINकी तुलना में कंटेनर की क्षमताओं का एक छोटा उपसमुच्चय देता है --privileged। घटना डोकर प्रलेखन (पहले यूआरएल) में उदाहरण लगते हैं बस जोड़ने को पसंद करते हैं SYS_ADMINया NET_ADMINजहां जरूरत क्षमता।


धन्यवाद, exec_linux.goमदद की। मैं इसके माध्यम से grep करने के लिए docker रेपो क्लोनिंग की कोशिश की, लेकिन जब से यह मुझे कुछ घंटे लग गए तो मैं इसके बारे में भूल गया :)
Jakov Sosic

बस क्रोम को चलाने के लिए, यहां एक बेहतर समाधान दिया गया है: github.com/docker/for-linux/issues/496#issuecomment-441149510 मुझे लगता है कि उत्तर को अपडेट करना बहुत फायदेमंद होगा, ताकि लोग वही करें जो मैं समझाता हूं। यह बहुत ही टिप्पणी है। अगर आप सहमत हैं तो कृपया मुझे बताएं।
मर्क

1

एक अंतर यह है कि - आरआई के रूप में निजीकृत आरोह / देव और / sys, जहां SYS_ADMIN उन्हें आरओ के रूप में माउंट करता है। इसका मतलब है कि एक विशेषाधिकार प्राप्त कंटेनर में सिस्टम पर उपकरणों तक पूरी पहुंच है। SYS_ADMIN आपको वह नहीं देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.