Bashスクリプトは*全体*環境をリセットして整理できますか?どのように?

Bashスクリプトは*全体*環境をリセットして整理できますか?どのように?

あなたは次のことを知っていますsudo

Defaults env_reset

これにより環境注入が不可能になる。この機能をbashスクリプトで直接「内部で」使用できるかどうか疑問に思います。

少なくとも部分的には確かです。例:

#!/usr/bin/env php
<?php
//...

// sanitizes $PATH
putenv("PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"); 

// unsets $LD_LIBRARY_PATH, as it should be in Ubuntu
putenv('LD_LIBRARY_PATH');
//...

env_resetそのようにスクリプトを実行できますかsudo?行う方法?

編集する:

私はこれを「外部で」実行するのではなく、env -i commandスクリプト自体内で実行する方法を探しています。私の意図は、誰が(どのユーザー)、どのように(どのような場合、環境変数)を実行しても、セキュリティを確保することです。

ベストアンサー1

bashいくつかの環境変数自体を使用します。bash起動して最初のコマンドを解釈する準備ができたときは、すでに遅すぎて悪意のある環境がすでにbash被害を受けている可能性があります。

bash電話する前に環境を整理する必要があります。 C関数を使用してほとんどのシステムで環境を消去することも、スクリプトをclearenv()呼び出して引数に空のリストを渡すこともできます。execve()envp

スクリプトに次のものが含まれていても:

#! /bin/bash -
:

:特殊組み込みコマンドとして)環境にSHELLOPTS=xtrace PS4='$(reboot)'含まれている場合にreboot呼び出されます:

bash動的にリンクされている場合は、LD_PRELOAD呼び出し時にすぐに任意のコードを実行LD_LIBRARY_PATHできます。bash

bashまた、構文解析のためにロケールの文字セットを尊重するため、LOCPATH変数LC_*を使用して行から任意のコードを呼び出すこともできます#! /bin/bash -#!/bina文字を空白に設定)。

また見なさい:

env SHELLOPTS=noexec any-bash-script

これはbash何もしません。

これはほんの数例です。

さらに、環境変数はコマンドの開始時に継承する唯一の項目ではなく、その動作(パラメータ、umask、制限、現在の作業ディレクトリ、開いているファイル記述子、信号設定、端末制御など)に影響を与える可能性があります。

おすすめ記事