▼ [雑] ブラウザ経由で別サーバのコマンドをセキュアに実行するには
ブラウザに表示されたリンクをクリックしたり、フォームをPOSTして、Webサーバとは別のサーバのコマンド実行をする場合、どうやれば一番セキュアなのだろう?
とりあえず考えてみたのはこの形。
- ブラウザとWebサーバの間はhttpsで接続する。
- Webサーバ内では、PHPからshell_exec()で外部コマンド(ssh)を実行する。
- sshの実行は「ssh hoge@server_a COMMAND」の形とし、サーバA上でコマンドを実行して、その結果をPHPに返す。
- PHPでは返ってきた結果をHTML出力する。
ここで、3のsshでの接続をどうしようか迷ってる。サーバAに公開鍵をインストール、Webサーバにはパスフレーズなしの秘密鍵を置いて、サーバAにログインする方法が楽なんだけど、、、「パスフレーズなし」ってところにひっかかりを感じるんだよなぁ。
2の外部コマンドでexpectを利用し、ブラウザから入力されたパスフレーズを対話的に入力しsshによるコマンドを実行するってのが最良の方法だろうか? expect苦手なんだけど。
pathphrase-less で ssh を使うなら、最低限 authorized_keys の from="..." で接続元を限定するのと、出来れば command="..." で実行できるコマンドを限定するのかよいかなと。<br>http://sonic64.com/2004-11-17.html<br><br>もしくはサーバAでもCGIなりを動かしてWebサーバからHTTPリクエストを受けるようにする、とか。
WebサーバーとサーバーAの間をIPSecトンネルを張りっぱなしにして、そこにコマンドを流し込むのではだめですか?<br><br>サーバー系は門外漢なので、はずしてたらすいません。
おぉぉ! authorized_keysで接続元やコマンドの制限ができるとは知りませんでしたよ。この線でもう少し調べてみますわ。<br><br>IPsecは今ひとつ理解が乏しいので、今回はまず上記で進めてみます。ありがとうございましたー。