一般ユーザで起動すると、root認証を求められるアプリの作り方
OSC会場だけど、まだ人の入りが悪くて退屈なので、
暇つぶしに。。。
よく、一般ユーザーで実行すると、ポップアップが出てきて、
root認証が促されることがある。
system-config-networkとか。
隣のintrajpさんに聞かれたので、書いてみる。
例として、
/usr/sbin/testapp
中身は下
#!/bin/sh echo hoge id
1)
# chmod +x /usr/sbin/testapp
# ln -s /usr/bin/consolehelper /usr/bin/testapp
2)/etc/pam.d/testappを以下のように作成。
auth include config-util account include config-util session include config-util
3) /etc/security/console.apps/testappseedit-gui を以下。
USER=root PROGRAM=/usr/sbin/testapp SESSION=true
さあ起動しよう。
$ testapp
root認証を求められるポップアップが出てくる。
認証成功すると。。。
hoge uid=0(root) gid=0(root) context=system_u:system_r:unconfined_t
testappがrootで動いている!
仕組みは、
/usr/bin/testappからリンクされてるconsolehelperが、
ポップアップ出して、/usr/sbin/testappを起動してくれてる。
read/write再チェックの意義
OSCで、PANDAさんに色々教えてもらった。
SELinuxは、
ファイルopen -> read/write
というときに、open, read,write両方の時にパーミッションチェックを行う。
TOMOYO Linuxとかはopen時にしかチェックを行わない。
SELinuxのようにread/write時にもチェックを行うのは意味がある。
open後に、ポリシが変更になって、アクセス拒否になった場合など。
http://d.hatena.ne.jp/himainu/20070830#1188480411
↑で扱ったネタ。
ただ、これでも、まだ抜けがあるとのこと。
- 1)mmapした場合
read/write使わずに、ファイルアクセスできてしまうので、ポリシが変更になってもそれが反映されない
- 2)メモリ上に読み込んだデータについて
たとえば、
hoge_tドメインのプロセスが、/etc/shadowをopenして、
buf[100000]に読み込んだとする。
この後、ポリシが変わって、hoge_tが/etc/shadowにアクセスできなくなった場合、
なおもhoge_tは、buf[10000]を読むことで /etc/shadowの内容を知れてしまう。