OS-Xでプロセスディレクトリを非表示またはブロックする

OS-Xでプロセスディレクトリを非表示またはブロックする

ルートなしでプロセスを隠すか、ファイルシステムパスにマウントする方法はありますか?実際のファイルシステムには影響せず、プロセス自体とその子にのみ影響を与える必要がありますか?

少し奇妙なユースケースですが、通常のOSXシステムのように、OSXビルドサーバーから何かをビルドする必要があります。しかし、残念ながら、ビルドを台無しにするいくつかのライブラリがインストールされており、/usr/local/{include,lib}コンピュータへのrootアクセス権がありませんでした。だから/usr/local走っている間一時的に隠したいですconfiguremake

書き込み権限がないため、/usr/local実際に変更することはできません。

答え1

いいえ、自分で行う方法はありません。chflags hidden物を隠すために使用できます。発見者ただし、これはコマンドラインには影響しません。

回避策は設定スクリプトによって異なります。それ可能表示するだけでもPATHわかりますが/usr/local、確認するハードコードされたディレクトリのリストがある可能性があります/usr/local。前者を変更するには(PATH- に基づいて)パスを調整できます。後者の場合、唯一の効果的な方法はconfigureスクリプトを修正することです。

ハードコーディングされたリストが表示されるのは、アドインがシステムの残りの部分と同じ検索パスを使用しない可能性があるためです。たとえば、さまざまなBSDポートなどを使用できます/usr/pkg/usr/local部分的に依存関係パッケージツールは、ビルドスクリプトでこれらのパス名を設定します。ただし、ポートシステムの一部として構築されていないプログラムは、ユーザーの注意をほとんど払うことなく構築するためにこれらの場所でアイテムを見つける必要があります。

OSX のデフォルト検索パスを無視するには、ld次のマニュアルページから始めます。

検索パス
ld使用するライブラリまたはフレームワークを検索するためのディレクトリのリストを保持します。これ基本図書館の検索パスは次のとおりです。/usr/libそれから/usr/local/lib。これ-Lオプションは新しいライブラリ検索パスを追加します。デフォルトのフレームワーク検索パスは次のとおりです。/Library/Frameworksそれから/System/Library/Frameworks。 (注:以前は/Network/Library/Frameworksデフォルトパスの末尾にあります。その機能が必要な場合は、明示的に追加する必要があります。 -F/Network/Library/Frameworks)。これ-Fオプションは新しいフレームワーク検索パスを追加します。これ-Zオプションは削除する標準検索パス。これ -syslibrootオプションは、すべての検索パスにプレフィックスを追加します。

ldオプションの前にプレフィックスを付けてオプションを渡します-Wl(スペースが必要な場合はコンマを使用)。あなたの目的に合わせてスクリプトを作成します。

  • -Z検索パスを削除するには
  • 使用する必要があるセクションをもう一度追加してください。-L

このclangオプションは-v詳細情報を表示します翻訳者たとえば、次を使用してディスプレイ-vに渡されます。ld-Wl,-vリンカーの詳細。

たとえば、次のようになります。

#!/bin/sh
clang -Wl,-Z -L/usr/lib -F/Library/Frameworks -F/System/Library/Frameworks "$@"

clangマニュアルには文書化されていませんが、簡単な確認-Zでリンカーに簡単なオプションを渡すことがわかります。一方、clangドキュメントオプション(主にgcc互換性のため)は、インクルードディレクトリのさまざまなカテゴリの検索を抑制しますか?

   -nostdinc
          Do not  search  the  standard  system  directories  or  compiler
          builtin directories for include files.

   -nostdlibinc
          Do not search the standard system directories for include files,
          but do search compiler builtin include directories.

   -nobuiltininc
          Do not search clang's builtin directory for include files.

埋め込みファイルの検索パスを表示するオプションはありませんが、プリプロセッサを実行してこれを推測できます。

スクリプトが機能してスクリプトを実行すると、スクリプト名をconfigure設定できます。たとえば、次のようになります。CC

./configure CC=cc-system

私はしばらくこの作業をしてきましたが、この特定の組み合わせは必要ありませんでした(参照コンパイララッパー)。

答え2

プロセスが協力している(つまり、隠された問題を意図的に解決しようとしない)、動的にリンクされた実行可能ファイルであると仮定すると、次のようになります。DYLD_PRELOAD(これは他のほとんどのUnixバリアントで呼び出されるOSXの名前です。LD_PRELOAD)ファイル検索機能を含むライブラリをロードし、いくつかの結果を偽造します。

ここあなたが望むほとんどすべてを行うコードの例です。プログラムが表示したくないファイルにアクセスする方法によっては、他の機能をオーバーライドする必要があるかもしれませopenaccess

答え3

したがって、実際には特定のディレクトリを非表示にしたくないので、スクリプトがそのconfigureディレクトリ内の特定のファイルを見つけることができないようにするだけです。

これを行う最も簡単な方法は、おそらくconfigure.acエディタで開き、埋め込みファイルやライブラリを検索しないように編集してからスクリプトを/usr/local再生成することです。または最終的にはシェルスクリプトなので、直接編集することもconfigureできます。configureしかし、これはスクリプトが生成されるため、もう少し複雑です。

答え4

ビルド用に選択したライブラリとconfigureスクリプトを設定する方法に応じて、configureライブラリを提供する「外部パッケージ」を使用しないように指示するか、別のパスで検索して使用を無効にすることができます。

これを行う方法はconfigure通常次のとおりです。

$ ./configure --without-PACKAGE

パッケージの使用を無効にします。または

$ ./configure --with-PACKAGE=PATH

PACKAGEライブラリを提供する「外部パッケージ」で、インストールパッケージPATHのプレフィックスパスである別のパスを指定してインストールしてください。

別の解決策は、ターゲットマシンと同じ構成で仮想マシンを設定し、そこに構築することです。

関連情報