Dockerでlsofを置き換える方法(LXCベースではなくデフォルト)

Dockerでlsofを置き換える方法(LXCベースではなくデフォルト)

私が少し混乱しているのは、lsof -iDockerコンテナ内で出力が生成されないことです。

はい(コンテナ内のすべてのコマンド/出力):

[1] root@ec016481cf5f:/# lsof -i
[1] root@ec016481cf5f:/# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -

また、PIDまたはプログラム名がどのように表示されないかを確認してくださいnetstatfuserまた、混乱した出力を提供し、PIDも正確に見つけることができませんでした。

誰でもこれについて明らかにできますか?

  • どのように置き換えることができますかlsof -i(見るため)プロセス名しかも! )
  • なぜ出力netstatも壊れたのですか?

気づく:コンテナランタイムは、"ExecDriver": "native-0.1"LXCの代わりにDockerの独自の実行層を使用します。


[1] root@ec016481cf5f:/# fuser -a4n tcp 22
Cannot stat file /proc/1/fd/0: Permission denied
Cannot stat file /proc/1/fd/1: Permission denied
Cannot stat file /proc/1/fd/2: Permission denied
Cannot stat file /proc/1/fd/3: Permission denied
Cannot stat file /proc/1/fd/255: Permission denied
Cannot stat file /proc/6377/fd/0: Permission denied
Cannot stat file /proc/6377/fd/1: Permission denied
Cannot stat file /proc/6377/fd/2: Permission denied
Cannot stat file /proc/6377/fd/3: Permission denied
Cannot stat file /proc/6377/fd/4: Permission denied
22/tcp:

(私は数字なのでそれに固執しませんPermission denied。私を混乱させるのは最後の空のPIDのリストです22/tcp。)


# lsof|awk '$1 ~ /^sshd/ && $3 ~ /root/ {print}'
sshd    6377      root  cwd   unknown                        /proc/6377/cwd (readlink: Permission denied)
sshd    6377      root  rtd   unknown                        /proc/6377/root (readlink: Permission denied)
sshd    6377      root  txt   unknown                        /proc/6377/exe (readlink: Permission denied)
sshd    6377      root    0   unknown                        /proc/6377/fd/0 (readlink: Permission denied)
sshd    6377      root    1   unknown                        /proc/6377/fd/1 (readlink: Permission denied)
sshd    6377      root    2   unknown                        /proc/6377/fd/2 (readlink: Permission denied)
sshd    6377      root    3   unknown                        /proc/6377/fd/3 (readlink: Permission denied)
sshd    6377      root    4   unknown                        /proc/6377/fd/4 (readlink: Permission denied)
sshd    6442      root  cwd   unknown                        /proc/6442/cwd (readlink: Permission denied)
sshd    6442      root  rtd   unknown                        /proc/6442/root (readlink: Permission denied)
sshd    6442      root  txt   unknown                        /proc/6442/exe (readlink: Permission denied)
sshd    6442      root    0   unknown                        /proc/6442/fd/0 (readlink: Permission denied)
sshd    6442      root    1   unknown                        /proc/6442/fd/1 (readlink: Permission denied)
sshd    6442      root    2   unknown                        /proc/6442/fd/2 (readlink: Permission denied)
sshd    6442      root    3   unknown                        /proc/6442/fd/3 (readlink: Permission denied)
sshd    6442      root    4   unknown                        /proc/6442/fd/4 (readlink: Permission denied)
sshd    6442      root    5   unknown                        /proc/6442/fd/5 (readlink: Permission denied)

接続されたユーザーからのいくつかの出力がありますが、これも正確に識別されますが、それはすべてです。lsof -i特定の「オブジェクト」(インターネットソケットのみ)の種類を言うことは明らかに不可能です。

答え1

(注:質問者がどのようにドッカーコンテナに入ったかは質問からは明確ではありません。仮説 docker exec -it CONTAINER bash使用されました。 )

centos:7docker バージョンに基づく docker イメージを使用すると、この問題が発生しました。1.9.0この問題を克服するために実行したばかりです。

docker exec --privileged -it CONTAINER bash

付属していますのでご注意ください--privileged

これが必要な理由の私の素朴な理解:dockerはコンテナをより安全にするために努力しているようです。ここに録音してください

答え2

ハハ、プロットがどんどん盛り上がっています。より良い回答がある場合は、書いていただければ受け入れ可能であれば承諾いたします。しかしこれが明らかな理由だ。私がどれほど不注意だったか、ログファイルを無視したか所有者:

Jun 12 01:29:46 hostmachine kernel: [140235.718807] audit_printk_skb: 183 callbacks suppressed
Jun 12 01:29:46 hostmachine kernel: [140235.718810] type=1400 audit(1402536586.521:477): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="trace" denied_mask="trace" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718860] type=1400 audit(1402536586.521:478): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718886] type=1400 audit(1402536586.521:479): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718899] type=1400 audit(1402536586.521:480): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718921] type=1400 audit(1402536586.521:481): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.718954] type=1400 audit(1402536586.521:482): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719001] type=1400 audit(1402536586.521:483): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719043] type=1400 audit(1402536586.521:484): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719086] type=1400 audit(1402536586.521:485): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"
Jun 12 01:29:46 hostmachine kernel: [140235.719126] type=1400 audit(1402536586.521:486): apparmor="DENIED" operation="ptrace" profile="docker-default" pid=3782 comm="lsof" requested_mask="read" denied_mask="read" peer="docker-default"

したがって、衣類が犯人のようです。ホスト/コンテナのセキュリティを損なうことなくそれを許可するように説得する方法を理解するか、セキュリティを損なうことなく可能であることを確認する必要があります。

答え3

今回は、さらにきめ細かいセキュリティ設定を使用するもう1つの可能性があります。 DockerコンテナにSYS_PTRACE権限を付与します。

docker run --cap-add=SYS_PTRACE ...

答え4

私もこの問題を発見しました。無効にしたapparmor後、問題は消えましたdocker

$ sudo aa-complain <docker apparmor profile name, "docker-default" on ubuntu>

参照URL:https://help.ubuntu.com/community/AppArmor

関連情報