- PR -

操作ログ取得について

投稿者投稿内容
Pitch
常連さん
会議室デビュー日: 2005/11/14
投稿数: 44
投稿日時: 2006-05-21 13:23
CUI操作ログを一般ユーザとrootでログインした際にバックグラウンドで取得する方法を考えています。
取得するものとしては、
 ログインユーザ 
 ログイン日時
 コマンド
 コマンド結果
 ログアウト日時
ですが、保存ログディレクトリを指定して日時ファイル名としたいと思っています。
何か良い方法は無いものか、どうぞよろしくお願いします。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-05-21 14:50
こんにちは。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=19908&forum=10&5
ここら辺が参考になりませんか?

ログイン関係は lastlog で追いかけられると思います。
上記と組み合わせて…ということになるとは思いますが。

ご参考までに。
Pitch
常連さん
会議室デビュー日: 2005/11/14
投稿数: 44
投稿日時: 2006-05-22 00:05
あるかなさん、有難うございました。
実際、/home/user1/.bashrcに
script ~/$(date +%Y%m%d).log
を追加し、ログインし直してgnomeターミナルを起動してみたのですが、
 Script started,file is /home/user1/20060521.log
が10数行表示を繰り返しました。
CPUも重くなり作業ができないほどです。
しかも、Scriptが正しく起動できたとしてもexitで終わらせてしまうと操作ログは取得できないのですが。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-05-22 15:29
自分が以前に行ったときは相当前だったので、負荷の程は忘れましたが…
/etc/profile に以下を追加して exit の際に shell も一緒に落とすようにはしていました。
昔のを掘り起こしたのですが、これで動いてた…と思います。

これで駄目でしたら、今試せる環境にいないので、
他の識者の方のアドバイスをお待ちください。

ちなみにセキュリティ考慮されるなら shell に手を入れるしかないです。
これは、敷居が高いというか、私には無理でした…
script を用いる方法では ps でプロセスが見れるので kill 出来ますし…
他の方法でも同様だと思います(bash_history も自身で消せるしねってレベルで)。

※以下は、環境によって多少変更するところはあると思います。
コード:

事前作業
mkdir -p /tmp/logs/script_logs
chmod -R 777 /tmp/logs

/etc/profile 追記
## Users log ----------
LOGDIR=/tmp/logs/script_logs
USER=`whoami`
NOW=`date +%Y%m%d%H%M%S`
LOGFILE=$LOGDIR/$USER/bash-$NOW

if [ ! -e $LOGDIR/$USER ] then
mkdir $LOGDIR/$USER
fi
if [ -e $LOGFILE ] then
mv -f $LOGFILE $LOGFILE.bak
fi
P_PROC=`ps aux | grep $PPID | grep bash | awk '{print }'`
if [ "$P_PROC" = -bash ]
then
script $LOGFILE
exit
fi


#BBコードが間違ってました...

[ メッセージ編集済み 編集者: あるかな 編集日時 2006-05-22 15:59 ]
Pitch
常連さん
会議室デビュー日: 2005/11/14
投稿数: 44
投稿日時: 2006-05-23 21:07
教えてもらったとおりにユーザホーム配下の.bashrcに記述して実行して見ました。
そうしたら、2つ目のターミナルオープン時に
mkdir: ディレクトリ `/var/logs/scriptlogs/root' を作成できません: ファイルが存在します
と表示されてしまいました。
スクリプトファイルも全然できておりませんでした。
FedoraCoreだとどこか違うのでしょうか。
あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-05-23 22:51
現在の環境(CentOS4.2)で試しました。
掘り出したモノは、どうやら telnet+bash な環境用でした。
ssh+bashであれば、下記の修正分で問題なく情報の取得が出来ているのを確認してます。
FC の問題ではないと思うので、下記の挙動を追って、自サーバ用に修正してみてください。

コード:
## Users log ----------
LOGDIR=/tmp/logs/script_logs
USER=`whoami`
NOW=`date +%Y%m%d%H%M%S`
LOGFILE=$LOGDIR/$USER/bash-$NOW

if [ ! -e $LOGDIR/$USER ]; then
  mkdir $LOGDIR/$USER
fi
if [ -e $LOGFILE ]; then
  mv -f $LOGFILE $LOGFILE.bak
fi
P_PROC=`ps aux | grep $PPID | grep sshd | awk '{ print $11 }'`
if [ "$P_PROC" = sshd: ]; then
  script $LOGFILE
  exit
fi


※全角$は半角に変換してください。
 なんでか、消されるので…

mkdir のエラーはディレクトリが既に存在しているのに再度作ろうとしているからでは?
if の -e で存在チェックして、存在しなければ mkdir 発行としているので、
どこかで構文をミスっている可能性があるかも、です。
一つ一つの挙動を追って、がんばってください。
Pitch
常連さん
会議室デビュー日: 2005/11/14
投稿数: 44
投稿日時: 2006-05-24 00:07
たびたび申し訳ありません。
こちらの現在の環境はFC5で、ローカルコンソールです。
どうやら、P_PROC=`ps aux | grep $PPID | grep sshd | awk '{print $11 }'`
のところで、結果が消えておりました。
実行結果としては、
#ps aux | grep $PPID
root 15857 0.5 4.3 67852 21536 ? Sl May23 0:02 gnome-terminal
root 16034 0.0 0.1 4960 776 pts/1 S+ 00:01 0:00 grep 15857
#ps aux | grep $PPID | grep sshd
→結果無し。
です。スクリプトファイルは取得できておりません。
未記入
常連さん
会議室デビュー日: 2006/04/11
投稿数: 21
投稿日時: 2006-05-24 05:43
引用:

Pitchさんの書き込み (2006-05-22 00:05) より:
あるかなさん、有難うございました。
実際、/home/user1/.bashrcに
script ~/$(date +%Y%m%d).log
を追加し、ログインし直してgnomeターミナルを起動してみたのですが、
 Script started,file is /home/user1/20060521.log
が10数行表示を繰り返しました。
CPUも重くなり作業ができないほどです。
しかも、Scriptが正しく起動できたとしてもexitで終わらせてしまうと操作ログは取得できないのですが。




どうも見た感じ、へんなループに陥ってるみたいですね。
.bashrcでbashを起動して.bashrcを読み込みそれがまたbashを起動しているような。。。。。

==============================================================
後「あるかな」さんのいいたいことをまったく理解されてないようですね。
どんなことをやっているスクリプトかよく読んで見られたほうがよろしいですよ。

スキルアップ/キャリアアップ(JOB@IT)