毎週日曜日の午後10時に実行されるように週間レポートをスケジュールする必要があります。このレポートには、サーバーにログインしたすべてのアカウント(ユーザー名とIPアドレス)が表示されます。この出力は電子メールで送信されます。
この目的のために「last」と「mail」コマンドを使用したいと思います。
cronは以下の通りですが、-ㅏ'オプションを選択すると、ログインしたユーザーの完全な情報が一覧表示されます。ところで、先週だけにログインしたユーザーに関する情報を探しています。この目標を達成する方法は?
0 22 * * 0 /usr/bin/last -a | mail -s "SSH Logins Report" -r [email protected]
サーバー情報
オペレーティングシステム:CentOS Linuxバージョン7.5
カーネル: 3.10.0-862.2.3.el7.x86_64
答え1
utmpdump
出力に年があるので、このコマンドを使用します。
for weekday in 'monday' 'tuesday' 'wednesday' 'thursday' 'friday' 'saturday' 'sunday' ;
do
/usr/bin/utmpdump /var/log/wtmp | grep "`date --date \"$weekday week ago\" '+%a %b %d\s[^ ]*\s%Y'`"
done 2> /dev/null
答え2
#!/bin/bash
LAST_OUTPUT_FILE=/tmp/last.txt
last -a > ${LAST_OUTPUT_FILE}
OUTPUT_FILE=/tmp/out.txt
> ${OUTPUT_FILE}
for i in {1..6}
do
DATE_TO_SEARCH=$(date -d"-${i}days" "+%b %d" | sed "s/.\([1-9]\)/ \1/")
grep "${DATE_TO_SEARCH}" ${LAST_OUTPUT_FILE} >> ${OUTPUT_FILE}
done
mail -s "SSH Logins Report" -r [email protected] < ${OUTPUT_FILE}
echo "Output File : ${OUTPUT_FILE}"
echo "Last File extract : ${LAST_OUTPUT_FILE}"