問題タブ [environment-variables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4375 参照

java - ユーザーが Java アプリケーションをインストールしたパスを取得するにはどうすればよいですか?

アプリケーションのインストール ディレクトリをデフォルトとする Java のファイル ダイアログを表示したいと考えています。

その情報をプログラムで取得する最良の方法は何ですか?

0 投票する
3 に答える
1653 参照

java - JavaでOS固有の情報を取得する最良の方法は何ですか?

  1. 具体的には、Windowsで「..\Documents & Settings\All Users」を取得します。基本的に、ソフトウェアが実行されているOSに基づいてフロントエンドを動的に派生させる必要があるすべてのパスです。(今、これに対する答えが必要です)
  2. 現在のユーザーのマイ ドキュメント ディレクトリ(これは回答 済みです) と、基本的に、ソフトウェアが実行されている OS に基づいてフロント エンドを動的に派生させる必要があるすべてのパスです。
0 投票する
9 に答える
195374 参照

visual-studio - How do I set specific environment variables when debugging in Visual Studio?

On a class library project, I set the "Start Action" on the Debug tab of the project properties to "Start external program" (NUnit in this case). I want to set an environment variable in the environment this program is started in. How do I do that? (Is it even possible?)

EDIT:

It's an environment variable that influences all .NET applications (COMplus_Version, it sets the runtime version) so setting it system wide really isn't an option.

As a workaround I just forced NUnit to start in right .NET version (2.0) by setting it in nunit.exe.config, though unfortunately this also means all my .NET 1.1 unit tests are now also run in .NET 2.0. I should probably just make a copy of the executable so it can have its own configuration file...

(I am keeping the question open (not accepting an answer) in case someone does happen to find out how (it might be useful for other purposes too after all...))

0 投票する
32 に答える
792850 参照

macos - OSXでの環境変数の設定

OS XでPATHなどの環境変数を変更する適切な方法は何ですか?

Googleを少し調べて、編集する3つの異なるファイルを見つけました。

  • / etc / paths
  • 〜/ .profile
  • 〜/ .tcshrc

私はこれらのファイルのいくつかさえ持っていません、そして私はOS Xが現在bashを使用しているので、 .tcshrcが間違っているとかなり確信しています。これらの変数、特にPATHはどこで定義されていますか?

OS X v10.5(Leopard)を実行しています。

0 投票する
12 に答える
9307 参照

path - cshでパス変数を複製しないようにする方法

パスを設定するために、cshrcファイルに次のようなものを含めるのが一般的です。

しかし、cshrcファイルを複数回ソースすると、パスが重複します。重複を防ぐにはどうすればよいですか?

編集:これはそれを行うための1つの汚れた方法です:

0 投票する
26 に答える
667986 参照

windows - Windowsのコマンドプロンプトから環境変数を更新するコマンドはありますか?

環境変数を変更または追加した場合は、コマンドプロンプトを再起動する必要があります。CMDを再起動せずにこれを実行できるコマンドはありますか?

0 投票する
9 に答える
235397 参照

c# - C# で環境変数を取得および設定するにはどうすればよいですか?

環境変数を取得するにはどうすればよいですか?何かが不足している場合は値を設定しますか?

0 投票する
2 に答える
9158 参照

windows - Ruby による環境変数の永続化

Ruby で DOS 環境変数を設定しようとしていて、スクリプトが終了した後もそれを維持しようとしています。たとえば、Ruby スクリプトset_abc_env.rbで環境変数 'ABC' を 'blah' に設定したい場合は、次のように実行する必要があります。

どうすればいいですか?

0 投票する
2 に答える
382 参照

security - 環境変数によって識別されるディレクトリ内のファイルへの安全なアクセス?

特にUnixとそのバリアントの場合、環境変数によって(部分的に)指定されたパスを介したファイルアクセスのセキュリティを処理するコードを誰かが指摘できますが、Windowsソリューションも興味深いですか?

これは非常に長い質問です。SOパラダイムにどれだけ適合するかはわかりません。

このシナリオを考えてみましょう。

バックグラウンド:

  • ソフトウェアパッケージPQRは、ユーザーが選択した場所にインストールできます。
  • 環境変数$PQRHOMEは、イン​​ストールディレクトリを識別するために使用されます。
  • デフォルトでは、$ PQRHOMEの下にあるすべてのプログラムとファイルは、特別なグループpqrgrpに属しています。
  • 同様に、$ PQRHOMEの下にあるすべてのプログラムとファイルは、特別なユーザーpqrusrまたはユーザーrootに属します(これらはSUIDルートプログラムです)。
  • いくつかのプログラムはSUIDpqrusrです。さらにいくつかのプログラムはSGIDpqrgrpです。
  • ほとんどのディレクトリはpqrusrによって所有され、pqrgrpに属しています。一部は他のグループに属することができ、それらのグループのメンバーはソフトウェアで追加の特権を取得します。
  • 特権実行可能ファイルの多くは、pqrgrpのメンバーではない人が実行する必要があります。プログラムは、ユーザーがこの質問に直接関係しない難解なルールによって実行を許可されていることを検証する必要があります。
  • 起動後、一部の特権プログラムは、存続期間にわたって多くのユーザーに代わって動作する可能性のある長時間実行デーモンであるため、昇格された特権を保持する必要があります。
  • さまざまな不可解な理由により、プログラムはディレクトリを$PQRHOMEに変更することを許可されていません。

現在のチェック:

  • プログラムは現在、$ PQRHOMEとその下のキーディレクトリが「安全」であることを確認しています(pqrusrが所有し、pqrgrpに属し、パブリック書き込みアクセス権がありません)。
  • その後、プログラムは環境変数の完全な値を介して$PQRHOMEの下のファイルにアクセスします。
  • 特に、G11NおよびL10Nは、「safe」ディレクトリ内のファイルにアクセスし、$ PQRHOMEから派生したフルパス名と既知のサブ構造(たとえば、$ PQRHOME / g11n / en_us / messages.l10n)。

$PQRHOMEの「インストール済み」の値が/opt/pqrであると想定します。

既知の攻撃:

  • 攻撃者はPQRHOME=/ home / Attacker/pqrを設定します。
  • これは実際には/opt/ pqrへのシンボリックリンクであるため、PQRプログラムの1つをpqr-victimと呼び、ディレクトリをチェックすると、正しい権限が与えられます。
  • セキュリティチェックが正常に完了した直後に、攻撃者はシンボリックリンクを変更して、明らかに攻撃者の制御下にある/ home / Attacker/bogus-pqrを指すようにします。
  • pqr-victimが、おそらく安全なディレクトリの下にあるファイルにアクセスすると、悲惨なことが起こります。

PQRは現在説明どおりに動作し、大規模なパッケージ(数百万行のコード、さまざまなコーディング標準に合わせて10年以上にわたって開発されましたが、とにかく無視されることが多かった)であるとすると、どのような手法を使用して修正しますか?問題?

既知のオプションは次のとおりです。

  1. すべてのフォーマット呼び出しを変更して、実際の引数をフォーマット文字列と照合する関数を使用します。追加の引数は、関数に渡される実際の型を示します。(これはトリッキーであり、変更するフォーマット操作の数が非常に多いため、エラーが発生しやすい可能性がありますが、チェック機能自体が適切であれば、うまく機能します。)
  2. PQRHOMEへの直接パスを確立し、セキュリティについて検証し(詳細は以下を参照)、セキュリティが確保されていない場合は開始を拒否し、その後、$ PQRHOMEの値ではなく直接パスを使用します(異なる場合)。(これには、getenv()からの値ではなく、マップされたパスを使用するために$ PQRHOMEを使用するすべてのファイル操作が必要です。たとえば、これには、/ home / Attacker/pqrが/opt/pqrへのシンボリックリンクであることをソフトウェアが確立する必要があります。 / opt / pqrへのパスが安全であり、その後、ファイルが$ PQRHOME / some / thingsとして参照される場合は常に、使用される名前は/ home / Attacker / pqr/someではなく/opt/ pqr / some/thingになります。 /thing。これは大きなコードベースです。修正するのは簡単ではありません。)
  3. $ PQRHOME上のすべてのディレクトリが、シンボリックリンクを介して追跡している場合でも安全であることを確認し(詳細は以下を参照)、安全でないものがあるとソフトウェアは起動を拒否します。
  4. ソフトウェアのインストール場所へのパスをハードコーディングします。(これはPQRでは機能しません。他に何もないとしても、テストは地獄になります。ユーザーにとっては、1つのバージョンしかインストールできず、アップグレードなどには並列実行が必要です。これはPQRでは機能しません。)

安全なパスのために提案された基準:

  • ディレクトリごとに、所有者が信頼されている必要があります。(理論的根拠:所有者はいつでも権限を変更できるため、ソフトウェアのセキュリティを損なうようなランダムな変更を行わないように所有者を信頼する必要があります。
  • ディレクトリごとに、グループに書き込み権限がないか(グループのメンバーがディレクトリの内容を変更できないようにする)、またはグループが信頼されている必要があります。(理論的根拠:グループメンバーがディレクトリを変更できる場合、ソフトウェアのセキュリティを破ることができるため、ディレクトリを変更できないか、変更しないように信頼されている必要があります。
  • ディレクトリごとに、「others」はディレクトリに対する書き込み権限を持ってはなりません。
  • デフォルトでは、ユーザーroot、bin、sys、およびpqrusrを信頼できます(binおよびsysが存在する場合)。
  • デフォルトでは、GID = 0(ルート、ホイール、またはシステムとも呼ばれます)、bin、sys、およびpqrgrpのグループを信頼できます。さらに、ルートディレクトリ(MacOS Xではadminと呼ばれます)を所有するグループを信頼できます。

POSIX関数realpath()は、/ home / Attacker/pqrを/opt/pqrにマップするマッピングサービスを提供します。セキュリティチェックは行いませんが、解決されたパスでのみ行う必要があります。

それで、それらすべてを背景として、セキュリティを確保するために漠然と関連した旋回を通過する既知のソフトウェアはありますか?これは過度に妄想的ですか?(もしそうなら、なぜ-そしてあなたは本当に確信していますか?)

編集:

いろいろなコメントありがとうございます。

@ S.Lott :(質問で概説されている)攻撃は、少なくとも1つのsetuidルートプログラムが(非特権の)ユーザーが選択したフォーマット文字列を使用するように作成でき、少なくともプログラムをクラッシュさせる可能性があるため、おそらく取得できることを意味しますルートシェル。幸い、ローカルシェルアクセスが必要です。リモート攻撃ではありません。そこにたどり着くには無視できない量の知識が必要ですが、専門知識が「そこにある」わけではないと仮定するのは賢明ではないと思います。

したがって、私が説明しているのは「フォーマット文字列の脆弱性」であり、既知の攻撃パスには、プログラムを偽造して、安全なメッセージファイルにアクセスしていると思われるものの、実際にはメッセージファイル(フォーマット文字列を含む)を使用することが含まれます。これらは、ソフトウェアの制御下ではなく、ユーザーの制御下にあります。

0 投票する
5 に答える
76870 参照

java - log4j xml 構成でのシステム環境変数の使用

log4j xml構成ファイルで(Javaシステム・プロパティではなく)システム環境変数を参照できますか?

次のようなことができるようになりたいです。

システム環境変数からそれを取得するので、-D パラメーターを使用して非常に多くのものを渡す必要がなくなります。