使用意図
監査的な観点から、リモートでサーバにログインする際に、社内ではログイン申請を行ってい、承認を得てからログインするようにしている。ただし、ログイン申請は形式的なもので、綿密なチェックなどを行っておらず、ほとんど意味をなさない。
そのため、事前承認制をやめ、ログイン時に許可されたユーザとログイン理由を明記されたもののみに、ログインするスクリプトを作成した。
なお、コンソール接続には対応できないので、あくまでリモートでつなぐ場合を前提となる。
環境
CentOS 6.5
ただし、他のLinux環境でも使用できることもございますので、検証のうえ、使用してください。
前提条件
.bash_profileにidcheck.shをフルパスで記載すること。
パーミッションはそれぞれ付与しておくこと。
ディレクトリ構成は以下を参照とすること。
ディレクトリ構成
/root/Tools/bin/idcheck.sh
/root/Tools/etc/VAL.txt
/root/Tools/log/idcheck.log
スクリプト
idcheck.sh (ver1.3)
#!bin/bash
#
# idcheck.sh ver.1.0.3 2015.06.15
#
# Author:
# hogehoge hogehoge
#
# Usage:
# idcheck.sh
# You should add this script to ”.bash_profile”.
#
# Description :
# If you login this server, you shoud write some reasons of login.
#
# Caution:
# XXXX XXXX XXXX XXXX.
#
#########################################################################
# 変数の読み込み
VAL=/root/Tools/etc/VAL.txt
source ${VAL}
# Ctrl + Cを実施した場合の動作(SIGINTを受信した場合)
trap ' echo You must input your ID number and reasons of login.' 2
# 社員番号を入力
echo $MESSAGE6
read answer
case "$answer" in
# 許可された社員番号
12345)
echo $MESSAGE5
read answer2
if [ -z $answer2 ]
then
echo $DATETIME $MESSAGE1 | tee -a ${LOG}
kill $BADTERM
exit 15
else
echo $DATETIME $MESSAGE2 $answer $MESSAGE3 $answer2 | te
e -a ${LOG}
fi
;;
# 上記以外は拒否
*)
echo $DATETIME $MESSAGE4 | tee -a ${LOG}
kill $BADTERM
exit 10
;;
esac
変数ファイル(VAL.txt)
# Variable
BADID=`who -m | awk '{ print $2 }'`
BADTERM=`ps -ef | grep -i $BAEDID | grep -v bash | grep -v grep | awk '{ print $2 }' | head -1`
DATETIME=`date '+%Y%m%d %H:%M:%S'`
LOG=/root/Tools/log/idcheck.log
# OUTPUT Messages
MESSAGE1='ログイン理由がありません。Exitします。'
MESSAGE2='社員番号'
MESSAGE3='理由:'
MESSAGE4='不正な社員番号です。ログインを拒否します。'
MESSAGE5='ログイン理由を書いてください。'
MESSAGE6='社員番号を入力してください。'
今後の課題
・社員番号ファイルを外だしする。
・LDAP連携する。
・Oracleみたいにログインした瞬間にサーバ管理者にメール送信をして、エビデンスを残す。
2016/01/08 追記
GitHub上にスクリプトを置きました。最新版はこちらをご確認ください。
https://github.com/domonjo01/idcheck