Ninawezaje kutumia docker bila sudo?


Nenda kwa jibu lililokubaliwa


Kwenye kurasa za nyaraka za Docker, amri zote za mfano zinaonyeshwa bila sudo , kama hii:

 docker ps
 

Kwenye Ubuntu, binary inaitwa docker.io . Pia haifanyi kazi bila sudo:

 sudo docker.io ps
 

Ninawezaje kusanidi Docker ili sihitaji kutanguliza kila amri ya Docker na sudo?


789





2014-06-06




Idadi ya majibu: 3


Habari njema: kizimbani kipya (toleo la 19.03 (majaribio ya sasa)) kitaweza kukimbia bila kuzima shida ambazo zinaweza kutokea kwa kutumia mtumiaji wa mizizi. Hakuna ubaya wowote na ruhusa zilizoinuliwa, mzizi na kitu chochote ambacho kinaweza kufungua mashine yako wakati haukutaka.

Video kuhusu hii kutoka kwa [DockerCon 2019] Hardening Docker daemon na modi isiyo na mizizi

Mapango machache kwa modi isiyo na mizizi ya Docker

Wahandisi wa docker wanasema hali isiyo na mizizi haiwezi kuzingatiwa kama uingizwaji wa huduma kamili ya sifa za injini ya Docker. Baadhi ya kikomo kwa hali isiyo na mizizi ni pamoja na:

  • udhibiti wa rasilimali ya cgroups, profaili za usalama wa programu, alama ya kuangalia / kurejesha, mitandao ya kuingiliana nk haifanyi kazi kwenye hali isiyo na mizizi.
  • Kufunua bandari kutoka kwa vyombo kwa sasa kunahitaji mchakato wa msaidizi wa mwongozo.
  • Huduma za msingi wa Ubuntu pekee ndizo zinazounga mkono mifumo ya fimbo katika hali isiyo na mizizi.
  • Modi isiyo na mizizi kwa sasa hutolewa kwa tujenzi za usiku ambazo zinaweza kuwa sio ngumu kama vile umezoea.

Kama ya docker 19.3 hii ni ya kizamani (na hatari zaidi kuliko inahitajika):

Docker mwongozo ana haya ya kusema kuhusu hilo:

Kutoa ufikiaji usio na mizizi

Daemon ya docker daima huwa kama mtumiaji wa mizizi, na tangu toleo la Docker 0.5.2, daemon ya docker inajifunga kwa tundu la Unix badala ya bandari ya TCP. Kwa default kwamba tundu la Unix linamilikiwa na mzizi wa mtumiaji, na kwa hivyo, kwa msingi, unaweza kuifikia kwa sudo.

Kuanzia toleo la 0.5.3, ikiwa wewe (au kisakinishi chako cha Docker) utaunda kikundi cha Unix kinachoitwa kizimbani na kuongeza watumiaji ndani yake, basi daemon ya docker itafanya umiliki wa tundu la Unix kusomwa / kuandikwa na kikundi cha docker wakati daemon inapoanza . Daemon ya docker lazima iendeshe kama mtumiaji wa mizizi, lakini ikiwa unakimbiza mteja wa kizimbani kama mtumiaji katika kikundi cha docker basi hauitaji kuongeza sudo kwa amri zote za mteja. Kama ya 0.9.0, unaweza kutaja kuwa kikundi kingine zaidi ya kizimbani kinapaswa kumiliki tundu la Unix na chaguo la -G.

Onyo: Kikundi cha docker (au kikundi kilichoainishwa na -G) ni sawa na mizizi; Angalia maelezo ya Docker Daemon Attack na maelezo mafupi juu ya Kwa nini hatuwaruhusu watumiaji wasio na mizizi kukimbia Docker huko CentOS, Fedora, au RHEL (asante michael-n).

Katika toleo la hivi majuzi la majaribio yasiyokuwa na mizizi kwenye GitHub , wahandisi wanataja hali isiyo na mizizi inaruhusu kukimbia kizimbani kama mtumiaji asiye na faida, kwa kutumia user_namespace (7), Mount_namespaces (7), mtandao_namespaces (7).

Watumiaji wanahitaji kuendesha dockerd-rootless.sh badala ya dockerd.

 $ dockerd-rootless.sh --experimental
 

Kama modi isiyo na Mizizi ni ya majaribio, watumiaji wanahitaji kuendesha wakati wote dockerd-rootless.sh na -experimental.


Ni muhimu kusoma: hatua za ufungaji wa Linux (inaunganisha pia maelezo ya Docker Daemon Attack Surface ).

Dhibiti Docker kama mtumiaji asiye na mizizi

Daemon ya docker inafunga kwa tundu la Unix badala ya bandari ya TCP. Kwa default kwamba tundu la Unix linamilikiwa na mzizi wa watumiaji na watumiaji wengine wanaweza kulipata kwa kutumia sudo. Daemon ya docker daima huwa kama mtumiaji wa mizizi.

Ikiwa hutaki kutumia sudo unapotumia amri ya kizimbani, tengeneza kikundi cha Unix kinachoitwa kizimbani na ongeza watumiaji ndani yake. Wakati daemon ya docker inapoanza, hufanya umiliki wa sosi ya Unix kusomwa / kuandikwa na kikundi cha kizimbani.


  • Ongeza kikundi cha docker ikiwa haipo tayari:

     sudo groupadd docker
     
  • Ongeza mtumiaji aliyeunganishwa "$ USER" kwa kikundi cha kizimbani. Badilisha jina la mtumiaji ili liungane na mtumiaji anayependelea ikiwa hutaki kutumia mtumiaji wako wa sasa:

     sudo gpasswd -a $USER docker
     
  • Ila fanya newgrp docker au toka / jiunge ili kuamilisha mabadiliko kwa vikundi.

  • Unaweza kutumia

     docker run hello-world
     

    kuangalia kama unaweza kuendesha kizimbani bila sudo.


1164


2014-06-06

Ili kuendesha agizo la kizimbani bila sudo , unahitaji kuongeza mtumiaji wako (ambaye ana haki ya mizizi) kwa kundi la kizimbani. Kwa amri hii ifuatayo:

  sudo usermod -aG docker $USER
 

Sasa, uwe na watumiaji wa watumiaji kisha uingie tena. Suluhisho hili linafafanuliwa vizuri hapa na mchakato sahihi wa ufungaji.


217


2016-02-27

Utaratibu ambao kuongeza mtumiaji kwa docker idhini ya ruzuku ya kikundi kuendesha kizimbani ni kupata ufikiaji wa tundu la docker huko /var/run/docker.sock . Ikiwa mfumo wa faili ambayo /var/run ina imewekwa na ACL kuwezeshwa, hii inaweza pia kupatikana kupitia ACL.

 sudo setfacl -m user:$USER:rw /var/run/docker.sock
 

Ninajumuisha hii tu kwa ukamilifu.

Kwa ujumla, napendekeza kuepukana na ACL wakati wowote mbadala mzuri kulingana na vikundi hupatikana: Ni bora ikiwa haki katika mfumo zinaweza kueleweka kwa kuangalia ushirika wa kikundi pekee. Kupata skanning mfumo wa faili kwa entries za ACL ili kuelewa marupurupu ya mfumo ni mzigo zaidi kwa ukaguzi wa usalama.

Onyo 1 : Hii ina root usawa sawa na kuongeza username kwenye docker kundi. Bado unaweza kuanza kontena kwa njia ambayo inaweza root kufikia mfumo wa faili wa mwenyeji.

Onyo 2 : ACL ni ngumu sana kwa ukaguzi wa usalama kuliko usalama wa msingi wa kikundi. Labda epuka ACL ikiwezekana wakati unaweza kutumia vikundi badala yake, angalau katika mazingira yanayohusiana na ukaguzi.


62


2017-12-01