用户在登录时, 验证完passwd后, 根据shell的不同, 系统首先执行/etc下的某个文件. sh,ksh是profile, csh是csh.cshrc, bash是bashrc. 在这时对用户登陆地点加以验证, 可防止某些可能的intruder. 下面是我用在西门子RM600并行机上的/etc/profile的一段程序。
....
....
# check for authenication
if [ -r /etc/checkfrom.awk ]; then
VALID=`finger | awk -f /etc/checkfrom.awk`
if [ "$VALID" != "WELCOME" ]; then
echo "Intruder, GET AWAY FROM HERE!!!"
exit
fi
fi
.....
......
/etc/checkfrom.awk是一个awk程序, 内容如下:
BEGIN {site["aft01"]=1;
site["aft02"]=1;
site["aft03"]=1;
site["aft04"]=1;
site["aft05"]=1;
site["rs6000"]=1;
}
$1==ENVIRON["LOGNAME"] {
if ($NF !~ /[0-9]+:[0-9]+/){
i = NF - 3
if("/dev/"$i == ENVIRON["TTY"]){
if(ENVIRON["TTY"] != "/dev/console"){
if($NF in site)print "WELCOME"
else print "GETAWAY"
}
else print "WELCOME"
exit 0
}
}
else{
i = NF - 2
if("/dev/"$i == ENVIRON["TTY"]){
print "WELCOME"
exit 0
}
}
}
注: 请注意你的机器上的finger显示的格式, 我机器上的格式如下:
$ finger
lsad% finger
Login Name TTY Idle When Where
tiger Wang Shuhu console Mon 00:41
lsad%
上面的awk程序是针对这种格式编写的, 仅供参考。