落書き帖  古事記  いろは歌  日 記

FollowSymlinks無くてもExecCGIあれば参照出来るよね?

2016年04月10日
まずは…、
apache初心者なんで検討違いの事を書いている可能性が有ります…。
その場合は、あしからず…。

ここの所、ローカルサーバーでCGI使って自分の物を作ったりしています。
その過程で、出力(レスポンステキスト)をブラウザにでは無く、「ターミナルに出力したいな」と思いました。
簡単に書くとこんな感じ↓。

test0.cgi

#!/bin/sh
echo "Content-type:text/plain"
echo
cat nanikano.text > /dev/pts/0

でも、これだけじゃターミナルに出力してくれませんでした。
そこで考えたのが…、
test0.cgi を直接実行したら、ちゃんと表示するので…、
もしかしたら、/dev/pts/0 にシンボリックリンク貼ったらいけるかな?
って思った訳なんです。

test1.cgi

#!/bin/sh
echo "Content-type:text/plain"
echo
# /dev/pts/0 へのリンク rinkudayo へ出力
cat nanikano.text > rinkudayo

しかし、それでもダメ…。
そこで、ちょっと調べてみたら、どうやら /dev/pts/0 のパーミションが問題だったみたい。

ls -l /dev/pts/0
crw--w---- 1 user tty 136, 0 4月 10 18:13 /dev/pts/0

パーミションが 620 になってるんで、622 へ変更。

sudo chmod 622 /dev/pts/0

これで、めでたくターミナルに出力するようになりました。

この時の、apache2のDirectoryディレクティブのOptionsは…、

Options ExecCGI FollowSymlinks

私は最初、思いっきり勘違いしてまして…、
OptionsのFollowSymlinksは…、
「CGIのスクリプト中のシンボリックリンクも、許可する命令」
なんだろう、と勝手に考えておりました。

test1.cgiがうまく動いた後、次はOptionsの個々の命令について一つずつ確認しよう、と思った私は…、
まずは、FollowSymlinksをOptionsから外してみました。

…あれ?動くぞ?

それが当たり前の動きなんでしょうが…、
CGIスクリプトの中からはリンクをたどれます…。
しかし、この時の私には想定外でした…。

…きっとオイラの設定方法が悪いんだ

そう思った私は…、
Optionsの説明を読み色々試してみますが、想定していた動きになりません…。
そこで漸く気付いたんです…。

…FollowSymlinksはExecCGIと関係無いんだ
…でも待てよ!それってやばくない?
…サーバー運営してない、オイラには関係ないけど

サーバー内のファイルにシンボリック貼ったら覗けちゃうんですよね?
でも、初心者の私が考える事だから、きっと何かセキュリティ的な対策もあるんだろなぁ…、
って思いながら、その対策って何だろう、って思いから…、
apache followsymlinks
まで、検索窓に書き込んだ所で…、
apache followsymlinks 脆弱性
が候補にあがります…。
そこで、それを検索し、候補に上がった記事を読んでみると…、
シンボリックリンクの対策として…、
Options SymLinksIfOwnerMatch
すれば良いよ、みたいな事が書いてあった…。
サーバー作るつもりは無いので、1つの記事だけざっくり拾い読みしただけなんだけど…、

…どうなん?
…SymLinksIfOwnerMatchしてもExecCGIあればリンク辿れるけど…
…大丈夫なん?

私には関係無い話なんだけど…。