2

bashの$HISTFILESIZEの制限に到達するために、どのようにループを作成しますか?

実際にコマンドを出力するこのようなものはありますか?

for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done

目標は、悪意のあるユーザーがシェルの履歴を隠すために使用する可能性のある単純なループでログを上書きできるかどうかを確認することです。私は.bash_historyに次のアドレスのみを追加しています:chattr + a .bash_historyに依存することはおそらく追跡するための最良の方法ではないことを知っています。これは、「私は興味があります」という質問です。

ありがとうジョン

4

2 に答える 2

1

必要はありません。Bashには、ループseqで反復するための数値を提供する2つの方法があります。for

for i in {1..100}

これは、変数を引数として取りません(を使用しない限りeval)。

for ((i = 1; i <= $HISTFILESIZE; i++))

明らかに変数を使用できます。

できるよ:

for ((i = 1; i <= $HISTFILESIZE; i++))
do
    history -s "anything you want"
done

この手法を使用すると、ユーザーは現在のセッションのメモリ内履歴リストを消去できます。ユーザーが終了すると、そのリストが履歴ファイルに書き込まれます。

履歴ファイルを切り捨てることができます。

>~/.bash_history

それが追加のみではないと仮定します。

于 2012-07-04T01:25:21.197 に答える
0

まあ、ユーザーはいつでも実行できます

for i in $(seq 1 $HISTFILESIZE); do echo test-$i;done

あなたが言うように、そして出力をターミナルに貼り付けます。しかし.bash_history、はユーザーのホームディレクトリにあるので、ユーザーはchmod +wそれshredを簡単に実行できます。

于 2012-07-04T01:09:31.767 に答える