あなたは次のことを知っています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、制限、現在の作業ディレクトリ、開いているファイル記述子、信号設定、端末制御など)に影響を与える可能性があります。