1

いくつかの残念な理由により、独自のバイナリ ライブラリをワークステーションごとに 1 ユーザーからワークステーションごとに複数ユーザーのセットアップに変換する必要があります。

現在のセットアップ。ユーザーは、ライブラリにリンクされたプログラムを使用します。このライブラリは、複数の作業ディレクトリへの複数のパスを含むシステム全体の構成ファイルを (ハードコードされたパス、つまり /usr/local/thelib/main.conf を使用して) 読み取ります。wdir 自体には、一連のユーザー データ ファイルが含まれています。

望ましい結果。同じワークステーションで複数のユーザーを管理できること。もちろん、ユーザーはライブラリを介して他のユーザーのデータを読み取ったり変更したりすることはできません。これは、ユーザーごとに異なる作業ディレクトリをライブラリに供給することができた場合、UNIX 権限で処理する必要があります。

ライブラリは同時に複数のユーザーによって使用される可能性があるため、実行時に /usr/local の構成ファイルを ln-ing することはできません。

環境変数または現在の UNIX ユーザーに応じて、ファイル /usr/local/thelib/main.conf に異なるコンテンツを提供するために FUSE を使用することを考えていました。環境変数は、構成ファイルを生成するコード内のスイッチとして使用されます。

Python、Perl、または C を快適に使用できます。

ワークステーションは、かなり最近のカーネルで最新の GNU/Linux Debian または Ubuntu ディストリビューションを実行しています。

そう。どう思いますか :

  • FUSEを使用しますか?
  • 別の種類のラッパーを作成していただけませんか - chroot(2) の使用は janneb ごとに以下で提案されました - ?
  • Linux で許可されている他のものを使用しますか?

機能的なものを作成できることはちょっと知っていますが、今は車輪を再発明したくないので、コミュニティのアドバイスを受けます.

ありがとう。フロリアン

4

2 に答える 2

2

簡単な方法は、アプリがライブラリのinit関数を呼び出す前にchroot()を呼び出すことです。たとえば、$ HOME / theappにchrootすると、各ユーザーは$ HOME / theapp / usr / local / thelib / main.confにプライベートな独自の設定ファイルを持ち、$ HOME/theappの下のどこかにプライベートな作業用ディレクトリを持つことができます。

于 2010-07-12T21:53:26.540 に答える
2

LD_PRELOAD を使用して、open() 呼び出しをインターセプトし、~/.main.conf を開く小さなスタブをロードできます (これが共有オブジェクトであると仮定します)。次に、アプリケーションの起動ルーチンで、LD_PRELOAD が正しい値に設定されていることを確認し、そうでない場合は、正しい環境でアプリを再起動します。

于 2010-07-13T08:43:59.407 に答える