SELinux事始め

朝起きたらテレビで若手俳優の傷害事件について報じていた。道路に駐車していた車に対して「通れない」と苦情を言うだけでなく、殴りかかって怪我を負わせてしまったようだ。そのニュース自体には驚きもしないのだけれど、事故の様子を3Dでモデリングされた車や人物でアニメーションで流していたのに驚いた。確かに事故の状況はよくわかるけれども、わざわざそのためにモデリングしたり、ビューポイントを変えたりする必要があるのだろうか。こんなことを言うと怒られるかもしれないけれど、なんだか無駄な技術の進歩だなと思った。(あるいは、進歩した技術の無駄な使い方というほうが適切か)

今日は午後少し雨が降ったようだけれど朝は晴天で空がきれいだった。東海道線のつり革につかまって外を眺めていたら雪化粧をした富士山がはっきりと見えた。電車が進み品川を過ぎると今度はビルの合間からときおり東京タワーが見える。富士山は勿論きれいだけれど、今日は何故か電車から見えた東京タワーがとても優美に見えて仕方なかった。もう1年以上も毎日同じ電車に乗っていて、富士山とは違って天気の悪い日も見ているはずなのに、こんなふうに思ったことはなかった。とても不思議な気がする。昨年の暮れに事情があって、少し田町の付近を歩いた。もしかしたらそのときに自分の中に何かインプットされたのかな。都会に住んでいて「東京タワーがきれいだ」なんて言ったら馬鹿にされてしまうので、誰にも言わずにここに書いておこう。

仕事始めから3日目になったが、体感通り体重が1kg弱軽くなった。この調子で落ちてくれたらうれしいけれど、経験的にここからは多分安定する。仕事と睡眠時間とストレスの均衡状態だ。


(本ページは備忘録なのであまり読まないでください)


出発

つまずき

  • indexingまで無事行えたがブラウザからページを開くと"Internal Server Error"となる。
  • dmesgコマンドでログを調べると、httpd他の/usr/local/lxr配下に対するアクセスが失敗していることがわかる。
audit(1104977378.787:0): avc:  denied  { search } for  pid=30359 exe=/usr/bin/perl scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_kernel_t tclass=dir
audit(1104977378.787:0): avc:  denied  { search } for  pid=30359 exe=/usr/bin/perl name=sys dev=proc ino=-268435431 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_t tclass=dir
audit(1104977379.148:0): avc:  denied  { write } for  pid=30359 exe=/usr/bin/perl name=.s.PGSQL.5432 dev=sda3 ino=453399 scontext=root:system_r:httpd_sys_script_t tcontext=root:object_r:tmp_t tclass=sock_file
audit(1104984868.688:0): avc:  granted  { load_policy } for  pid=30635 exe=/usr/sbin/load_policy scontext=root:system_r:unconfined_t tcontext=system_u:object_r:security_t tclass=security
security:  3 users, 4 roles, 280 types, 16 bools
security:  53 classes, 5494 rules
audit(1104984902.298:0): avc:  denied  { search } for  pid=30641 exe=/usr/bin/perl scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_kernel_t tclass=dir
audit(1104984902.298:0): avc:  denied  { search } for  pid=30641 exe=/usr/bin/perl name=sys dev=proc ino=-268435431 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_t tclass=dir
audit(1104984902.568:0): avc:  denied  { write } for  pid=30641 exe=/usr/bin/perl name=.s.PGSQL.5432 dev=sda3 ino=453399 scontext=root:system_r:httpd_sys_script_t tcontext=user_u:object_r:tmp_t tclass=sock_file

これを解決するのもっとも安直な方法は、上記エラーをaudit2allowに食わせた結果をpolicyに追加することで、その場合どんな内容になるかを確認した。

1[root@harada]# dmesg | audit2allow -l
allow httpd_t usr_t:dir { write };
allow httpd_t usr_t:file { execute };

これだとあまりに権限を与えすぎるので、/usr/local/lxr配下のコンテキストを変更することにしたが、そのためにはpolicyの定義ファイル群が必要となる。http://download.fedora.redhat.com/pub/fedora/linux/core/updates/3/SRPMS/から1/6現在の最新であるselinux-policy-targeted-1.17.30-2.66.src.rpmをダウンロードし、rpm -ivhで展開した。展開結果は、/etc/selinux/targeted/src/policy/配下に展開される。

/usr/local/lxrのコンテキストを変更するための方法を探した結果、

  1. file_contexts/program/apache.fcにpolicy定義を追加すれば良さそうと判明
  2. /usr/local/lxr(/.*)? system_u:object_r:httpd_sys_script_exec_tという行を追加
  3. make reload
  4. setfiles file_contexts/file_contexts /usr/local/lxr
1[root@harada]# ls -lZ /usr/local/lxr
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t Local.pm
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t diff
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t find
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t fixhashbang
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t  genjavaclasses
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t genxref
 drwxrwxrwx  root     root     system_u:object_r:httpd_sys_script_exec_t glimpse
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-dir.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t  html-find.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-head.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-ident-refs.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-ident.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-search-glimpse.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-search-swish.html
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t html-tail.html
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t ident
 drwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t lib
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t lxr.conf
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t lxr.conf~
 -rw-r--r--  root     root     system_u:object_r:httpd_sys_script_exec_t lxr.css
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t search
 -rwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t source
 drwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t src
 drwxr-xr-x  root     root     system_u:object_r:httpd_sys_script_exec_t templates
1[root@harada]#   

この状態で再度lxrにアクセスしてみるが、

audit(1104986063.683:0): avc:  denied  { search } for  pid=30725 exe=/usr/bin/perl scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_kernel_t tclass=dir
audit(1104986063.683:0): avc:  denied  { search } for  pid=30725 exe=/usr/bin/perl name=sys dev=proc ino=-268435431 scontext=root:system_r:httpd_sys_script_t tcontext=system_u:object_r:sysctl_t tclass=dir
audit(1104986063.956:0): avc:  denied  { write } for  pid=30725 exe=/usr/bin/perl name=.s.PGSQL.5432 dev=sda3 ino=453399 scontext=root:system_r:httpd_sys_script_t tcontext=user_u:object_r:tmp_t tclass=sock_file

これを再度audit2allowにかけてみると、まだ権限が不足しているらしい。

1[root@harada]# dmesg | audit2allow -l
allow httpd_sys_script_t sysctl_kernel_t:dir { search };
allow httpd_sys_script_t sysctl_t:dir { search };
allow httpd_sys_script_t tmp_t:sock_file { write };
1[root@harada]#  

とりあえずここまで。