Linux登錄提示(靜態(tài)/動態(tài)MOTD)
站在用戶的角度思考問題,與客戶深入溝通,找到隨州網(wǎng)站設(shè)計與隨州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋隨州地區(qū)。
在用戶輸入口令或使用密鑰成功登錄后,讓服務(wù)器自動為我們執(zhí)行幾個簡單的操作,如打印提示信息,打印異常信息,執(zhí)行一個腳本,或者發(fā)送郵件等。能夠預(yù)先提示信息給登錄者,讓我們在登錄機器采取任何操作之前,可以快速的了解這臺機器的重要信息??雌饋硎遣皇呛苡幸馑寄兀?也許我們會想,這對于服務(wù)器的安全加固并沒有直接的影響,而且每次剛剛登錄就執(zhí)行一系列命令、腳本(如收集服務(wù)器資源使用情況的信息),似乎也有點多余。因此,如果是在生產(chǎn)環(huán)境的Linux服務(wù)器并且需要配置登錄提示,諸如登錄執(zhí)行命令、腳本等這些操作,我們不必為此寫一個復(fù)雜的、龐大的腳本,腳本的執(zhí)行時間很關(guān)鍵,如果你不想在正確輸入登錄密碼后仍需等待幾秒或更長的時間,那么,盡可能地把腳本的執(zhí)行耗時優(yōu)化到幾毫秒,甚至更低。(登錄后的提示或操作盡可能簡單的、有利的是最好的。如果你想這么做)
在大多數(shù)Linux分發(fā)版中,可以直接修改/etc/motd文件來定制任何想要的提示信息,修改方法是將需要打印的提示消息文件粘貼到該文件中即可(一些可執(zhí)行命令或腳本在文件中僅僅被當(dāng)作是普通字符/文本)。/etc/motd內(nèi)的文本消息是固定不變,除非我們手動修改它。因此,在/etc/motd中定制的消息是靜態(tài)MOTD。
如果你使用過Debian/Ubuntu分發(fā)版,你可能已經(jīng)發(fā)現(xiàn),Ubuntu默認(rèn)就已經(jīng)有一個動態(tài)的MOTD信息提示(通過SSH或本地登錄時顯示系統(tǒng)當(dāng)前的一些信息)。在RHEL/CentOS中不可能實現(xiàn)像在Debian/Ubuntu中這樣的功能,因為RHEL/CentOS并沒有提供與之相關(guān)的任何腳本。我們可以通過環(huán)境變量文件,如/etc/profile、/etc/bashrc等,將需要執(zhí)行的命令或腳本添加到這些文件末尾,這樣當(dāng)每次用戶登陸時,系統(tǒng)就會讀取這些文件,執(zhí)行文件里定義好的腳本。除此之外,也可以結(jié)合使用crontab計劃任務(wù),將預(yù)先準(zhǔn)備好的腳本,如系統(tǒng)監(jiān)控,異常信息收集通過crontab在后臺定期執(zhí)行,并把收集到的信息重定向?qū)懙?etc/motd文件中。在用戶登錄系統(tǒng)時,就可以顯示這些系統(tǒng)監(jiān)控、異常處理信息了。
在Ubuntu中,提供了一組腳本在目錄/etc/update-motd.d/中,在用戶登錄時,按照腳本名字前綴的數(shù)字(00-99)順序執(zhí)行,并將這些腳本的輸出保存到文件/run/motd.dynamic中,最終用戶成功登錄后,在登錄的屏幕界面中打印出來。輸出結(jié)果如下圖所示
/etc/update-motd.d/腳本列表:
00-header
10-help-text
50-landscape-sysinfo
90-updates-available
91-release-upgrade
98-fsck-at-reboot
98-reboot-required
以上是在Ubuntu 14.04 LTS中默認(rèn)的提供動態(tài)MOTD消息的腳本,這些腳本可以修改,也可以增加自己的腳本。比如替換為自己的定制好的腳本。
下面我給出在RHEL/CentOS中定制MOTD的幾個簡單操作示例:
打印提示信息,執(zhí)行一個腳本,或者發(fā)送郵件
l 任何用戶遠(yuǎn)程或本地登錄后打印提示信息(如提示登錄者這是一臺重要的服務(wù)器,要求登錄者謹(jǐn)慎操作)
>>開啟SSH服務(wù)打印MOTD消息,配置文件/etc/ssh/sshd_config,確認(rèn)是否如下配置(默認(rèn)為yes)
PrintMotd yes
>>修改/etc/motd文件,將提示消息粘貼到該文件中
[root@localhost ~]# cat /etc/motd *************************************************** * 注意: 這是一臺重要的生產(chǎn)服務(wù)器,請謹(jǐn)慎操作??! * * 如需要重啟/關(guān)閉服務(wù)器,請先將NFS卸載 * ***************************************************
>>保存之后,使用SSH登錄該服務(wù)器,輸入正確的賬號密碼之后,提示如下
當(dāng)然,僅僅像這樣簡單的提示遠(yuǎn)遠(yuǎn)不夠,我們可以根據(jù)這臺服務(wù)器的特征、運行的服務(wù)、文件系統(tǒng)信息以及重要的細(xì)節(jié)信息等打印出來,讓其他的IT人員登錄該服務(wù)器時,在采取任何操作之前,可以快速的掌握這臺服務(wù)器的重要信息。也可以起到一個警惕的作用。你可以根據(jù)自己的情況定制。
l RHEL/CentOS中打印動態(tài)MOTD提示
>> 任何用戶通過SSH遠(yuǎn)程登錄打印提示如下
>> 創(chuàng)建系統(tǒng)信息收集腳本
[root@HMing ~]# vim /usr/src/scripts/system_info.sh #!/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
>> 給腳本增加執(zhí)行權(quán)限
[root@HMing ~]# chmod +x /usr/src/scripts/system_info.sh
>> 將腳本的路徑名添加到/etc/profile文件末尾
[root@HMing ~]# tail -1 /etc/profile /usr/src/scripts/system_info.sh
l 任何用戶遠(yuǎn)程或本地登錄后發(fā)送郵件信息
>>演示如下
>>發(fā)送郵件如下
>> 創(chuàng)建一個發(fā)送郵件的腳本/usr/src/scripts/my-server-login-mail,如下
#!/bin/bash smtp=smtp.163.com smtp_auth_user=xxxxxx smtp_auth_password=xxxxxxxxxx from=xxxxxxxx@163.com function HEAD { Kernel_version=`uname -r` Login_user=`last -a | grep "logged in" | wc -l` Up_lastime=`date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S"` Up_runtime=`cat /proc/uptime| awk -F. '{run_days=$1 / 86400;run_hour=($1 % 86400)/3600;run_minute=($1 % 3600)/60;run_second =$1 % 60;printf("%d天%d時%d分%d秒",run_days,run_hour,run_minute,run_second)}'` Last_user=`last | awk '(/pts/) && (/-/){print "User: "$1" - ""OlineTime: "$NF" - ""IP: "$3" - ""LoginTime: "$4" "$5" "$6" " $7}'| head -1 | sed -e 's/(//g' -e 's/)//g'` echo -e "" echo -e "\ 郵件提示: 未知身份來源使用${USER}用戶登錄系統(tǒng) ------------------------------------------------------------- System information 主機名: $HOSTNAME 內(nèi)核版本: $Kernel_version 系統(tǒng)已運行時間: $Up_runtime 上一次重啟時間: $Up_lastime 當(dāng)前登入用戶數(shù): $Login_user 上一次登入用戶: $Last_user ------------------------------------------------------------- " };HEAD >/tmp/.loginmail title="主機:`echo $HOSTNAME`登錄提示 (`date "+%F %T"`)" body=`cat /tmp/.loginmail` to=741616710@qq.com sendEmail -s "$smtp" -xu "${smtp_auth_user}" -xp "${smtp_auth_password}" -f "$from" -t "$to" -u "$title" -m "$body" &>/dev/null && rm -rf /tmp/.loginmail
在Linux發(fā)送郵件的程序有很多,在這里我用的是sendEmail,你也可以使用其他的發(fā)送郵件程序。
>> 將腳本絕對路徑名添加到/etc/profile文件末尾
[root@HMing ~]# tail -1 /etc/profile /usr/src/scripts/my-server-login-mail
結(jié)語
動態(tài)的MOTD在Ubuntu中是開箱即用的,因為它已經(jīng)被集成為系統(tǒng)的一個模塊,通過pam_motd.so調(diào)用。不過,我們可以隨時修改系統(tǒng)上預(yù)先配置好的腳本,將腳本放到/etc/update-motd.d/目錄中,比如收集系統(tǒng)異常信息腳本,在用戶登錄時,將在第一時間反饋給用戶,或者是系統(tǒng)登錄記錄的實時監(jiān)控,通過發(fā)生郵件給用戶,用戶可以快速掌握服務(wù)器是否存在被***的情況。對于RHEL/CentOS發(fā)行版,我在文中也給出了幾個簡單的演示示例,實現(xiàn)動態(tài)MOTD。有興趣同學(xué)的可以作為參考。
當(dāng)前名稱:Linux服務(wù)器安全策略配置-SSH與動態(tài)MOTD(一)
當(dāng)前網(wǎng)址:http://chinadenli.net/article8/gpdhop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站設(shè)計公司、服務(wù)器托管、網(wǎng)站改版、做網(wǎng)站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)