管理しているシステムのすべてのユーザーの履歴設定を変更したいのですが、接続端末からの情報も含めたいのですが、who
sysadmin:/ # who
sysadmin pts/0 Mar 26 07:11 (sysadmin.doofus.local)
私は現在、以下の方法で履歴を変更しています。これらの設定の多くはここで何度も説明されていると思います。しかし、私はこのコードを「Linux システム管理レシピ: Juliet Kemp" ずっと前に。
shopt -s histappend
PROMPT_COMMAND='history -n;history -a'
HISTSIZE=100000
HISTFILESIZE=100000
HISTTIMEFORMAT="%m/%d/%y %T "
shopt -s histappend
複数の端末を開いている場合に情報が失われる可能性がある問題を修正しました。
PROMPT_COMMAND='history -n;history -a'
複数の端末間で履歴をリアルタイムに追加できるように拡張されます。
HISTSIZE=100000
HISTFILESIZE=100000
history
保持 量を増やす
HISTTIMEFORMAT="%m/%d/%y %T
「履歴の各行の先頭にタイムスタンプを付ける」
通常、 history
835 ls
836 cd ..
私の修正された現在のhistory
結果
5853 03/26/12 07:16:49 ls
5854 03/26/12 07:16:50 ll
history
私が見たいのは
5853 03/26/12 07:16:49 sysadmin.doofus.local ls
5854 03/26/12 07:16:50 sysadmin.doofus.local ll
001 03/26/12 05:11:29 demo_user.doofus.local cd
002 03/26/12 05:11:30 demo_user.doofus.local ll
私は名前を見ることに「こだわる」わけではありません。検索やクエリを実行する必要なく、別の場所DNS
から取得する場合のみ、そこに名前を表示したいのです。IP アドレスで十分です。who
002 03/26/12 05:11:30 192.168.0.2 ll
なぜでしょうか? 私は、同じグループの複数のユーザーが日常業務を行うためにユーザー ID を共有する複数のシステムを管理しています。これにより、組織内の実際の場所と実際のユーザーを、履歴で行った操作と関連付けることができます。
これは最適ではないことは承知しており、変更したいと思っていますが、クルーズ船ほどの大きさの船に乗っているときは、ヘアピンカーブを曲がろうとはしません。(注意:ヘアピンカーブを曲がると、乗客が船外に投げ出そうとします)
とにかく、より良いソリューションに移行できるようになるまで、この追跡機能を利用したいと思います。
また、私が現在改造に使用しているものに関して何かお勧めがあれば、history
ぜひお聞かせください。
ありがとう、
編集: 1
他のプログラムを実行したり、「合理的な範囲内で」何か追加の設定をしたりする必要はありません。
オーバーヘッドを追加したいのです0
が、追加する必要がある場合は小さくする必要があります。
私はユーザーを信頼していますが、何かが起こった場合、たとえば同じユーザー名とパスワードでシステムにログインした 10 人のユーザーのうち誰がそれを行ったかを確認したいだけです。または、ユーザーではなく、ユーザーとして接続して何かを行うシステムで忘れられた可能性があります。または、接続してタスクを実行するcron
アプリケーションなどです。「悪いユーザー」を見つけることよりも、最小限の労力で追跡できることが重要です。BMC Control-M
ssh
編集2:
システムはSLESとRHELを実行しています
答え1
llua の提案により、履歴をもう少し操作できるようになりました。システム全体の BASH RC ファイル (おそらく /etc/bash.bashrc) に 1 行追加します。
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
システム ロガーで「local6」のログを設定します。たとえば、次のようになります。
local6.* /var/log/commands.log
システム ロガーを再起動します。ログ ファイルのローテーションを設定するとよいかもしれません。ログアウトしてログインすると、次のような形式で履歴が /var/log/commands.log に書き込まれます。
日付 時刻 ホスト名 ロガー: ユーザー名 [audit_pid]: コマンド [return_val]
好みに応じてさらに調整することもできます。
答え2
以下の段落は一般的な考え方を説明しており、いくつかの側面では時代遅れですが、最新のものを使用できます。これページ。大きなファイル ~/.bash_history.archive を使用します (HISTFILE=~/.bash_history とは別)。そして、各 bash セッションの終了時に、新しい履歴行をそれに追加します。
このアプローチの最初の問題は、終了するたびに bash にこのスクリプトを呼び出させるにはどうすればよいかということでした。確かに、「exit」と入力して終了する場合は、「exit」関数にエイリアスを付けることができますが、そのためにショートカット Ctrl-D を使用しており、組み込みの終了関数以外の何かに再割り当てする方法を見つけることができませんでした。
そこで最初の試みは、Ctrl-Dを禁止することでした。
export IGNOREEOF=10
終了関数を呼び出すために、Ctrl + X の組み合わせを 2 回定義します。
しかし、正しいアプローチは bash の exit tramp を使用することです。これは、Ctrl-D、終了、xterm ウィンドウを閉じるなど、bash を終了する方法に関係なく呼び出されるため、完璧なソリューションです。
trap 'archive_history' EXIT
次の手順では、bash_history に開始行を定義して、新しい行のみを保存し、履歴ファイルに追加できるようにします。
export CURBASHSTART=`grep -v "^[ \t]*$" $HISTFILE | wc -l | awk '{print $1}'` CURBASHDATE=`date`
shopt -s cmdhist histappend
bash の起動時に必要なのはこれだけです。これで、現在の (新しい) 履歴がどの履歴行から始まるかがわかります。履歴を保存するには、次の部分を ~/.bashrc に追加します。
archive_history()
{
HISTORYOLD=${HISTFILE}.archive
CURTIME=`date`
CURTTY=`tty`
if [ x$HISTDUMPPED = x ]; then
echo "#-${HOSTNAME}-- ${CURBASHDATE} - ${CURTIME} ($CURTTY) ----" >> $HISTORYOLD
history $(($HISTCMD-${CURBASHSTART-0})) | sed -e 's/^[ ]*[0-9][0-9]* [ ]*//g' >> $HISTORYOLD
export HISTDUMPPED=1
fi
}
exit ()
{
archive_history
builtin exit
}
ファイル ~/.inputrc には、終了ショートカットを Ctrl-x x に再定義する次の行が含まれている必要があります。 最初はひどいショートカットだと感じるかもしれませんが、すぐに慣れます。信じてください。
$if Bash
# to exit through calling exit function which will archive the history
"\C-x\C-x": "exit\n"
# to dump history we have so far
"\C-x\C-w": "archive_history\n"
$endif
また、bashセッションがログインセッションで、' logout
'を呼び出して終了する場合は、次の行を追加してください。~/.bash_logout
archive_history
上記のすべてのアクションが完了すると、~/.bash_history.archive
次のようなセクションを含むファイルが見つかります。
#-belka-- Sun Oct 12 21:52:13 EDT 2003 - Sun Oct 12 21:53:25 EDT 2003 (/dev/pts/13) ----
exit
aptitude
exit
#-washoe-- Sun Oct 12 18:03:16 EDT 2003 - Sun Oct 12 23:06:48 EDT 2003 (/dev/pts/3) ----
exit
cd progr/letters/resume/
e resume.tex
一般的に、必要に応じて通常の履歴ファイルとして読み取ることができます。