次のshebangラインを使用する提案をいくつかの場所で見ました。
#!/usr/bin/env bash
変える
#!/usr/bin/bash
私の反応は、「誰かが自分の実行可能ファイルをこれに置き換えるとどうなりますか~/.local/bin
?」です。このディレクトリは通常、システム全体のパスの前にユーザーパスに設定されます。私はこれがセキュリティ上の問題だと思っており、一般的に深刻に考えるべき問題ではなく偶発的に残していますが、この理論をテストしたいと思いました。
これを試すために、私は次のことをしました。
echo -e "#!/usr/bin/python\nprint 'Hacked!'" > $HOME/.local/bin/bash
chmod 755 $HOME/.local/bin/bash
PATH=$HOME/.local/bin env bash
これは
/usr/bin/env: ‘bash’: No such file or directory
何かが捉えられたかどうかを確認するために私もそうでした。
echo -e "#!/usr/bin/python\nprint 'Hacked!'" > $HOME/.local/bin/perl
chmod 755 $HOME/.local/bin/perl
PATH=$HOME/.local/bin env perl
期待どおりに印刷されます。
Hacked!
bash
代替品が見つかりませんが、代替品が見つかった理由を誰かが私に説明できますかperl
?これが(私の観点から)ポイントを見逃した一種の「安全」対策ですか?
/usr/bin/env bash
編集:誰かが私にメッセージを送ったので/bin/bash
。上記のように質問します。
EDIT2:これは私が間違っていること間違いありません。今日再試行しましたが(env
暗黙的なパスではなく明示的なパスを使用)、「見つかりません」の動作はありません。
ベストアンサー1
「誰かが実行可能ファイルを〜/ .local / binからこのファイルに置き換えるとどうなりますか?
これでスクリプトは機能しません。
しかし、他の方法でスクリプト自体を壊すこともでき、台無しにしPATH
たりenv
。
ユーザーその他ユーザーディレクトリを変更しPATH
たり、PATH
別のユーザーのディレクトリを編集できる場合、あるユーザーが別のユーザーを操作することは事実上不可能です。
ただし、シェルスクリプトではなく、一部のプログラムのsetuidラッパーなど、追加の権限を付与するスクリプトの場合は状況が異なります。そのような場合必要絶対パスを使用してプログラムを実行し、権限のないユーザーが変更できないディレクトリに配置し、プログラムの起動時に環境をクリーンアップします。