/proc のセキュリティ
lkmlあたりが元ネタ
root になって
# cd /tmp/ # mkdir proctest # echo sage > proctest/file.txt # echo safe > proctest/file.txt # chmod 0700 proctest/ # chmod 0666 proctest/file.txt # ls -al proctest/ total 12 drwx------ 2 root root 4096 Oct 31 00:54 . drwxrwxrwt 12 root root 4096 Oct 31 00:54 .. -rw-rw-rw- 1 root root 5 Oct 31 00:54 file.txt # cat proctest/file.txt safe
root しかアクセスできないディレクトリに file.txt という誰でも読み書きできるファイルを作ります。
# su meech -c 'cat /tmp/proctest/file.txt' cat: /tmp/proctest/file.txt: Permission denied # su meech -c 'echo hack > /tmp/proctest/file.txt' zsh:1: permission denied: /tmp/proctest/file.txt # cat proctest/file.txt safe
/tmp/prctest に x 権限がないので当然読めませんし、書けません。
# su meech -c 'cat <&0' < proctest/file.txt safe # su meech -c 'echo hack >&0' < proctest/file.txt # cat proctest/file.txt safe
ですが、 fd 経由で読むことはできます。 書くことはできません。
# su meech -c 'echo "hacked" > /proc/self/fd/0' < proctest/file.txt # cat proctest/file.txt hacked
ところが、 /proc/self/fd/0 を使うと書きかえられるようになります。
…でも、これよく考えてみると fd のほうは読みこみのみで開かれているからってだけのような気がする。