Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
49
Help us understand the problem. What is going on with this article?
@_norin_

全実行コマンドの記録(CentOS7)

More than 5 years have passed since last update.

実行されたコマンドを記録するという要件に対するアプローチ
誰がいつどんなコマンドを実行したかを記録したい
ISMSとかPCIDSSでよく言われるモノ

世の中的アプローチ

1.acct/lastcomm

大方のOSが持ってるアカウンティング機能
が、コマンドは分かってもコマンド引数が記録されないという問題があって使いにくい。
それ以前に記録されるコマンド名の長さに制限がある(linux16文字、solaris8文字)
イマドキではないな=3

2.シェルのhistoryファイルを利用

実行コマンドがhistoryファイルに出力されるのを利用
以下問題点

  • ユーザが書き換え権限を持つので、ログの改変が可能
    * historyファイルのファイル名と保存位置の変更は環境変数の設定で可能だが、ユーザによる変更も可能(bashはtypsetでROに出来るがtcshはできるのか??)

  • シェルが終了した時点で書き出されるのでログイン中の記録を確認できない

  • 該当シェル上でユーザ自身がコンパイルした俺俺シェルを実行されると無意味

3.2同様だがhistoryをsyslogに吐きだす

  • bashは再コンパイルが必要
  • tcshは野良パッチが必要
  • zsh/kshは?
  • etc...

2.同様、俺俺シェル対策も必要

4.scriptコマンド

実行コマンドだけでなく全出力が記録されるためログサイズが巨大になりがち
2.同様、ユーザによるログ消去対応が必要
ログインシェル以外のコマンドログの取得が出来ない

商用アプライアンスによくあるタイプ

5.audit

いまどきのOSなら対応してそう

とりあえずCentOS7でやってみる
こまかいコンフィグは後回しで

 

Audit

何者?

Linuxのシステム監査用のツール群
BSDだとOpenBSMとか
コマンドログ以外にもファイルの変更とかいろいろ使えそうな感じ

起動確認

# systemctl status auditd

動いてなければ
# systemctl start auditd

監査ルール

コマンド起動はシェル⇒fork⇒execve⇒当該コマンド
の流れなので、execveが完了(=コマンド起動)を契機に記録するように指定
execveシステムコールの監査を記録する
# auditctl -a always,exit -F arch=b64 -S execve

2画面コンソールを開いて、一方で
# tail -f /var/log/audit/audit.log

もう一方でコマンドを実行してみる

lsの例

cdtype=SYSCALL msg=audit(1427685957.120:65358): arch=c000003e syscall=59 success=yes exit=0 a0=2150cf0 a1=2137d90 a2=2150210 a3=7fff4f55b720 items=2 ppid=20464 pid=21947 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts1 ses=9122 comm="ls" exe="/usr/bin/ls" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=EXECVE msg=audit(1427685957.120:65358): argc=2 a0="/bin/ls" a1="-aF"
type=CWD msg=audit(1427685957.120:65358): cwd="/tmp"
type=PATH msg=audit(1427685957.120:65358): item=0 name="/bin/ls" inode=17013545 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL
type=PATH msg=audit(1427685957.120:65358): item=1 name=(null) inode=42651673 dev=fd:01 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL

ナマログだと長いのとuidとかになってるところが人が見る分にはツライところかな。
それでも全操作&出力ログを取るよりはかなりマシだとは思う

ログの検索にausearchコマンドがあるので、こちらを使うとそれなりに整形された(?)ものが見れるかも

ausearch -sc 59 -c ls -i
# 59 はexecveのsyscall番号

type=PATH msg=audit(03/30/2015 12:25:57.120:65358) : item=1 name=(null) inode=42651673 dev=fd:01 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:ld_so_t:s0 objtype=NORMAL
type=PATH msg=audit(03/30/2015 12:25:57.120:65358) : item=0 name=/bin/ls inode=17013545 dev=fd:01 mode=file,755 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:bin_t:s0 objtype=NORMAL
type=CWD msg=audit(03/30/2015 12:25:57.120:65358) : cwd=/tmp
type=EXECVE msg=audit(03/30/2015 12:25:57.120:65358) : argc=2 a0=/bin/ls a1=-aF
type=SYSCALL msg=audit(03/30/2015 12:25:57.120:65358) : arch=x86_64 syscall=execve success=yes exit=0 a0=0x2150cf0 a1=0x2137d90 a2=0x2150210 a3=0x7fff4f55b720 items=2 ppid=20464 pid=21947 auid=test-a uid=test-a gid=test-a euid=test-a suid=test-a fsuid=test-a egid=test-a sgid=test-a fsgid=test-a tty=pts1 ses=9122 comm=ls exe=/usr/bin/ls subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)

ログローテート

/etc/audit/auditd.confで設定
かなり細かく設定できるが、デフォルトで良さそう。個別に必要なのはサイズと世代くらいか?
プラグイン(audisp)を使うと他サーバに転送もできるので、ログの一元管理も簡単に実現できそう。

その他

CentOS6は引数表示は無い模様(出力メッセージフォーマットはカーネル側の機能)

49
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
_norin_
とりあえず登録

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
49
Help us understand the problem. What is going on with this article?