Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker
Hai Habr!

Dalam realiti hari ini, disebabkan peningkatan peranan kontena dalam proses pembangunan, isu memastikan keselamatan pelbagai peringkat dan entiti yang dikaitkan dengan kontena tidak berada di tempat terakhir. Melakukan semakan secara manual adalah tugas yang sukar, jadi adalah baik untuk mengambil sekurang-kurangnya langkah awal ke arah mengautomasikan proses ini.

Dalam artikel ini, saya akan berkongsi skrip siap sedia untuk melaksanakan beberapa utiliti keselamatan Docker dan arahan tentang cara menyediakan pendirian demo kecil untuk menguji proses ini. Anda boleh menggunakan bahan untuk bereksperimen dengan cara mengatur proses menguji keselamatan imej dan arahan Dockerfile. Adalah jelas bahawa infrastruktur pembangunan dan pelaksanaan adalah berbeza untuk semua orang, jadi di bawah saya akan memberikan beberapa pilihan yang mungkin.

Utiliti Pemeriksaan Keselamatan

Terdapat sejumlah besar aplikasi dan skrip pembantu berbeza yang melakukan semakan pada pelbagai aspek infrastruktur Docker. Sebahagian daripadanya telah pun diterangkan dalam artikel sebelumnya (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), dan dalam artikel ini saya ingin memberi tumpuan kepada tiga daripadanya, yang meliputi sebahagian besar keperluan keselamatan untuk imej Docker yang dibina semasa proses pembangunan. Selain itu, saya juga akan menunjukkan contoh bagaimana ketiga-tiga utiliti ini boleh digabungkan menjadi satu saluran paip untuk melakukan pemeriksaan keselamatan.

Hadolin
https://github.com/hadolint/hadolint

Utiliti konsol yang agak mudah yang membantu menilai dahulu ketepatan dan keselamatan arahan Dockerfile (contohnya, hanya menggunakan pendaftaran imej yang dibenarkan atau menggunakan sudo).

Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Dockle
https://github.com/goodwithtech/dockle

Utiliti konsol yang berfungsi pada imej (atau pada tarball imej yang disimpan) yang menyemak ketepatan dan keselamatan imej tertentu seperti itu dengan menganalisis lapisan dan konfigurasinya - perkara yang dibuat pengguna, arahan yang digunakan, jumlah yang dipasang , kehadiran kata laluan kosong, dsb. e. Walaupun bilangan semakan tidak begitu besar dan berdasarkan beberapa semakan dan cadangan sendiri Penanda Aras CIS (Pusat Keselamatan Internet). untuk buruh pelabuhan.
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Trivy
https://github.com/aquasecurity/trivy

Utiliti ini bertujuan untuk mencari dua jenis kelemahan - masalah binaan OS (Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu disokong) dan masalah pergantungan (Gemfile.lock, Pipfile.lock, composer.lock, package-lock .json , yarn.lock, Cargo.lock). Trivy boleh mengimbas kedua-dua imej dalam repositori dan imej tempatan, dan juga mengimbas berdasarkan fail .tar yang dipindahkan dengan imej Docker.

Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Pilihan Pelaksanaan Utiliti

Untuk mencuba aplikasi yang diterangkan dalam keadaan terpencil, saya akan memberikan arahan untuk memasang semua utiliti sebagai sebahagian daripada proses yang dipermudahkan.

Idea utama adalah untuk menunjukkan cara anda boleh melaksanakan pemeriksaan kandungan automatik untuk imej Dockerfiles dan Docker yang dibuat semasa pembangunan.

Pengesahan itu sendiri terdiri daripada langkah-langkah berikut:

  1. Menyemak ketepatan dan keselamatan arahan Dockerfile dengan utiliti linter Hadolin
  2. Menyemak ketepatan dan keselamatan imej akhir dan pertengahan - utiliti Dockle
  3. Menyemak Kerentanan Umum (CVE) dalam imej asas dan beberapa kebergantungan - oleh utiliti Trivy

Kemudian dalam artikel saya akan memberikan tiga pilihan untuk melaksanakan langkah-langkah ini:
Yang pertama adalah dengan mengkonfigurasi saluran paip CI / CD menggunakan contoh GitLab (dengan penerangan tentang proses menaikkan contoh ujian).
Yang kedua ialah menggunakan skrip shell.
Yang ketiga ialah dengan membina imej Docker untuk mengimbas imej Docker.
Anda boleh memilih pilihan yang paling sesuai dengan anda, memindahkannya ke infrastruktur anda dan menyesuaikannya dengan keperluan anda.

Semua fail yang diperlukan dan arahan tambahan juga terdapat dalam repositori: https://github.com/Swordfish-Security/docker_cicd

Penyepaduan GitLab CI/CD

Dalam pilihan pertama, kita akan melihat bagaimana semakan keselamatan boleh dilaksanakan menggunakan sistem repositori GitLab sebagai contoh. Di sini kita akan melalui langkah-langkah dan melihat cara untuk menyediakan persekitaran ujian dengan GitLab dari awal, mencipta proses imbasan dan menjalankan utiliti untuk menguji Dockerfile ujian dan imej rawak - aplikasi JuiceShop.

Memasang GitLab
1. Pasang Docker:

sudo apt-get update && sudo apt-get install docker.io

2. Tambahkan pengguna semasa ke kumpulan docker supaya anda boleh bekerja dengan docker tanpa menggunakan sudo:

sudo addgroup <username> docker

3. Cari IP anda:

ip addr

4. Pasang dan jalankan GitLab dalam bekas, gantikan alamat IP dalam nama hos dengan anda sendiri:

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

Kami sedang menunggu GitLab menyelesaikan semua prosedur pemasangan yang diperlukan (anda boleh mengikuti proses melalui output fail log: docker logs -f gitlab).

5. Buka IP tempatan anda dalam penyemak imbas dan lihat halaman yang menawarkan untuk menukar kata laluan untuk pengguna root:
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker
Tetapkan kata laluan baharu dan pergi ke GitLab.

6. Buat projek baharu, contohnya cicd-test dan mulakan dengan fail permulaan BACA.md:
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker
7. Sekarang kita perlu memasang GitLab Runner: ejen yang akan menjalankan semua operasi yang diperlukan atas permintaan.
Muat turun versi terkini (dalam kes ini, di bawah Linux 64-bit):

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. Jadikan ia boleh laku:

sudo chmod +x /usr/local/bin/gitlab-runner

9. Tambah pengguna OS untuk Runner dan mulakan perkhidmatan:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

Ia sepatutnya kelihatan seperti ini:

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. Sekarang kami mendaftarkan Runner supaya ia boleh berinteraksi dengan contoh GitLab kami.
Untuk melakukan ini, buka halaman Tetapan-CI/CD (http://OUR_ IP_ADDRESS/root/cicd-test/-/settings/ci_cd) dan pada tab Runners cari URL dan token Pendaftaran:
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker
11. Daftarkan Pelari dengan menggantikan URL dan token Pendaftaran:

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

Hasilnya, kami mendapat GitLab yang berfungsi sedia, di mana kami perlu menambah arahan untuk memulakan utiliti kami. Dalam tunjuk cara ini, kami tidak mempunyai langkah membina aplikasi dan kontena, tetapi dalam persekitaran sebenar mereka akan mendahului langkah imbasan dan menjana imej dan Fail Docker untuk analisis.

konfigurasi saluran paip

1. Tambahkan fail pada repositori mydockerfile.df (ini adalah ujian Dockerfile yang akan kami uji) dan fail konfigurasi proses GitLab CI/CD .gitlab-cicd.yml, yang menyenaraikan arahan untuk pengimbas (perhatikan titik dalam nama fail).

Fail konfigurasi .yaml mengandungi arahan untuk menjalankan tiga utiliti (Hadolint, Dockle dan Trivy) yang akan menghuraikan fail Docker yang dipilih dan imej yang dinyatakan dalam pembolehubah DOCKERFILE. Semua fail yang diperlukan boleh diambil dari repositori: https://github.com/Swordfish-Security/docker_cicd/

Ekstrak daripada mydockerfile.df (ini ialah fail abstrak dengan satu set arahan sewenang-wenangnya hanya untuk menunjukkan cara utiliti berfungsi). Pautan terus ke fail: mydockerfile.df

Kandungan mydockerfile.df

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

Konfigurasi YAML kelihatan seperti ini (fail itu sendiri boleh diambil dari pautan terus di sini: .gitlab-ci.yml):

Kandungan .gitlab-ci.yml

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

Jika perlu, anda juga boleh mengimbas imej yang disimpan sebagai arkib .tar (namun, anda perlu menukar parameter input untuk utiliti dalam fail YAML)

NB: Trivy memerlukan pemasangan rpm ΠΈ pergi. Jika tidak, ia akan menjana ralat semasa mengimbas imej berasaskan RedHat dan mendapatkan kemas kini kepada pangkalan data kerentanan.

2. Selepas menambah fail pada repositori, mengikut arahan dalam fail konfigurasi kami, GitLab akan memulakan proses bina dan imbasan secara automatik. Pada tab CI / CD β†’ Pipelines, anda boleh melihat kemajuan arahan.

Hasilnya, kami mempunyai empat tugas. Tiga daripada mereka terlibat secara langsung dalam pengimbasan, dan yang terakhir (Laporan) mengumpul laporan ringkas daripada fail bertaburan dengan hasil imbasan.
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker
Secara lalai, Trivy menghentikan pelaksanaannya jika kelemahan KRITIKAL ditemui dalam imej atau kebergantungan. Pada masa yang sama, Hadolint sentiasa mengembalikan Kejayaan dalam kod pelaksanaan, kerana pelaksanaannya sentiasa mempunyai kenyataan, yang menyebabkan binaan berhenti.

Bergantung pada keperluan khusus anda, anda boleh mengkonfigurasi kod keluar supaya utiliti ini turut menghentikan proses binaan apabila masalah kritikal tertentu dikesan. Dalam kes kami, binaan akan berhenti hanya jika Trivy mengesan kelemahan dengan keterukan yang telah kami tentukan dalam pembolehubah SHOWSTOPPER dalam .gitlab-ci.yml.
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Hasil operasi setiap utiliti boleh dilihat dalam log setiap tugas pengimbasan, terus dalam fail json dalam bahagian artifak, atau dalam laporan HTML ringkas (lebih lanjut mengenai perkara di bawah):
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

3. Untuk membentangkan laporan utiliti dalam bentuk yang lebih mudah dibaca manusia, skrip Python kecil digunakan untuk menukar tiga fail json kepada satu fail HTML dengan jadual kecacatan.
Skrip ini dilancarkan oleh tugas Laporan yang berasingan, dan artifak terakhirnya ialah fail HTML dengan laporan. Sumber skrip juga ada dalam repositori dan boleh disesuaikan dengan keperluan, warna, dll.
Kaedah dan contoh pelaksanaan utiliti pemeriksaan keselamatan Docker

Skrip Shell

Pilihan kedua sesuai untuk kes di mana anda perlu menyemak imej Docker bukan dalam sistem CI / CD, atau anda perlu mempunyai semua arahan dalam bentuk yang boleh dilaksanakan terus pada hos. Pilihan ini dilindungi oleh skrip shell siap pakai yang boleh dijalankan pada mesin maya (atau sebenar) yang bersih. Skrip mengikut arahan yang sama seperti gitlab-runner di atas.

Untuk skrip berfungsi dengan jayanya, Docker mesti dipasang pada sistem dan pengguna semasa mesti berada dalam kumpulan docker.

Skrip itu sendiri boleh didapati di sini: docker_sec_check.sh

Pada permulaan fail, pembolehubah menentukan imej mana yang harus diimbas dan tahap kecacatan yang akan menyebabkan utiliti Trivy keluar dengan kod ralat yang ditentukan.

Semasa pelaksanaan skrip, semua utiliti akan dimuat turun ke direktori docker_tools, hasil kerja mereka - dalam direktori docker_tools/json, dan HTML dengan laporan akan berada dalam fail hasil.html.

Contoh output skrip

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - β€˜Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

Imej Docker dengan semua utiliti

Sebagai alternatif ketiga, saya menyusun dua Dockerfiles mudah untuk mencipta imej dengan utiliti keselamatan. Satu Dockerfile akan membantu membina set untuk mengimbas imej dari repositori, yang kedua (Dockerfile_tar) akan membina set untuk mengimbas fail tar dengan imej.

1. Kami mengambil fail dan skrip Docker yang sesuai daripada repositori https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. Jalankan untuk pemasangan:

docker build -t dscan:image -f docker_security.df .

3. Selepas binaan selesai, buat bekas daripada imej. Pada masa yang sama, kami lulus pembolehubah persekitaran DOCKERIMAGE dengan nama imej yang kami minati dan pasang fail Docker yang kami ingin analisis dari mesin kami ke fail /dockerfile (perhatikan bahawa laluan mutlak ke fail ini diperlukan):

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

Penemuan

Kami telah merangkumi hanya satu set asas alat pengimbasan artifak Docker, yang saya fikir merangkumi sejumlah keperluan keselamatan imej yang agak berkesan. Terdapat banyak alat berbayar dan percuma lain yang boleh melakukan semakan yang sama, melukis laporan yang cantik atau berfungsi semata-mata dalam mod konsol, melindungi sistem pengurusan bekas, dsb. Gambaran keseluruhan alat ini dan cara mengintegrasikannya mungkin muncul sedikit kemudian.

Sisi positif set alat yang diterangkan dalam artikel ialah semuanya dibina pada sumber terbuka dan anda boleh mencubanya serta alatan lain yang serupa untuk mencari perkara yang betul-betul sesuai dengan keperluan dan ciri infrastruktur anda. Sudah tentu, semua kelemahan yang ditemui harus dikaji untuk kebolehgunaan dalam keadaan tertentu, tetapi ini adalah topik untuk artikel besar masa hadapan.

Saya harap arahan, skrip dan utiliti ini akan membantu anda dan menjadi titik permulaan untuk mencipta infrastruktur yang lebih selamat dalam bidang kontena.

Sumber: www.habr.com

Tambah komen