Kom ons kyk hoe u die Docker verhard en beveilig vir die produksie-omgewing.
Hoewel Docker dit moontlik gemaak het vir sagteware-ontwikkelaars en DevOps-ingenieurs om toepassings vinnig te bou en te ontplooi, en dit het ook 'n groot aanvalsoppervlak vir die gebruik van kuberhackers.
Ons sal kyk hoe u 'n Docker op 'n Linux-platform kan beveilig uit die volgende.
Beeld vervalsing en so aan.
Ons sal van die volgende instrumente gebruik maak, soos: Notarisbediener van Docker om beelde te teken en Docker bank sekuriteit om na te gaan of die gasheer, daemon-konfigurasie, ensovoorts gekyk word.
Laat ons die basiese beginsels aanraak voordat ons begin beveilig.
0.1 Wat is 'n houertegnologie?
0.2 Verskil tussen VM & VE
0.3 Wat is Docker?
0.5 Docker betroubare register
0.8 Linux-kontrolegroepe (groepe)
0.10 Die beveiliging van Docker-gasheer
1 Skandeer Linux-kern
2 Harden Linux-kern
3 Installeer Docker in 'n VM
4 Wortelvoorregte te beskerm
6 Bestuur houer met groepe
7 Hantering van houers met naamruimtes
8 Die beveiliging van die Docker Daemon
8.1 Die beveiliging van Docker-komponente
9 Verifieer prente met die notarisbediener
Wat is 'n houertegnologie?
Houertegnologie stel ontwikkelaars of DevOps-ingenieurs in staat om 'n toepassing te verpak, sodat dit kan funksioneer met afhanklikhede wat van ander prosesse afgesonder is.
Daar is 'n aantal houertegnologieë in die mark, soos Apache Mesos, vuurpyl, lxc, en Docker. Alhoewel hulle binne die kategorie houertegnologie val, funksioneer hulle anders.
Verskil tussen VM & VE
'N Virtuele masjiengasheer is heeltemal anders as 'n virtuele omgewingsgasheer. Op virtuele masjiene kom elke houerprogram met hul eie stel biblioteke en bedryfstelsels, terwyl toepassings standaard op 'n virtuele omgewingsgasheer soos lxc en docker die Linux-kern deel.
Docker is 'n houertegnologie wat deur miljoene gebruik word om 'n webtoepassing te skep en te implementeer van 'n toets na 'n produksie-omgewing.
Die Docker-enjin bestaan ​​uit drie komponente.
'N Bediener: hierdie komponent is 'n langdurige proses of demon wat verantwoordelik is vir die bestuur van beelde en houers.
REST API: Hierdie koppelvlak maak dit moontlik vir die docker-dememon en die docker-kliënt-instrument om te kommunikeer.
Docker Client-instrument: die Docker-kliëntinstrument maak gebruik van die REST API-komponent om die docker-demoon in te lig om 'n houer-toepassing te bestuur.
Docker betroubare register
Docker Trusted Registry is 'n oplossing vir beeldopslag van Docker vir die onderneming platform. Dit verskil van die docker-hub. Terwyl die dock-hub in die wolk gehuisves word, is die register vir vertroude docker 'n stooroplossing op die perseel Docker ondernemingsuitgawe.
Docker Content Trust bied die geleentheid om handtekeninge te gebruik vir prente wat gestuur word en ontvang word na en van afgeleë dockerregisters soos die dock-hub.
Linux-naamruimtes is 'n Linux-kernfunksie wat 'n houer-toepassing of -proses wat op 'n virtuele omgewingsgasheer aangebied word, van ander prosesse isoleer.
Linux Control Groups is 'n Linux-kernfunksie waarmee u hulpbronne soos CPU-tyd, netwerkbandbreedte, stelselgeheue, ensovoorts kan toewys aan aktiewe prosesse op 'n gasheer.
In Linux is daar 'n sekuriteitsfunksie in die kernsubstelsel wat ingestel of afgedwing kan word om die bevoorregte proses te beperk, so 'n proses wat uitgevoer word deur 'n gebruiker met UID 1. Alhoewel bevoorregte prosesse of gebruikers die diskresionêre toegangsbeheer-regte kan omseil, kan hulle nie omseil nie vermoënsreëls.
Kom ons fokus nou op sekuriteit.
Die beveiliging van Docker-gasheer
In hierdie afdeling gaan ons kyk hoe die gasheer waar Docker woon, kan beveilig.
Voordat u 'n docker op 'n Linux-platform aanbied, moet u eers die kern ondersoek. Daar is verskillende open-source instrumente soos Lynis en OpenVAS u kan gebruik om die Linux-kern te skandeer.
Kopieer of kloon die Lynis-projek vanaf Github met behulp van die git-kloon-opdrag.
Gebruik vervolgens die opdrag hieronder om na die lynis-gids te blaai en die Linux-stelsel te kontroleer.
cd lynis; ./lynis-ouditstelsel
Nadat u die Linux-kern gesoek het vir stelselgebaseerde kwesbaarhede, kan u 'n ekstra laag beskerming by die kern voeg grsecurity. Dit bied sekuriteitsfunksies soos die volgende.
Voorkoming van bufferoorloopontginning
/ tmp voorkoming van rasse kwesbaarheid
/ proc-beperkings wat nie inligting oor prosesseienaars lek nie.
Voorkoming van arbitrêre uitvoering van kodes in die kern en so aan.
Aanvanklik kan jy Aflaai pleeg dit gratis van veiligheid en pas dit op u huidige kern aan. Maar dit laat nie meer gratis pleisters toe nie.
Installeer Docker in 'n VM
In plaas daarvan om Docker direk op 'n Linux-gasheer te installeer, kan u 'n ekstra laag beskerming byvoeg deur dit binne 'n virtuele masjien te installeer. Deur dit te doen, selfs al is daar 'n kwesbaarheidsprobleem met die gasheerkern, sal dit nie die houerhouers beïnvloed nie.
Wortelvoorregte te beskerm
Docker benodig standaard wortelprivilegies om houers te skep en te bestuur. Die kwaadwillige skrif kan hierdie aanvaloppervlak gebruik om te eskaleer na 'n supergebruiker op 'n Linux-gasheer en uiteindelik toegang tot sensitiewe lêers / gidse, beelde, sertifikate, ens..
Om dit te voorkom, kan ons van die volgende opdrag gebruik maak. Ons kan besluit om funksies soos setgid en setuid te laat val om te verhoed dat ander programme of prosesse hul GID na 'n ander GID verander, wat kan lei tot eskaleringsvoorreg. U kan ook kyk hier vir 'n lys met definisie van Linux-vermoëns.
Die opdrag hieronder voer die apache-webbediener-houer af en laat die setgid- en setuid-vermoëns via –cap-drop val om te verhoed dat die apache-houer die GID en UID na 'n ander UID en GID verander.
GID en UID verwys in hierdie konteks onderskeidelik na groep-ID en gebruikers-ID.
Afgesien van die voorkoming van ander programme of prosesse, kan u ook 'n gebruiker skep om docker-bedrywighede te bestuur, soos docker-hardloop, in plaas daarvan om dit via 'n supergebruiker te bestuur.
U kan 'n docker-gebruiker byvoeg of skep deur die volgende:
Die opdrag hierbo skep 'n groep genaamd docker
Skep vervolgens 'n gebruiker met behulp van die opdrag hieronder:
Uiteindelik gebruik die opdrag hieronder om 'n gebruikersmike by die groepdocker te voeg om docker-operasies te administreer.
Bestuur houer met groepe
In 'n produksie-omgewing het u moontlik meer as een houer.
As u nie groepe op u gasheer het nie, kan u die volgende opdrag gebruik om dit te installeer en dan te kontroleer hier (vir Ubuntu) oor hoe om dit te konfigureer.
Ons kan die houers toewys aan beperkte CPU-bronne via die – cpu-aandele en –cpuset-cpus
Die volgende voorbeeld van die opdrag toon dat die prodnginx-houerproses slegs op die eerste kern uitgevoer word via –cpuset-cpus en word 20 CPU toegeken via –cpu-aandele, terwyl die proxnginx-houerproses op die eerste twee CPU-kerns uitgevoer word en 20 CPU.
docker run -d – naam prodnginx –cpuset-cpus = 0 – cpu-aandele = 20 nginx
docker run -d – naam testnginx –cpuset-cpus = 2 – cpu-aandele = 20 nginx
Tik dan die kommandodokerstatistiek om die CPU-gebruik deur die prodnginx- en testnginx-houers te besigtig
CONTAINER ID NAAM CPU% MEM GEBRUIK / BEPERK MEM% NET I / O BLOCK I / O
Dit is 'n goeie idee om CPU-aandele vir 'n docker-gasheer te definieer as daar meer as een houer op is.
Hantering van houers met naamruimtes
'N Naamruimte kan verhoed dat houers as bevoorregte gebruikers loop, wat kan help om voorwaardes eskalerende aanvalle te vermy.
Ons kan naamruimte in docker inskakel deur gebruik te maak van / etc / subuid en / etc / subgid lêers soos hieronder getoon.
skep 'n gebruiker met die adduser-opdrag
Stel 'n subuid vir die gebruiker dockremap op
Stel dan subgid vir die gebruiker dockremap op
Maak die daemon.json-lêer oop en vul dit met die volgende inhoud om die userns-remap-kenmerk aan die gebruiker dockremap te koppel
"userns-verander om": "dockremap"
Druk op: wq om die lêer van daemon.json te stoor en toe te maak en herbegin uiteindelik docker om naamruimtes op 'n docker-gasheer moontlik te maak
sudo /etc/init.d/docker herbegin
Die beveiliging van die Docker Daemon
Dit is ook nodig om die Docker-dememon op te stel om veilige kommunikasie tussen docker-kliënt en docker-daemon via TLS te verseker.
Gebruik die volgende opdrag om die daemon.json-lêer oop te maak en die volgende inhoud te kopieer en plak (vervang die IP met u werklike) soos hieronder getoon.
"gashere": ["tcp: //192.168.16.5: 2376"]
Die beveiliging van Docker-komponente
Kom ons kyk hoe ons instrumente soos gebruik kan maak CodeNotary en notaris bediener om beelde te onderteken om vervalsing van afbeeldings te vermy. Daarbenewens is dit ook nodig om beelde te skandeer net om seker te maak dat beelde nie propvol kwesbaarhede is nie
Ons sal die Docker-notarisbediener gebruik om prente te teken en te verifieer en te gebruik Anker enjin om beelde na kwesbaarhede te skandeer.
Verifieer prente met die notarisbediener
Voordat ons die Notaris-bediener kan gebruik om beelde te teken, moet ons dit aflaai en installeer. Ons sal Docker Compose gebruik om 'n notarisbediener op te stel.
Voer die opdrag hieronder uit om die nuutste weergawe van Docker Compose af te laai
sudo krul -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s) – $ (uname -m)" -o / usr / local / bin / docker-komponeer
Pas uitvoerbare toestemmings toe op die docker-kompos soos hieronder getoon
sudo chmod 700 / usr / local / bin / docker-komponeer
U kan toets of u docker-kompos suksesvol geïnstalleer het via die volgende opdrag
docker-komponeer – weergawe
Nou kan ons die notarisbediener installeer via docker-compose
Die opdrag hierbo kloon of kopieer die notarisbediener vanaf die notaris bewaarplek
Begin die notarisbediener en ondertekenaar via die opdragte hieronder:
Kopieer dan die konfigurasie en toets sertifikate na u plaaslike notarisgids met behulp van die opdrag hieronder
mkdir -p ~ /. notaris && cp cmd / notaris / config.json cmd / notary / root-ca.crt ~ /. notaris
Voer nou die volgende opdrag uit om die notarisbediener aan die docker-kliënt te koppel
voer DOCKER_CONTENT_TRUST = 1 uit
uitvoer DOCKER_CONTENT_TRUST_SERVER = https: // notarisbediener: 4443
Genereer 'n delegeringsleutelpaar via die opdrag hieronder
docker trust sleutel genereer mike –dir ~. / docker / trust
Laat ons nou 'n teiken nuwe sleutels skep vir ingeval die bewaarplek nie bestaan ​​nie
Dan kan u u docker-beeld onderteken met behulp van die command-docker trust-teken. U moet die docker-beeld vanaf die dock-naaf trek en weer etiketteer met behulp van die opdrag-docker-trek- en docker-tag onderskeidelik.
docker vertroue teken mikedem0 / nginx: nuutste
U kan ook dockerprente skandeer vir kwesbaarhede en foute met die konfigurasie. U kan hier kyk om uit te vind hoe u Anchor Engine kan gebruik om na kwesbaarhede te soek en Docker Bench Security om na foute in die konfigurasie te kyk.
Ek hoop dat bogenoemde u 'n idee gee oor die sekuriteitsdocker vir die produksie-omgewing. Miskien wil u ook kyk na hierdie Udemy-kursus haak en beveilig Docker-houers.