昨日失敗した「システムコールインターセプション」機能のお試し。
昨日追記した
t=2020-03-30T21:42:08+0900 lvl=dbug msg="Handling mknod syscall" audit_architecture=3221225534 container=c1 project=default seccomp_notify_flags=0 seccomp_notify_id=11827333229505280862 syscall_args="&{cMode:8192 cDev:0 cPid:13025 path:/run/systemd/inaccessible/chr}" syscall_number=133
でふと思いつきました。私が試している Plamo Linux 7.1 には systemd はいませんので、これはコンテナ上の systemd のお話だと仮定して、このパスについて調べました。コンテナ上に /run/systemd/inaccessible/chr
ディレクトリが存在しなかったので、このディレクトリがないことによるエラーじゃないかと思い、それじゃあということで試しました。(ディレクトリがない理由はわかりません)
images.linuxcontainers.org にある alpine のイメージを使ってコンテナを作ります。
$ lxc launch images:alpine/3.11 a1 a1 を作成中 a1 を起動中 $ lxc shell a1 a1:~# mknod test c 5 1 mknod: test: Operation not permitted
mknod
が失敗する所までは同じ。security.syscalls.intercept.mknod
を true
に設定してコンテナを再起動すると、特にエラーになることもなく起動します。
$ lxc config set a1 security.syscalls.intercept.mknod true $ lxc restart a1 $ lxc shell a1
ここでコンテナ内で mknod
すると、
a1:~# mknod test c 5 1 a1:~# ls -l total 0 crw-rw-rw- 0 root root 5, 1 Mar 31 09:42 test
無事デバイスファイルが作成できました。当たり前ですが、あっさりすぎるほど成功です。
コンテナログにも関連するログが出ていますね。
lxc a1 20200331094221.740 TRACE seccomp - (path to lxc src)/src/lxc/seccomp.c:lxc_seccomp_load:1267 - Retrieved new seccomp listener fd 7 lxc a1 20200331094221.740 TRACE attach - (path to lxc src)/src/lxc/attach.c:attach_child_main:810 - Loaded seccomp profile lxc a1 20200331094221.740 TRACE commands - (path to lxc src)/src/lxc/commands.c:lxc_cmd_accept:1522 - Accepted new client as fd 14 on command server fd 7 lxc a1 20200331094221.740 TRACE commands - (path to lxc src)/src/lxc/commands.c:lxc_cmd_rsp_recv:123 - Command "seccomp_notify_add_listener" received response lxc a1 20200331094221.740 DEBUG commands - (path to lxc src)/src/lxc/commands.c:lxc_cmd_rsp_recv:156 - Response data length for command "seccomp_notify_add_listener" is 0 lxc a1 20200331094221.740 TRACE commands - (path to lxc src)/src/lxc/commands.c:lxc_cmd:293 - Opened new command socket connection fd 9 for command "seccomp_notify_add_listener" lxc a1 20200331094221.740 TRACE commands - (path to lxc src)/src/lxc/commands.c:lxc_cmd_fd_cleanup:1434 - Closing client fd 14 for command "seccomp_notify_add_listener"
これで解決!と思ったのですが、次のように続けて別のファイルを作ろうとすると、まただんまりになります。
a1:~# mknod test c 5 1 (ちゃんと作成できる) a1:~# mknod test2 c 0 0 (だんまり) ^C a1:~# ls -l total 0 crw-rw-rw- 0 root root 5, 1 Mar 31 10:04 test
このときのコンテナログはまた
lxc a1 20200331095933.691 ERROR seccomp - /home/karma/work/PlamoBuild/lxc_git/lxc/src/lxc/seccomp.c:seccomp_notify_handler:1359 - Invalid argument - Failed to read seccomp notification
LXDのログは
t=2020-03-31T19:04:23+0900 lvl=dbug msg="Handling mknod syscall" audit_architecture=3221225534 container=a1 project=default seccomp_notify_flags=0 seccomp_notify_id=16212327395031920484 syscall_args="&{cMode:8630 cDev:1281 cPid:31237 path:test}" syscall_number=133
うーむ、また謎が
オレ、何か mknod について勘違いしてる? 😅(続くかも)
(2020-04-09 追記)
Ubuntu 20.04 LTS の beta で試してみました。LXD は snap で 3.23 が動いていましたが、alpine コンテナで実行すると同じ(最初のmknodはうまくいくが次はうまくいかない)ような感じになりました。