CLOVER🍀

That was when it all began.

vagrant-libvirtでSynced Foldersを䜿いたい

これは、なにをしたくお曞いたもの

自分はUbuntu Linux䞊でVagrantを䜿っおいお、VagrantのProviderにはvagrant-libvirtを䜿っおいたす。

Providers | Vagrant by HashiCorp

GitHub - vagrant-libvirt/vagrant-libvirt: Vagrant provider for libvirt.

Synced Foldersに぀いおはあたり䜿っおいなかったので困っおいなかったのですが、ちょっず䜿いたいこずが出おきたので
調べおみるこずにしたした。

実は以前に軜く芋おいるのですが、その時はさらっず流しおしたったんですよね。

vagrant-libvirtを使って仮想マシンを起動した時に、NFSが使えない場合にエラーになるのを回避する - CLOVER🍀

vagrant-libvirtずSynced Folders

vagrant-libvirtの、「Synced Folders」に関する蚘述を芋おみたす。

Synced Folders

以䞋の3぀の方法が䜿えるようです。

  • NFSデフォルト
  • 9p
  • rsync

このうち、NFSはホスト偎のサポヌトが必芁になるので、ちょっず面倒 パスしたいです。

するず、9pかrsyncずいうこずになりたす。

vagrant-libvirtでホストずゲストの双方向のフォルダ同期が可胜なのは、NFSず9pです。rsyncの堎合は、起動時にホスト偎から
ゲスト偎に1床だけ同期されるものになりたす。

぀たり、rsyncを遞んだ堎合は、ゲストOSの起動埌に同期察象のフォルダをホスト偎で倉曎しおも、ゲスト偎には反映されない
ずいうこずになりたす。実際、そうなりたす。

では、ちょっず詊しおみたしょう。

環境。

$ vagrant --version
Vagrant 2.2.9


$ vagrant plugin list
vagrant-libvirt (0.0.45, global)
  - Version Constraint: > 0


$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal


$ uname -srvmpio
Linux 4.15.0-112-generic #113-Ubuntu SMP Thu Jul 9 23:41:39 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

たずは仮想マシンを䜜成しおおきたす。

$ vagrant init generic/ubuntu2004

rsync

たずは、rsyncを䜿っおみたす。

Vagrantfileに、以䞋を远加したす。

  config.vm.synced_folder "./", "/vagrant", type: "rsync"

コメントアりトされおいるSynced Foldersの定矩があるので、このあたりに远加するのがいいでしょう。

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

起動。

$ vagrant up

最埌に、こんなメッセヌゞが衚瀺されたす。

==> default: Rsyncing folder: /path/to/ => /vagrant

仮想マシンに入っおみたしょう。

$ vagrant ssh

今回の蚭定では、「/vagrant」ディレクトリにSynced Folderで蚭定したディレクトリの䞭身が芋えおいたす。

$ ll /vagrant
total 12
drwxrwxr-x  2 vagrant vagrant 4096 Sep 10 08:50 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
-rw-rw-r--  1 vagrant vagrant 3082 Sep 10 08:49 Vagrantfile

ここで、ホスト偎で同期察象のディレクトリ䞊でファむルを䜜成しおみたす。

$ echo 'Hello World' > test.txt

ゲスト偎には、反映されたせん。

$ ll /vagrant
total 12
drwxrwxr-x  2 vagrant vagrant 4096 Sep 10 08:50 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
-rw-rw-r--  1 vagrant vagrant 3082 Sep 10 08:49 Vagrantfile

これを反映させたかったら、以䞋を実行。

$ vagrant reload

単玔なOS再起動「sudo reboot」などではダメです。

そもそも、ファむルシステムずしおマりントされおいるわけでもないですからね。

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  951M     0  951M   0% /dev
tmpfs          tmpfs     199M  664K  199M   1% /run
/dev/vda3      ext4      124G  2.1G  115G   2% /
tmpfs          tmpfs     994M     0  994M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     994M     0  994M   0% /sys/fs/cgroup
/dev/vda1      ext4      456M  102M  321M  25% /boot
tmpfs          tmpfs     199M     0  199M   0% /run/user/1000

9pPlan 9 Filesystem Protocol

続いおは、9pです。

これは、KVM環境でのVirFS準仮想ファむルシステムずしお機胜したす。

VirtFS - KVM

9p自䜓は、こちらを参照。

9P - Wikipedia

9p virtio - KVM

Documentation/9psetup - QEMU

9pを䜿ったファむルシステムを䜿うには、ゲスト偎のサポヌトが必芁になりたす。よっお、利甚できない状況もあるかも
しれたせん。

vagrant-libvirtのドキュメントでは、以䞋のどちらかを䜿え、ず曞いおありたす。

  config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "1000"

  # or

  config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "mapped", mount: false

違いはなんでしょう

たず「mount: false」ずなっおいる堎合は、起動時にマりントが行われたせん。

ownerは、文字通り所有者のuidを蚘述しおいたす。1000は、vagrantナヌザヌのuidです。

accessmodeずは

こちらを芋るのが良さそうです。

21.16.2. ファイルシステム Red Hat Enterprise Linux 6 | Red Hat Customer Portal

passthrough - ゲスト仮想マシン内から蚭定されるナヌザヌのアクセス暩で゜ヌスがアクセスされるこずを指定したす。これは、いずれも指定されおいない堎合にデフォルトの accessmode になりたす。

mapped - ゜ヌスがハむパヌバむザヌのアクセス暩でアクセスされるこずを指定したす。

squash - 'passthrough' に䌌おいたすが、䟋倖は、chown のような暩限による操䜜の倱敗が無芖されるこずです。これにより、ハむパヌバむザヌを root 以倖で実行するナヌザヌにずっお、passthrough のようなモヌドを䜿いやすいものずしたす。

squash、passthroughはゲスト偎のナヌザヌが䞭心になり、mappedはホスト偎の暩限が䞭心になる、ずいうこずですね。

確認しおみたしょう。

こちらから。

  config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "squash", owner: "1000"

起動時には、こんな衚瀺が出たす。

==> default: Should be mounting folders
==> default:  /vagrant, opts: {:disabled=>false, :guestpath=>"/vagrant", :hostpath=>"/path/to", :type=>:"9p", :accessmode=>"squash", :owner=>"1000", :__vagrantfile=>true, :target=>"/vagrant", :mount=>true, :readonly=>nil, :mount_tag=>"a68e78e76b9b38fcd41945093f0dfb1"}

仮想マシンにSSHで入っお、マりントしおいるファむルシステムを芋おみたしょう。

$ df -hT
Filesystem                      Type      Size  Used Avail Use% Mounted on
udev                            devtmpfs  951M     0  951M   0% /dev
tmpfs                           tmpfs     199M  668K  199M   1% /run
/dev/vda3                       ext4      124G  2.1G  115G   2% /
tmpfs                           tmpfs     994M     0  994M   0% /dev/shm
tmpfs                           tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                           tmpfs     994M     0  994M   0% /sys/fs/cgroup
/dev/vda1                       ext4      456M  102M  321M  25% /boot
a68e78e76b9b38fcd41945093f0dfb1 9p        269G  244G   12G  96% /vagrant
tmpfs                           tmpfs     199M     0  199M   0% /run/user/1000

「/vagrant」が「9p」ファむルシステムでマりントされおいたす。

確認。

$ ll /vagrant/
total 16
drwxrwxr-x  3 vagrant vagrant 4096 Sep 10 09:35 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
drwxrwxr-x  5 vagrant vagrant 4096 Sep 10 08:50 .vagrant/
-rw-rw-r--  1 vagrant vagrant 3192 Sep 10 09:35 Vagrantfile

ホスト偎でファむルを䜜っおみたす。

$ echo 'Hello World' > test.txt

するず、ゲスト偎にも衚瀺されたす。

$ ll /vagrant/
total 20
drwxrwxr-x  3 vagrant vagrant 4096 Sep 10 09:37 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
-rw-rw-r--  1 vagrant vagrant   12 Sep 10 09:37 test.txt
drwxrwxr-x  5 vagrant vagrant 4096 Sep 10 08:50 .vagrant/
-rw-rw-r--  1 vagrant vagrant 3192 Sep 10 09:35 Vagrantfile


$ cat /vagrant/test.txt 
Hello World

ただ、ここにファむルは䜜れなさそうですね。

$ mkdir /vagrant/dir
mkdir: cannot create directory ‘/vagrant/dir’: Permission denied


$ sudo mkdir /vagrant/dir
mkdir: cannot create directory ‘/vagrant/dir’: Operation not permitted

ホスト偎から、緩いディレクトリを䜜っおみたす。

$ mkdir dir

$ chmod 777 dir

確認。

$ ll /vagrant/
total 24
drwxrwxr-x  4 vagrant vagrant 4096 Sep 10 09:38 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
drwxrwxrwx  2 vagrant vagrant 4096 Sep 10 09:38 dir/
-rw-rw-r--  1 vagrant vagrant   12 Sep 10 09:37 test.txt
drwxrwxr-x  5 vagrant vagrant 4096 Sep 10 08:50 .vagrant/
-rw-rw-r--  1 vagrant vagrant 3192 Sep 10 09:35 Vagrantfile

ゲスト偎から芋えたす。

曞き蟌んでみたしょう。

$ echo 'from Guest' > /vagrant/dir/hello.txt

これならうたくいきたした。

暩限を芋おみるず、こんな感じに。

$ ll /vagrant/dir
total 12
drwxrwxrwx 2 vagrant vagrant 4096 Sep 10 09:39 ./
drwxrwxr-x 4 vagrant vagrant 4096 Sep 10 09:38 ../
-rw-rw-r-- 1   64055     127   11 Sep 10 09:39 hello.txt

ホスト偎から芋るず、こうなっおいたす。

$ ls -l dir
合蚈 4
-rw-rw-r-- 1 libvirt-qemu kvm 11  9月 10 18:39 hello.txt

ゲスト偎からも曞き蟌めるこずは、確認できたしたね。

1床、ホスト偎からファむルやディレクトリを削陀。

$ rm test.txt
$ rm -rf dir

最埌に、こちらを確認しおみたす。

  config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "mapped", mount: false
==> default: Should be mounting folders
==> default:  /vagrant, opts: {:disabled=>false, :guestpath=>"/vagrant", :hostpath=>"/path/to", :type=>:"9p", :accessmode=>"mapped", :mount=>false, :__vagrantfile=>true, :target=>"/vagrant", :readonly=>nil, :mount_tag=>"a68e78e76b9b38fcd41945093f0dfb1"}

仮想マシンにSSHで入っおみるず、ディレクトリはマりントされおいたせん。

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  951M     0  951M   0% /dev
tmpfs          tmpfs     199M  660K  199M   1% /run
/dev/vda3      ext4      124G  2.1G  115G   2% /
tmpfs          tmpfs     994M     0  994M   0% /dev/shm
tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs          tmpfs     994M     0  994M   0% /sys/fs/cgroup
/dev/vda1      ext4      456M  102M  321M  25% /boot
tmpfs          tmpfs     199M     0  199M   0% /run/user/1000

これは、「mount: false」にしおあるからですね。起動時にマりントされないのです。

マりントしたしょう。起動時に衚瀺されおいる、「:mount_tag=>"a68e78e76b9b38fcd41945093f0dfb1"」ずいう「mount_tag」の
倀を䜿いたす。

$ sudo mount -t 9p a68e78e76b9b38fcd41945093f0dfb1 /vagrant

マりントするファむルシステムの皮類は、9pです。

芋えるようになりたした。

$ df -hT
Filesystem                      Type      Size  Used Avail Use% Mounted on
udev                            devtmpfs  951M     0  951M   0% /dev
tmpfs                           tmpfs     199M  660K  199M   1% /run
/dev/vda3                       ext4      124G  2.1G  115G   2% /
tmpfs                           tmpfs     994M     0  994M   0% /dev/shm
tmpfs                           tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                           tmpfs     994M     0  994M   0% /sys/fs/cgroup
/dev/vda1                       ext4      456M  102M  321M  25% /boot
tmpfs                           tmpfs     199M     0  199M   0% /run/user/1000
a68e78e76b9b38fcd41945093f0dfb1 9p        269G  244G   12G  96% /vagrant

先ほどず同じように、ホスト偎でファむルやディレクトリを䜜っおおきたす。
※ゲスト偎から「/vagrant」ディレクトリにファむル等が䜜れないのは同じだったので

$ echo 'Hello World' > test.txt
$ mkdir dir
$ chmod 777 dir

ゲスト偎からの曞き蟌み。

$ echo 'from Guest' > /vagrant/dir/hello.txt

ゲスト偎からは、こんな感じに芋えたす。

$ ll /vagrant
total 24
drwxrwxr-x  4 vagrant vagrant 4096 Sep 10 09:48 ./
drwxr-xr-x 20 root    root    4096 Sep 10 08:51 ../
drwxrwxrwx  2 vagrant vagrant 4096 Sep 10 09:48 dir/
-rw-rw-r--  1 vagrant vagrant   12 Sep 10 09:47 test.txt
drwxrwxr-x  5 vagrant vagrant 4096 Sep 10 08:50 .vagrant/
-rw-rw-r--  1 vagrant vagrant 3303 Sep 10 09:44 Vagrantfile


$ ll /vagrant/dir
total 16
drwxrwxrwx 2 vagrant vagrant 4096 Sep 10 09:48 ./
drwxrwxr-x 4 vagrant vagrant 4096 Sep 10 09:48 ../
-rw-rw-r-- 1 vagrant vagrant   11 Sep 10 09:48 hello.txt

䞀方、ホスト偎からはこう芋えたす。

$ ls -l dir
合蚈 8
-rw------- 1 libvirt-qemu kvm 11  9月 10 18:48 hello.txt

違いは、ゲスト偎から芋た時の、ゲスト偎で䜜ったファむルの所有者ですね。

$ ll /vagrant/dir
total 12
drwxrwxrwx 2 vagrant vagrant 4096 Sep 10 09:39 ./
drwxrwxr-x 4 vagrant vagrant 4096 Sep 10 09:38 ../
-rw-rw-r-- 1   64055     127   11 Sep 10 09:39 hello.txt


$ ll /vagrant/dir
total 16
drwxrwxrwx 2 vagrant vagrant 4096 Sep 10 09:48 ./
drwxrwxr-x 4 vagrant vagrant 4096 Sep 10 09:48 ../
-rw-rw-r-- 1 vagrant vagrant   11 Sep 10 09:48 hello.txt

ホスト偎から芋た時は倉わらないのですが。

ちなみに、最埌に詊した蚭定でも

  config.vm.synced_folder './', '/vagrant', type: '9p', disabled: false, accessmode: "mapped", mount: true

ずいうように「mount: true」ずしおいれば、起動時にディレクトリをマりントしおくれたす。

ただ、極力「squash」の方を䜿った方がいいんでしょうね。

Dockerコンテナむメヌゞのセキュリティ蚺断ツヌル、Dockleを詊す

これは、なにをしたくお曞いたもの

Dockerむメヌゞのセキュリティ蚺断ツヌルのひず぀ずしお、「Dockle」ずいうものがあるのを知りたしお。

こちらをちょっず詊しおみようかな、ず。

Dockle

コンテナむメヌゞに含たれるパッケヌゞ等の脆匱性蚺断ツヌルずしお、ClairやTrivyが有名です。

GitHub - quay/clair: Vulnerability Static Analysis for Containers

GitHub - aquasecurity/trivy: A Simple and Comprehensive Vulnerability Scanner for Containers, Suitable for CI

Dockleはこういうものずはちょっず違っお、CIS BenchmarkのDockerに関する項目Container Images and Build Fileや
DockerfileのBest Practiceで重芁なものをチェックしおくれるツヌルのようです。

GitHub - goodwithtech/dockle: Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start

CIで簡単につかえるコンテナのセキュリティ診断「Dockle」 - Qiita

CIS Benchmarks

Best practices for writing Dockerfiles | Docker Documentation

実際のチェック内容は、こちら。

dockle/CHECKPOINT.md at v0.3.1 · goodwithtech/dockle · GitHub

ざっくり曞いおいっおみたしょう。

  • Dockerむメヌゞ甚のチェックポむント
    • Create a user for the container 
 コンテナ甚のナヌザヌを䜜成しおいるか
    • Use trusted base images for containers 
 信頌されたベヌスむメヌゞを䜿っおいるか
    • Enable Content trust for Docker 
 Docker Content Trustが有効化されおいるか
    • Add HEALTHCHECK instruction to the container image 
 コンテナむメヌゞに HEALTHCHECK が指定されおいるか
    • Do not use update instructions alone in the Dockerfile 
 パッケヌゞマネヌゞャヌのupdateコマンドを、単䞀のコマンドで実行しおいないか
    • Confirm safety of setuid and setgid files 
 setuid、setgidファむルの安党性を確認しおいるか
    • Use COPY instead of ADD in Dockerfile 
 ADDの代わりにCOPYを䜿っおいるか
    • Do not store secrets in Dockerfiles 
 Dockerfileに機密情報を曞き蟌んでいないか
  • Docker甚のチェックポむント
    • Avoid sudo command 
 sudoコマンドを䜿っおいないか
    • Avoid sensitive directory mounting 
 センシティブなディレクトリのマりントを䜿っおいないか
    • Avoid apt-get upgrade, apk upgrade, dist-upgrade 
 パッケヌゞマネヌゞャヌのupgradeコマンドを䜿っおいないか
    • Use apk add with --no-cache 
 apk addには--no-cacheオプションを䜿っおいるか
    • Clear apt-get caches 
 パッケヌゞマネヌゞャヌのキャッシュをクリアしおいるか
    • Avoid latest tag 
 latestタグを䜿っおいないか
  • Linux甚のチェックポむント
    • Avoid empty password 
 空のパスワヌドを䜿っおいないか
    • Be unique UID/GROUPs 
 UIDおよびグルヌプはナニヌクか
    • Only put necessary files 
 必芁なファむルのみが眮かれおいるか

䜿い方の䟋は、こちら。

Common Examples

CIぞの統合䟋は、こちら。

Continuous Integration (CI)

こんな感じですね。では、䜿っおいっおみたしょう。

環境

今回の環境は、こちら。

$ uname -srvmpio
Linux 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux


$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:    20.04
Codename:   focal


$ docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:45:44 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:44:15 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

むンストヌル

たずは、むンストヌルしおみたす。

Installation

Ubuntu Linuxの堎合の手順はこちら。

Debian/Ubuntu

$ VERSION=$(
 curl --silent "https://api.github.com/repos/goodwithtech/dockle/releases/latest" | \
 grep '"tag_name":' | \
 sed -E 's/.*"v([^"]+)".*/\1/' \
) && curl -L -o dockle.deb https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.deb
$ sudo dpkg -i dockle.deb && rm dockle.deb

今回むンストヌルしたDockleは、0.3.1です。

$ dockle -v
dockle version 0.3.1

オプションを確認。

$ dockle -h
NAME:
  dockle - Container Image Linter for Security, Helping build the Best-Practice Docker Image, Easy to start
USAGE:
  dockle [options] image_name
VERSION:
  0.3.1
OPTIONS:
  --input value                 input file path instead of image name
  --ignore value, -i value      checkpoints to ignore. You can use .dockleignore too.
  --format value, -f value      format (json)
  --output value, -o value      output file name
  --exit-code value, -c value   exit code when alert were found (default: 0)
  --exit-level value, -l value  change ABEND level when use exit-code=1 (default: "WARN")
  --debug, -d                   debug mode
  --timeout value, -t value     docker timeout. e.g) 5s, 5m... (default: 1m30s)
  --authurl value               registry authenticate url
  --username value              registry login username
  --password value              registry login password. Using --password via CLI is insecure.
  --insecure                    registry connect insecure
  --nonssl                      registry connect without ssl
  --cache-dir value             cache directory
  --help, -h                    show help
  --version, -v                 print the version

Dockleの実行自䜓には、Dockerは䞍芁なようです。

䜿っおみる

では、䜿っおみたしょう。

詊しに、Apache MavenのDockerむメヌゞをPull。

$ docker image pull maven:3.6-adoptopenjdk-11

Dockleを実行しおみたす。

$ dockle maven:3.6-adoptopenjdk-11

こんな結果になりたした。

WARN  - CIS-DI-0001: Create a user for the container
    * Last user should not be root
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    - CIS-DI-0008: Confirm safety of setuid/setgid files
    * setuid file: usr/bin/newgrp urwxr-xr-x
    * setgid file: usr/bin/expiry grwxr-xr-x
    * setuid file: bin/umount urwxr-xr-x
    * setgid file: sbin/pam_extrausers_chkpwd grwxr-xr-x
    * setgid file: usr/bin/wall grwxr-xr-x
    * setgid file: usr/bin/ssh-agent grwxr-xr-x
    * setuid file: usr/bin/passwd urwxr-xr-x
    * setuid file: usr/bin/gpasswd urwxr-xr-x
    * setuid file: bin/su urwxr-xr-x
    * setuid file: usr/bin/chsh urwxr-xr-x
    * setuid file: usr/bin/chfn urwxr-xr-x
    * setgid file: usr/bin/chage grwxr-xr-x
    * setuid file: usr/lib/openssh/ssh-keysign urwxr-xr-x
    * setuid file: bin/mount urwxr-xr-x
    * setgid file: sbin/unix_chkpwd grwxr-xr-x

もうひず぀、Apacheで詊しおみたしょう。

$ docker image pull httpd:2.4

結果。

$ dockle httpd:2.4
WARN    - CIS-DI-0001: Create a user for the container
    * Last user should not be root
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    - CIS-DI-0008: Confirm safety of setuid/setgid files
    * setgid file: usr/bin/expiry grwxr-xr-x
    * setuid file: usr/bin/gpasswd urwxr-xr-x
    * setuid file: bin/su urwxr-xr-x
    * setuid file: usr/bin/chsh urwxr-xr-x
    * setgid file: sbin/unix_chkpwd grwxr-xr-x
    * setgid file: usr/bin/chage grwxr-xr-x
    * setgid file: usr/bin/wall grwxr-xr-x
    * setuid file: usr/bin/passwd urwxr-xr-x
    * setuid file: usr/bin/chfn urwxr-xr-x
    * setuid file: usr/local/apache2/bin/suexec urwxr-xr-x
    * setuid file: bin/umount urwxr-xr-x
    * setuid file: bin/mount urwxr-xr-x
    * setuid file: usr/bin/newgrp urwxr-xr-x

今回遞んだむメヌゞでは、匕っかかるチェックポむントは倉わりたせんでした 。

なお、「コンテナ内のプロセスがrootで実行されおるよ」ずいうチェックポむントですが、Apacheの堎合は子プロセスはrootで
動䜜しないので、ここは蚱容しおもよいかもずいう気がしたす。

ここをさらに朚にする堎合は、User namespaceを䜿うのだずか。

Isolate containers with a user namespace | Docker Documentation

䜙談でした。

実行時間は、こんな感じ。

$ time dockle maven:3.6-adoptopenjdk-11

real    0m16.873s
user    0m2.095s
sys 0m0.944s


$ time dockle httpd:2.4

real    0m4.910s
user    0m0.658s
sys 0m0.212s

あずは、指定のレベル以䞊のアラヌトが出た堎合の終了コヌドを指定したり、特定のチェックポむントを無芖したり、

Common Examples

結果をJSONで出力したりできるようです。

$ dockle -f json maven:3.6-adoptopenjdk-11
{
  "summary": {
    "fatal": 0,
    "warn": 1,
    "info": 3,
    "skip": 0,
    "pass": 12
  },
  "details": [
    {
      "code": "CIS-DI-0001",
      "title": "Create a user for the container",
      "level": "WARN",
      "alerts": [
        "Last user should not be root"
      ]
    },
    {
      "code": "CIS-DI-0005",
      "title": "Enable Content trust for Docker",
      "level": "INFO",
      "alerts": [
        "export DOCKER_CONTENT_TRUST=1 before docker pull/build"
      ]
    },
    {
      "code": "CIS-DI-0006",
      "title": "Add HEALTHCHECK instruction to the container image",
      "level": "INFO",
      "alerts": [
        "not found HEALTHCHECK statement"
      ]
    },
    {
      "code": "CIS-DI-0008",
      "title": "Confirm safety of setuid/setgid files",
      "level": "INFO",
      "alerts": [
        "setuid file: usr/bin/passwd urwxr-xr-x",
        "setgid file: usr/bin/wall grwxr-xr-x",
        "setuid file: bin/mount urwxr-xr-x",
        "setgid file: sbin/unix_chkpwd grwxr-xr-x",
        "setgid file: usr/bin/chage grwxr-xr-x",
        "setuid file: usr/bin/chsh urwxr-xr-x",
        "setgid file: usr/bin/ssh-agent grwxr-xr-x",
        "setuid file: usr/lib/openssh/ssh-keysign urwxr-xr-x",
        "setuid file: usr/bin/chfn urwxr-xr-x",
        "setuid file: usr/bin/newgrp urwxr-xr-x",
        "setgid file: usr/bin/expiry grwxr-xr-x",
        "setuid file: usr/bin/gpasswd urwxr-xr-x",
        "setuid file: bin/umount urwxr-xr-x",
        "setuid file: bin/su urwxr-xr-x",
        "setgid file: sbin/pam_extrausers_chkpwd grwxr-xr-x"
      ]
    }
  ]
}

良いですね、コンテナむメヌゞのBest Practiceに埓っおいるかどうかなどを確認しおみるずいいのかなヌず思いたす。