̃Gg[͂ĂȃubN}[Nɒlj

シェルスクリプト :: シェルスクリプトのセキュリティーを高める



シェルスクリプトのセキュリティーを高める TIPS を3つ紹介します。
以下のソースをシェルスクリプトの冒頭部に`必ず書く'ことで、セキュリティーを高めることができます。
各行については、順を追って説明します。

 1 #!/bin/sh -
 2
 3 IFS="
 4  	"
 5
 6 PATH=/bin:/usr/bin:/usr/local/bin
 7 export PATH
 8

※. 左側の番号は説明の為のライン番号です。実際のコードには記載しません。

#!/bin/sh -

1 #!/bin/sh -

#!/bin/sh の後に - (ハイフン) を書く。
これは sh コマンドに、これ以上オプションが無いことを認識させます。
意図しないオプションをセットされることを防ぎます。


予約変数「IFS」

3 IFS="
4  	"

表示の仕様上、正確には見えませんが上記ダブルクォーテーションの間には「改行、スペース、タブ」が入力されています。


予約変数 IFS は、$* で引数を参照した場合の区切り文字を指定します。
IFS の値を明示的に「改行、スペース、タブ」にすることで、区切り文字の値を書き換えられて悪意のある攻撃を受けることを防ぎます。
ちなみに、IFS=“\n\040\t” とは記述できない。


IFS の挙動についは、下記参照。

% IFS=:
% array=(a b c d)
% echo "${array[*]}"
a:b:c:d 

% echo "${array[@]}
a b c d

$@ は IFS の影響を受けない。



環境変数「PATH」

 6 PATH=/bin:/usr/bin:/usr/local/bin
 7 export PATH

環境変数 PATH に標準的なコマンド位置を定義することで、悪意のあるコマンドを実行されることを防ぎます。
6行目で定義し、7行目 export で定義を有効にしています。


事例として、以下の例を参照のこと。

% cat welcome.txt
welcome!

% cat script.sh
#!/bin/sh -
echo `less welcome.txt`

% ./script.sh
welcome!

% cat /path/to/harm/less
#!/bin/sh -
echo 'get out!'

% PATH=/path/to/harm
% export PATH

% ./script.sh
get out!



programming/shell_script/etc/security.txt