2014-10-21 06:23:24 +0000

udzura

14:51 udzura:つかぬ質問ですが 0

 udzura: /proc/$pid/exe のリンクをたどるために必要なケーパビリティって何かご存知ですか? 0

 hiroya: ケーパビリティいるんすかね 0

15:00 -- Notice(hiroya): [hiroya@app003]~% ls -hal /proc/1/exe 0

15:00 -- Notice(hiroya): ls: cannot read symbolic link /proc/1/exe: Permission denied 0

 hiroya:  あうあ 0

 udzura:  dockerの 0

 udzura:  1.1.2で作ったコンテナではたどれて 0

 udzura:  1.2.0で作ったコンテナではたどれない現象が起こっていまして... 0

 hiroya:  CAP_SYS_PTRACE ?  0

 hiroya:  テスト中です ... 0

15:08 -- Notice(hiroya): [root@hiroya002 ~]# capsh -- -c 'ls -hal /proc/74850/exe' 0

15:08 -- Notice(hiroya): lrwxrwxrwx 1 root root 0 Oct 21 15:07 /proc/74850/exe -> /usr/sbin/httpd 0

15:08 hiroya: ( 74850 は apache ユーザで動いている httpd の pid です )  0

15:08 -- Notice(hiroya): [root@hiroya002 ~]# capsh --drop=CAP_SYS_PTRACE -- -c 'ls -hal /proc/74850/exe' 0

15:08 -- Notice(hiroya): ls: cannot read symbolic link /proc/74850/exe: Permission denied 0

15:08 -- Notice(hiroya): lrwxrwxrwx 1 root root 0 Oct 21 15:07 /proc/74850/exe 0

 hiroya:  CAP_SYS_PTRACE 落とすと、 EPERM Permission denied 0

 hiroya:  ( capsh については、拙著 http://d.hatena.ne.jp/hiboma/20111107/1320672576 で )  0

 hiroya:  きゃっぷしゅ 0

 udzura:  うおおお 0

 hiroya:  シンボリックリンクの実体を辿る処理は、ファイルシステムに固有の実装を取るらしくて 0

 hiroya:  proc の場合は procfs の実装になります 0

 hiroya:  http://lxr.free-electrons.com/source/fs/proc/base.c#L1443 0

 hiroya:  proc_pid_readlink から 0

 hiroya:  proc_fd_access_allowed 0

 hiroya:  ptrace_may_access 0

 udzura:  できました 0

 hiroya:  yatta 0

 hiroya:  __ptrace_may_access 0

 hiroya:  と降りていくと 0

 hiroya:  http://lxr.free-electrons.com/source/kernel/ptrace.c#L255 0

 hiroya:  ptrace_has_cap でケーパビリティを確認していて、 0

 hiroya:  http://lxr.free-electrons.com/source/kernel/ptrace.c#L210 0

 hiroya:  CAP_SYS_PTRACE が出て来たのでした 0

 udzura:  おおお 0

 hiroya:  予想外のケーパビリティですね w  0

 udzura:  SYS_PTRACEがなくても same_thread_group(task, current) なら読み取れるんですね 0

 udzura:  色々挙動に合点 0

 hiroya:  nrhd  0

 hiroya:  自分プロセス + スレッド群 0

 udzura:  sleep 999 & したら sleep の /proc/$pid/exe とかは見えたんです 0

 udzura:  サービスは見えなかった 0

 hiroya:  ほむほむ 0

 udzura:  と言う感じでした 0

 udzura:  1.2から、 docker run --cap-add=SYS_PTRACE で任意のケーパビリティを追加できるそうです 0

 udzura:  ServerspecするコンテナだとCAP_SYS_PTRACEあった方が良さそう... 0

 udzura:  (service XX statu よく実行するので) 0

 hiroya:  ほほー 0