Revisions - OpenBsdCgi
@@ -5,6 +5,9 @@
httpdはFastCgiに対応していますが、通常のCGIはそのままでは動作しません。
CGIを動作させるには、SlowCgiというツールを使用する必要があります。
SlowCgiは、通常のCGIとFastCgiの橋渡しをします。
+
+興味深いのは、SlowCgiが提供する柔軟性です。
+これにより、OpenBsdのセキュリティモデルを維持しつつ、古いCGIスクリプトを活用できます。
KaikoKarehaOrgの設定を例に説明します。
@@ -43,6 +46,7 @@
httpdはChRoot環境で動作しているため、shをコピーしておく必要があります。
/bin/shを/var/www/bin/shにコピーしてください。
+このChRoot環境は、セキュリティを強化するためのものであり、プロセスがホストシステムの他の部分に影響を与えないようにします。
ウェブブラウザで https://kaiko.kareha.org/cgi-bin/hello.sh を開いて、期待通りに表示されることを確認します。
----
@@ -60,11 +64,17 @@
この場合、 /usr/bin/env を動かすためには、 /usr/lib/libc.so.102.0 と /usr/libexec/ld.so も、適切な場所にコピーする必要があることが分かります。
+このプロセスは、依存関係を管理する重要性を示しています。
+正確な依存関係を把握することで、システムの安定性を維持しつつ、必要な機能を提供できます。
+
----
perl を動かすためには、まず /usr/bin/perl と、それが動くように、 ldd で調べたライブラリもコピーする必要があります。
さらに、perlのライブラリも用意する必要があります。
最小とは言えませんが、次のようにするのが簡単です。
mkdir -p /var/www/usr/libdata
- cp -a /usr/libdata/perl5 /var/www/usr/libdata
+ cp -a /usr/libdata/perl5 /var/www/usr/libdata
+このようにして、perl環境をChRoot内に再現することは、他のプログラムやスクリプトを移植する際の一般的な手法です。
+この手法は、特にセキュリティが重要なシステムで役立ちます。
+
@@ -60,3 +60,11 @@
この場合、 /usr/bin/env を動かすためには、 /usr/lib/libc.so.102.0 と /usr/libexec/ld.so も、適切な場所にコピーする必要があることが分かります。
+----
+perl を動かすためには、まず /usr/bin/perl と、それが動くように、 ldd で調べたライブラリもコピーする必要があります。
+さらに、perlのライブラリも用意する必要があります。
+最小とは言えませんが、次のようにするのが簡単です。
+
+ mkdir -p /var/www/usr/libdata
+ cp -a /usr/libdata/perl5 /var/www/usr/libdata
+
@@ -43,5 +43,20 @@
httpdはChRoot環境で動作しているため、shをコピーしておく必要があります。
/bin/shを/var/www/bin/shにコピーしてください。
-ウェブブラウザで https://kaiko.kareha.org/cgi-bin/hello.sh を開いて、期待通りに表示されることを確認します。
+ウェブブラウザで https://kaiko.kareha.org/cgi-bin/hello.sh を開いて、期待通りに表示されることを確認します。
+----
+sh は動的リンクの依存が無いので、単体のファイルをコピーすれば動きます。
+動的リンクの依存があるものは、ライブラリもコピーする必要があります。
+例えば、 env は2つのライブラリに依存しています。
+ldd コマンドで調べることができます。
+
+ # ldd /usr/bin/env
+ /usr/bin/env:
+ Start End Type Open Ref GrpRef Name
+ 00000132d3b1d000 00000132d3b22000 exe 1 0 0 /usr/bin/env
+ 000001354b3b2000 000001354b4b8000 rlib 0 1 0 /usr/lib/libc.so.102.0
+ 00000134f27fc000 00000134f27fc000 ld.so 0 1 0 /usr/libexec/ld.so
+
+この場合、 /usr/bin/env を動かすためには、 /usr/lib/libc.so.102.0 と /usr/libexec/ld.so も、適切な場所にコピーする必要があることが分かります。
+
@@ -43,5 +43,5 @@
httpdはChRoot環境で動作しているため、shをコピーしておく必要があります。
/bin/shを/var/www/bin/shにコピーしてください。
-https://kaiko.kareha.org/cgi-bin/hello.sh%E3%81%AB%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%8B%E3%82%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%80%81%E6%9C%9F%E5%BE%85%E9%80%9A%E3%82%8A%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
+ウェブブラウザで https://kaiko.kareha.org/cgi-bin/hello.sh を開いて、期待通りに表示されることを確認します。
@@ -1 +1,47 @@
+!!!!! OpenBSDでCGIを動かす !!!!!
+ここでは、OpenBsdでCGIを動かす方法を説明します。
+OpenBsdにはウェブサーバhttpd(OpenHttpd)が付属しているため、これを使用します。
+httpdはFastCgiに対応していますが、通常のCGIはそのままでは動作しません。
+CGIを動作させるには、SlowCgiというツールを使用する必要があります。
+SlowCgiは、通常のCGIとFastCgiの橋渡しをします。
+
+KaikoKarehaOrgの設定を例に説明します。
+
+/etc/slowcgi.confは、次のように記述します。
+
+ cgi "/var/www/htdocs/kaiko/cgi-bin"
+
+/etc/httpd.confは、次のように記述します。
+
+ server "kaiko.kareha.org" {
+ listen on * port 80
+ root "/htdocs/kaiko"
+ location "/cgi-bin/*" {
+ fastcgi socket "/run/slowcgi.sock"
+ }
+ }
+
+ディレクトリ/var/www/htdocs/kaikoと/var/www/htdocs/kaiko/cgi-binを作成します。
+
+slowcgiとhttpdを起動します。
+
+ rcctl enable slowcgi
+ rcctl start slowcgi
+ rcctl enable httpd
+ rcctl start httpd
+
+次に、以下のようなシェルスクリプトhello.shを作成し、/var/www/htdocs/kaiko/cgi-bin/に配置します。
+
+ #!/bin/sh
+ echo "Content-Type: text/plain"
+ echo
+ echo hello
+
+chmod +x hello.shで実行権限を付与します。
+
+httpdはChRoot環境で動作しているため、shをコピーしておく必要があります。
+/bin/shを/var/www/bin/shにコピーしてください。
+
+https://kaiko.kareha.org/cgi-bin/hello.sh%E3%81%AB%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%8B%E3%82%89%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%80%81%E6%9C%9F%E5%BE%85%E9%80%9A%E3%82%8A%E3%81%AB%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
+