Linux服务器安全策略配置-SSH与动态MOTD
在用户输入口令或使用密钥成功登录后,让服务器自动为我们执行几个简单的操作,如打印提示信息,打印异常信息,执行一个脚本,或者发送邮件等。能够预先提示信息给登录者,让我们在登录机器采取任何操作之前,可以快速的了解这台机器的重要信息。看起来是不是很有意思呢? 也许我们会想,这对于服务器的安全加固并没有直接的影响,而且每次刚刚登录就执行一系列命令、脚本(如收集服务器资源使用情况的信息),似乎也有点多余。因此,如果是在生产环境的Linux服务器并且需要配置登录提示,诸如登录执行命令、脚本等这些操作,我们不必为此写一个复杂的、庞大的脚本,脚本的执行时间很关键,如果你不想在正确输入登录密码后仍需等待几秒或更长的时间,那么,尽可能地把脚本的执行耗时优化到几毫秒,甚至更低。(登录后的提示或操作尽可能简单的、有利的是最好的。如果你想这么做)
任何用户远程或本地登录后打印提示信息(如提示登录者这是一台重要的服务器,要求登录者谨慎操作) 1.开启SSH服务打印MOTD消息,配置文件/etc/ssh/sshd_config,确认是否如下配置(默认为yes) PrintMotd yes 2.修改/etc/motd文件,将提示消息粘贴到该文件中 [root@wl ~]# cat /etc/motd *************************************************** * 注意: 这是一台重要的生产服务器,请谨慎操作!! * * 如需要重启/关闭服务器,请先将NFS卸载 * ***************************************************
当然,仅仅像这样简单的提示远远不够,我们可以根据这台服务器的特征、运行的服务、文件系统信息以及重要的细节信息等打印出来,让其他的IT人员登录该服务器时,在采取任何操作之前,可以快速的掌握这台服务器的重要信息。也可以起到一个警惕的作用。你可以根据自己的情况定制。
RHEL/CentOS中打印动态MOTD提示
1.任何用户通过SSH远程登录打印提示如下
2.创建系统信息收集脚本
#!/bin/bash date=`date "+%F %T"` head="System information as of: $date" kernel=`uname -r` hostname=`echo $HOSTNAME` #Cpu load load1=`cat /proc/loadavg | awk '{print $1}'` load5=`cat /proc/loadavg | awk '{print $2}'` load15=`cat /proc/loadavg | awk '{print $3}'` #System uptime uptime=`cat /proc/uptime | cut -f1 -d.` upDays=$((uptime/60/60/24)) upHours=$((uptime/60/60%24)) upMins=$((uptime/60%60)) upSecs=$((uptime%60)) up_lastime=`date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"` #Memory Usage mem_usage=`free -m | awk '/Mem:/{total=$2} /buffers\/cache/ {used=$3} END {printf("%3.2f%%",used/total*100)}'` swap_usage=`free -m | awk '/Swap/{printf "%.2f%",$3/$2*100}'` #Processes processes=`ps aux | wc -l` #User users=`users | wc -w` USER=`whoami` #System fs usage Filesystem=$(df -h | awk '/^\/dev/{print $6}') #Interfaces INTERFACES=$(ip -4 ad | grep 'state ' | awk -F":" '!/^[0-9]*: ?lo/ {print $2}') echo echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo "$head" echo "----------------------------------------------" printf "Kernel Version:\t%s\n" $kernel printf "HostName:\t%s\n" $hostname printf "System Load:\t%s %s %s\n" $load1, $load5, $load15 printf "System Uptime:\t%s "days" %s "hours" %s "min" %s "sec"\n" $upDays $upHours $upMins $upSecs printf "Memory Usage:\t%s\t\t\tSwap Usage:\t%s\n" $mem_usage $swap_usage printf "Login Users:\t%s\t\t\tWhoami:\t\t%s\n" $users $USER printf "Processes:\t%s\n" $processes printf "\n" printf "Filesystem\tUsage\n" for f in $Filesystem do Usage=$(df -h | awk '{if($NF=="'''$f'''") print $5}') echo -e "$f\t\t$Usage" done printf "\n" printf "Interface\tMAC Address\t\tIP Address\n" for i in $INTERFACES do MAC=$(ip ad show dev $i | grep "link/ether" | awk '{print $2}') IP=$(ip ad show dev $i | awk '/inet / {print $2}') printf $i"\t\t"$MAC"\t$IP\n" done echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" echo
3.给脚本增加执行权限
chmod +x system_info.sh
4.将脚本的路径名添加到/etc/profile文件末尾