GNU/Linux >> Linux の 問題 >  >> Linux

Bashに入力されたすべてのコマンドとすべてのファイル操作をログに記録する方法は?

(rootまたはuserのいずれかによって)bashに入力されたすべてのコマンドと、すべてのファイル操作をログに記録したいと思います。

このログファイルに問い合わせて非常に役立つ情報を提供できるツールを作成できるという考えです。

たとえば、これまでに入力したすべてのコマンドを1行に1つずつリストし、8〜24時間の時間差を「---」、「===」と表示すると便利です。 2014年6月24日===”24時間以上のギャップ。 「===…」セッション内の重複も排除すれば、さらに効果的です!

つまり、「flask / mod_wsgi /apacheをPython3.xにアップグレードする」などのタスクを実行すると、レコードが残され、6か月後に同じことをしなければならない場合に取得できる証跡が残ります。

同じ目的で、特定のパッケージをインストールした後にどのファイルシステムの変更が発生したかを確認すると非常に便利です。これで、構成ファイルがどこに配置されたかがわかります。

PS私はUbuntu14.04を使用しています

承認された回答:

これは実際の会計ほど包括的ではなく、ユーザーが簡単に元に戻すことができますが、実際の会計システムである必要はなく、BASHとrsyslogの両方が使用されていると仮定して、システム全体のBASHRCファイルを編集します。 :

sudo -e /etc/bash.bashrc

そのファイルの最後に追加します:

export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'

上記、logger 時間、ユーザー、コマンド、およびコマンドの戻り値を記録します。新しいファイルを使用して「local6」のログを設定します:

sudo -e /etc/rsyslog.d/bash.conf

そして内容…

local6.*    /var/log/bash_commands.log

rsyslogを再起動します:

sudo service rsyslog restart

ログアウト。ログインします。ログローテーション:

sudo -e /etc/logrotate.d/rsyslog

同じように回転するログファイルのリストがあります…

/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message

そのリストに新しいbash-commandsログファイルを追加します:

/var/log/bash_commands.log

rsyslogを保存して再起動/再ロードします。 (ローテーションによって最終的にログファイルが上書きされるため、さらに検討または構成が必要になる場合があります。)

パッケージにインストールされているすべてのファイルを表示するには:

dpkg-query -L [package_name]

したがって、ソフトウェアをインストールするときに、そのようなことを実行できます。

dpkg-query -L abc-package > /var/log/files_abc-package.log

Linux
  1. 入力したすべてのコマンドをログに記録するにはどうすればよいですか?

  2. Linux ですべてのシェル コマンドをログに記録する方法

  3. bashでファイルをファイルタイプ別にフォルダにソートする方法(「file」コマンドを使用)?

  1. sourceコマンドを使用して関数と変数をBashにインポートします

  2. コマンドラインからアクセス許可と所有者を変更する方法

  3. ユーザーが実行したすべてのコマンドをログに記録するにはどうすればよいですか?

  1. エイリアス コマンドを bash スクリプトまたは .bashrc ファイルで機能させる方法

  2. Linuxコマンド出力をファイルに出力するには?

  3. 誤ってパスワードを bash コマンド ラインに入力してしまいました