OpenBSD の Apache サーバー上で xinc を実行する
-
08-06-2019 - |
質問
OpenBSD の chroot されたデフォルトの Apache で xinc を正しく実行できる人はいますか?開発サーバーも本番サーバーと同じように完全に chroot で実行し続け、コードが chroot で適切に実行されることを確認したいと考えています。
解決
Xinc に問題を投稿しましたか バグトラッカー?Xinc 自体はデーモンとしても Web アプリとしても動作するため、正常に動作するはずです。あなたがほのめかしたように、問題は、Web インターフェイスとは異なり、デーモンが chroot 環境で実行されていないため、どちらの側でもファイルを取得できないことである可能性があります。
他のヒント
@dragonmantank
Xinc の場合は、PEAR を使用してインストールしたと思います。
pear list-files xinc/Xinc
これにより、Xinc インストールがファイルをどこに置いたかが表示されます。そのため、Xinc は 1 つの大きな PHP スクリプト「にすぎない」にもかかわらず、rc スクリプトや、アプリケーションを実行するために必要なその他すべてのものに分散しています。そこにリストされているすべてのパスを追加する必要はないと思いますが、実行するにはおそらくいくつかのパスを追加する必要があります。
Xinc 自体のほかに、実行するには phpUnit やその他の PEAR ライブラリも必要だと思うので、私が提案するのは次のとおりです。
pear config-get php_dir
次に、(Henrik が提案したように) そのパスを chroot 環境に追加する必要があります。
私自身は xinc を使用したことがないので、アプリの chroot に通常どうやってアクセスするかについてはヒントしかありません。
最初のステップは、アプリの実行に必要なすべての情報を収集することです。これは通常実行することで実現します systrace(1) そして ldd(1) ソフトウェアを実行するために何が必要かを調べます。
の出力を確認します
systrace -A -d. <app>
ldd <app>
そして、アプリが操作するものと必要なものすべて (非常に多くのアプリは、実際には必要のないものを操作します) が chroot 環境で利用可能であることを確認します。構成と環境変数を少し調整する必要がある場合があります。また、アプリのログを syslog に記録するオプションがある場合、通常はそうして syslog ソケットを作成します (-a オプションを参照) syslogd(8)) アプリが書き込みアクセスを必要とする場所を減らすため。
私が今説明したのは、chroot 環境でほぼすべてのプログラムを実行するための一般的な方法です (ただし、ユーザーランドの半分といくつかの suid コマンドをインポートする必要がある場合は、chroot を実行しない方がよいかもしれません:)。Apache で実行されているアプリの場合 (OpenBSD はご存知かと思いますが、 httpd(8) は少し異なります)オプションがあります(プログラムが開始されたら、動的ライブラリは依然としてjail内に存在する必要があります)、Apacheを使用してファイルにアクセスし、 httpd.conf 実際にリソースをコピーせずに chroot 環境にリソースをインポートします。
また、(少し古い場合でも)便利なのは、 これ リンクでは、OpenBSD 上の chrooted PHP の注意点を概説しています。
最初のステップは、アプリの実行に必要なすべての情報を収集することです。これは通常、systrace(1) と ldd(1) を実行してソフトウェアの実行に必要なものを調べることで実現します。
これを試してみます。私が発見した xinc の大きな問題は、xinc が PHP アプリケーションでありながら、アプリケーションのインストール パスを知りたがり (それでも内容を他のフォルダーに分散させます)、いくつかの PHP スクリプトをデーモン モードで実行することです (これらのスクリプトは、最も理解しにくいものです)。走り出す)。そこで、たとえば /var/www/xinc にインストールするように指示し、次のシンボリックリンクを作成しました。
/var/www/var/www/xinc -> /var/www/xinc
そしてそれは部分的には機能しました。GUI を立ち上げることができましたが、セットアップしたプロジェクトが認識されませんでした。最大の問題は、一部が chroot を実行し、残りの半分が外部で実行されていることだと思います。
他のすべてが失敗した場合は、プロダクションが chroot されているため、chroot された環境内でプログラミングしながら何かをビルドする必要があります。chroot の外側でコードを書き、それを chroot 内で動作させるために必要なものを見つけるためにバックトラックしなければならないという問題に遭遇しました。