特定の Docker コンテナがデフォルトの seccomp プロファイルを実行しているかどうかを知りたいです。コンテナの起動に使用されたコマンド ラインにも、Dockerfile にもアクセスできません。
を起動するとps aufxwww
、プロセス/usr/bin/dockerd-current
にオプションがあることがわかります--seccomp-profile=/etc/docker/seccomp.json
。これは確かにデフォルトの seccomp プロファイル ファイルです。
/usr/bin/docker-containerd-current
ただし、コンテナ化されたアプリケーションを起動するプロセスは実行されていません。 がdocker inspect
返されます: "SecurityOpt": null,
。
それで、どれを信頼すればいいのでしょうか?
編集
さらに驚くべきことに、seccompフィルターを明示的に指定しながらdockerを実行しました
docker run -d --security-opt seccomp=/etc/docker/seccomp.python.json friendly
ファイル/proc/$pid/status
は を返しますseccomp 0
。
その男性によれば、私はむしろこう予想していた。
2 SECCOMP_MODE_FILTER
答え1
私は専門家ではなく、実際に同じ質問をグーグルで検索してこの投稿を見つけたのですが、次のことがわかりました。
Seccomp プロファイルを使用して Docker を実行する場合、何も指定せずに Docker がデフォルトを使用するか、またはdaemon.json
コマンドラインで自分でプロファイルを指定して、次のコマンドを実行します。
docker run -it alpine /bin/sh
/ # grep Seccomp /proc/1/status
Seccomp: 2
ご覧のとおり、Docker 内で Seccomp フィルターがオンになっていることがわかります。Docker に Seccomp プロファイルなしで実行するように明示的に指示すると、0 が返されます。
docker run -it --security-opt seccomp=unconfine alpine /bin/sh
/ # grep Seccomp /proc/1/status
Seccomp: 0
つまり、Docker 内からそれを見ることができます。Seccomp プロファイルによって制限される必要があるのは Docker 内のプロセスであるため、これは理にかなっているのかもしれません。
プロファイルが何かを行うかどうかをテストするには、デフォルトプロファイルをダウンロードするそこから何かを削除して(例chown
:)、次を試してください。
docker run -it --security-opt seccomp=/etc/docker/myseccomp.json alpine /bin/sh
/ # touch testfile
/ # chown 100.100 testfile
chown: testfile: Operation not permitted
最後に、マニュアルページカーネル 4.14 からは次のようなものが見られるようです:
/proc/sys/kernel/seccomp/actions_avail
これは私の 4.9 カーネルには存在しません。これが誰かの役に立つことを願っています。