OpenBSDのchrootはガチである

#PCとプログラム覚え

OpenBSDは、ともかく<お堅い>ので、普通のノリで<ま、nginxで、ホスト作るか>的にやると、動きません。

OpenBSDのpkg_addで、nginxをインストールしたとしましょう。

一通り設定をおえて、 /var/www/に、自分のホームディレクトリにつくってあるmysiteというパスを<シンボリックリンク>で作るとします。

doas ln -s /home/自分/web/mysite /var/www/

もうこの時点で駄目です。

なぜなら、chrootが、/var/wwwでハードコーディングされており、それが、nginxの<プロセス挙動ルート>です。

その外の場所にあるものは、シンボリックリンクでは、使えません。

あるいは、外部のホスト名をIPで引くような(あるいはその逆)スクリプト(たとえばphpなりpythonなり)を、WEBで動作させようとします。

そのままでは、エラーとなります。なぜか?。nginxのchrootが、/var/wwwですので、/etc/resolv.confは<外部>なので見に行けないのです。

なので、

mkdir /var/www/etc
cp /etc/resolv.conf /var/www/etc

が必要です。(もちろんシンボリックリンクでは無理です)。

つまり、OpenBSDでは、chrootはがちに機能しています。(機能するようにパッケージも作ってあります)。

サーバ用デーモン(relaydなりOPENsmtpdなり)をいじる場合は、こいつを常に意識しておく必要があります。

じゃあ、<あたいのmysiteはどうするんだ?>ということになりますが、これは、明示的にnginxのchrootを<外す>ようにします。

rcctl set nginx flags “-u”

これで、とりあえず、これでシンボリックリンクがきくので

ln -s /foo/bar/website /var/www

などとすると、/var/www配下としてファイルアクセスは可能となります。

でも、これは、決して /var/wwwから全部自由になったわけではありません。

続きは、別のページにて。

Popup