Bashファイルからのみ環境変数と関数を取得する

Bashファイルからのみ環境変数と関数を取得する

Bashからファイルをインポートできるかどうか疑問に思います(. filenameまたは使用source filename)。ただし、他の行は無視され、環境変数と関数のみを継承します。

たとえば、検索するファイルには次の行を含めることができます。

my_var="Something"
do_something_quickly() {
  some_command
  another_command
}
another_var="Something-Else"
some_command
final_var="FinalString"

このファイルと他の同様のファイルをインポートできるようにしたいが、変数と関数のみをインポートすることで、他のすべての行(ランダムsome_commandまたは悪意のあるコマンドなど)は完全に無視されます。これを達成する方法はありますか?

ベストアンサー1

私はあなたが望むことが不可能であるか、少なくともそれほど現実的ではないと思います。

まず、セキュリティ上の理由で変数と関数を保存し、関数呼び出しを無視したいと言いました。誰かがファイルに悪い内容を置く能力がある場合、その人はそれを役に立つ機能に入れて弾丸を避けることができます。

第二に、ギターを実行せずに変数を維持したいと言いました。しかし、私の考えでは、その行はあなたが思うほど明確ではないと思います。 Bashスクリプトのほとんどの変数は、外部変数を使用するか、いくつかのコードなどを実行することによって設定されます。このような行は、DIR="$( realpath ${0} )";「安全な」ハードコーディングの変形と同じくらい一般的ですUSERNAME="batman";

必要なものが単にハードコードされた値だけであれば、ファイル内のVAR = EXPRスタイルパターンを見つけて、そのリストを有用なものにフィルタリングする方が良いでしょう。

とにかく、運命と憂鬱は私たちの後ろにあります。あなたが説得されていない場合、または私が何かを逃した場合は、あなたに役立つ可能性があるいくつかのオプションを検討してください。

  1. BashにはRESTRICTED SHELL-mode(rbash)があります。正確な詳細はBashのマニュアルページで確認できますが、基本的にここでスクリプトを実行すると、さまざまな種類のセキュリティリスクにさらされることなく、望ましい結果が得られます。

  2. dockerコンテナ(//podmanなど)またはネームスペース環境(unshare無人ユーザーアカウントを含む)でスクリプトを実行できます。

  3. shoptbashシェルまたはスクリプトで有効にできるオプションを表示しますextdebug。長い間使用していないが正しく覚えている場合は、デフォルトで他のシェルスクリプトとそのファイルのすべてのステートメントを実行できます。 bashがその行を実行するか、スキップするか、変更するか、含めるかを決定するフィルタ機能。

浮上する主な機能は次のとおりです。

おすすめ記事