5

Linux で実行する C 言語で小さなカスタム Web サーバー アプリケーションを作成しました。アプリケーションがリクエストを受け取ると、fork() を呼び出し、別のプロセスでリクエストを処理します。このプロセスは、利用可能にしたいファイルを含む特定のディレクトリに chroot されます。

アプリケーションを Windows に移植したいのですが、このプラットフォームでは fork() も chroot() も利用できず、直接同等のものもないようです。Windows でこの機能を提供する単純な (そしてできれば適切に記述された) コードの例を教えてください。私のCはそれほど良くないので、単純であるほど良い.

4

6 に答える 6

9

まず第一に、これに相当する Windowschrootは、ここに文書化されています。プログラムからこれを行う必要がある場合は、この C++ ソース コードを学習すると、Windows API の使用方法を理解するのに役立ちます。正確には同じではありませんが、Windows の人々は、非常に制限されたアクセス許可を持つユーザーを作成し、そのユーザーにアプリケーション フォルダーに対する読み取りアクセス許可と、データ用の 1 つのフォルダーに対する書き込みアクセス許可のみを与えることによって、chroot 監獄のようなものを作成するために使用します。RUNASchroot()

fork()Windows で正確にエミュレートする必要はおそらくないでしょう。プロセスを作成するための Windows API と との違いを理解するには、 Mr. Peabody Explains fork()fork()を確認してください。Cygwin の fork 実装の実際の現在のソース コードは、現在の最新技術を示しています。

との Microsoft ドキュメントはCreateProcess()CreateThread()それらの違いに関する詳細情報を探す場所です。

そして最後に、プラットフォームの詳細をすべて学びたくない場合は、Windows と Unix で動作する移植可能なプログラムを作成してください。Apache Portable Runtime ライブラリ自体を使用しないでください。新しいプロセスを作成するための C 言語のサンプル コードを含むプロセス作成に関するドキュメントを次に示します。

于 2009-11-10T16:14:44.070 に答える
3

fork()Windowsのようなものはありません。呼び出す必要があります-これは別のプロセスを開始し(ほとんどの場合、生成されたプロセスの呼び出しとその後すぐにCreateProcess()同等です)、何らかの方法でパラメーターを渡します。専用のディレクトリで処理するすべてのデータがあるように見えるので、パラメータを利用できます- 以前に使用したディレクトリパスを渡すだけです。fork()exec()lpCurrentDirectoryCreateProcess()chroot()

于 2009-11-06T10:06:05.937 に答える
2

最も簡単な方法は、Windows 用の無料の Unix エミュレーション レイヤーであるCygwinを使用することです。ダウンロードして、完全な開発環境をインストールしてください。(インストーラーで選択します。) 運が良ければ、プログラムをそのままコンパイルすることができます。変更はまったくありません。

もちろん、マイナス面もあり、これを「不正行為」と考える人もいるかもしれませんが、あなたは最も簡単な解決策を求めました。

于 2009-11-10T09:39:19.797 に答える
1

互換性フレームワーク (Interix、Cygwin など) を使用しないと、この種の作業に Windows パラダイムを使用することになります。

fork/vfork は UNIX での安価な操作であるため、マルチスレッドと比較してよく使用されます。Windows の同等のもの -CreateProcess()は比較すると高価な操作です。このため、代わりにスレッドを使用し、CreateThread(). のサンプルコードはたくさんありますCreateThread()

に関してはchroot()、Windows にはこの概念がありません。必要なものをエミュレートすると主張するライブラリがあります。ただし、最初に chroot する理由によって異なります。

コメントを読んで、単純に (etc) でツリーを上っていくのを止めるだけなら../../../../、chroot で十分ですが、そもそも入力を解析して正気であることを確認する代わりにはなりません: つまり、指定された親が多すぎる場合は、ユーザーを既知のルート ディレクトリにロックします。Apacheが機能するためにchroot()環境を作成する必要がなかったため、Apacheはほぼ確実にこれを行います...

于 2009-11-12T16:32:47.197 に答える
0

fork/chroot の使用は、Windows でのやり方とはまったく異なります。サブプロセスのセキュリティが心配な場合は、何らかの形式の仮想化またはサンドボックスを使用することをお勧めします。複雑な情報をサブプロセスに渡すことは、何らかの形式の RPC ソリューションによって行うことができます。

Unix の方法でアプリケーションを設計したかのように思えますが、何も変更せずに Windows で実行したいと考えています。その場合、 Cygwin の使用を検討することをお勧めしますが、Cygwinが をエミュレートするかどうか/どのようにエミュレートするかはわかりませんchroot

于 2009-11-10T09:24:55.007 に答える
0

SUA (別名 Windows Services for Unix ) を検討してください。アプリケーションを移植するために必要なものがほぼすべて揃っています。

男 chroot (interix)

于 2009-11-11T18:50:23.400 に答える