表題の件です。ファイル授受する際に「だれが」「いつ」「どのファイルを」参照/取得したか?ログとして保持したいという要件です。
専用のシェルを利用するなど手段はありますが、メンテコストであったり、シェルの中身を見てログ出力部分を回避されてしまうなどあるかと思います。そのため、SCPクライアント側は特に制限せず普通のSCPコマンドを使ってもらい、サーバ側でログを出すようにしたい。
想定状況
サーバの/tmpにファイルを設置する
利用者はSCPでファイル取得している
SCPが来る場合「いつ」「だれが」「どのファイル」を転送したか?ログに出したい
サーバの設定
# uname -a
Linux ip-172-16-3-205.ap-northeast-1.compute.internal 4.14.232-177.418.amzn2.x86_64 #1 SMP Tue Jun 15 20:57:50 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
auditctl -w /tmp -p rwxa -F success=1
ファイル作成
touch /tmp/aaabbb
クライアントからファイル取得
scp user@XXX.XXX.XXX.XXX:/tmp/aaabbb .
**ログ出力
type=SYSCALL msg=audit(1626022142.750:11687): arch=c000003e syscall=257 success=yes exit=3 a0=ffffffffffffff9c a1=555a32b0aa00 a2=800 a3=0 items=1 ppid=4573 pid=4574 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=(none) ses=30 comm="scp" exe="/usr/bin/scp" key=(null)
type=CWD msg=audit(1626022142.750:11687): cwd="/home/ec2-user"
type=PATH msg=audit(1626022142.750:11687): item=0 name="/tmp/aaaa" inode=312761 dev=ca:01 mode=0100644 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
ログにはこの2倍ほどのログが出ていますが、ファイルを特定できる箇所だけ抽出しました。どのユーザーが、いつ、どのファイルをSCPしたか?ログから特定できます。このコマンドで設定を入れた場合、そのセッション内でしか有効にならないので運用する場合はファイルにした上で永続化をお願いいたします。またログ出力量が大幅に増えるのでディスクの残量には注意してください。
2021年ファイル授受にはもっとマシな方法がたくさんありますが、なんらかの理由でSCPを使っている場合はあるかと思います。そこで既存の仕組みは変えず、サーバ側で監査を入れる場合は利用できると思います。
以上、よろしくお願いいたします