kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

Dockerのお勉強 - Alpine Linux

DockerではAlpineっていうミニミニLinuxを使うのがいいらしい
バイスとかサービスとかほとんどいらない感じだからそれがいいよね
小さければ脆弱性が入る余地も減るし

まずは軽く調べてみよう
公式

index | Alpine Linux

Small. Simple. Secure.
Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.

セキュリティも推し要素なんだな
ところでDocker界隈だとセキュリティホールが見つかったってときは
どうするのが普通なんだろう?
深刻なやつは即当てるけどそうでもなければもとのイメージで対策されるのを
待ってイメージを作り直す感じ?

muslはglibc互換のCライブラリ、BusiBoxはコマンドの実体らしい

musl - Wikipedia

musl (マッスル) は MIT License[1] でリリースされている Linux の標準Cライブラリ。開発者は Rich Felker。クリーンで、効率的で、標準に準拠した標準Cライブラリの実装を目標としている。

BusyBox - Wikipedia

BusyBox は、Coreutilsなど標準UNIXコマンドで重要な多数のプログラムを単一の実行ファイルに「詰め込んで」提供する、特殊な方式のプログラムである(その詰め込み方法を指して呼ぶこともある)。

せっかくだからAlpine Linux自体も見ておこう

Alpine Linux - Wikipedia

  • Alpine Linuxは独自のパッケージ管理システムとしてAPKを採用している。
  • 強化されたカーネルがデフォルトのカーネルに含まれているので、悪用や脆弱性の影響を軽減することができる。
  • Alpine Linuxのベースシステムは4 - 5 MB(カーネルを除く)に収まるように設計されている。
  • Alpine Linuxではinitとしてシンプルかつ軽量なOpenRC(英語版)を利用している。

まあこれくらいにしてとりあえず動かしてみよう
必要だったら詳しく調べる

ってそもそもイメージ名はどうやって調べたらいいんだ
まずは当てずっぽうで

$ docker run -it alpine
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
4fe2ade4980c: Pull complete
Digest: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
Status: Downloaded newer image for alpine:latest
/ #

正解
適当にいじくってみる

/ # ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 /bin/sh
   15 root      0:00 ps -ef

シンプル
っていうかほんとにこれで全部?
psのオプションってこうだったよね?

/ # man ps
/bin/sh: man: not found

あーそうねないね
ていうかbourne shellなのか
徹底してるな

/ # ps --help
BusyBox v1.28.4 (2018-07-17 15:21:40 UTC) multi-call binary.

Usage: ps [-o COL1,COL2=HEADER]

Show list of processes

        -o COL1,COL2=HEADER     Select columns for display
/ #

なんかシンプル -eとか-fもないってこと?
そしてBusyBoxが登場

/binでも見に行ってみよう

/ # cd bin
/bin # ls
arch           dd             fsync          linux32        mountpoint     reformime      su
ash            df             getopt         linux64        mpstat         rev            sync
base64         dmesg          grep           ln             mv             rm             tar
bbconfig       dnsdomainname  gunzip         login          netstat        rmdir          touch
busybox        dumpkmap       gzip           ls             nice           run-parts      true
cat            echo           hostname       lzop           pidof          sed            umount
chgrp          ed             ionice         makemime       ping           setpriv        uname
chmod          egrep          iostat         mkdir          ping6          setserial      usleep
chown          false          ipcalc         mknod          pipe_progress  sh             watch
conspy         fatattr        kbd_mode       mktemp         printenv       sleep          zcat
cp             fdflush        kill           more           ps             stat
date           fgrep          link           mount          pwd            stty

こころなしか少なめ
busyboxがいる
busybox以外は全部色が違うぞ?

/bin # ls -l
total 780
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 arch -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 ash -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 base64 -> /bin/busybox
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 bbconfig -> /bin/busybox
-rwxr-xr-x    1 root     root        796312 Jul 17 15:22 busybox
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 cat -> /bin/busybox
  :
  :
lrwxrwxrwx    1 root     root            12 Sep 11 20:23 zcat -> /bin/busybox

あー
単一の実行ファイルに詰め込むってそういうことか
なるほどこれは小さくなるな
/sbin、/usr/bin、/usr/sbinもほとんどbusyboxへのリンク
噂のapkは/sbinにあってこれは実体
shは名前はshだけどほんとにbourne shell互換なのか、ここだけではわからんな

OpenRCとやらもちょっと見てみたいけど今日はここまで