前言
- mac記錄與端口掃描腳本
- 開發系統監控腳本
一 : 腳本編程步驟分享
1.1 腳本編程步驟
1.2 需求分析
- 根據系統管理的需求,分析腳本要實現的功能、功能實現的層次、實現的命令與語句等
1.3 命令測試
- 將要用到的命令逐個進行測試,以決定使用的選項、要設置的變量等
1.4 腳本編程
- 將測試好的命令寫入到腳本文件中,並通過各種語句將命令執行的結果保存、判斷或者發出報警等
1.5 調試優化
- 對腳本進行測試,並根據結果進行優化
- 建議一遍編程一邊調試,以減少錯誤的發生
二 : mac記錄與端口掃描腳本
2.1 企業環境說明
- 隨着業務的不斷髮展,某公司所使用的Linux服務器也越來越多。在系統管理和維護過程中,經常需要編寫一些使用的小腳本,以輔助運維工作,提高工作效率
2.2 需求描述
- 編寫名爲system.sh的小腳本,記錄局域網中各主機的mac地址,保存到/etc/ethers文件中;若此文件已存在,應先轉移進行備份;每行一條記錄,第一列爲ip地址,第二列爲對應的mac地址
- 檢查有哪些主機開啓了匿名ftp服務,掃描對象爲/etc/ethers文件的所有ip地址,掃描的端口爲21
2.3 命令測試
- 分析:記錄局域網中各主機的mac地址,保存到/etc/ethers文件中;若此文件已存在,應先轉移進行備份;檢查有哪些主機開啓了匿名ftp服務,掃描對象爲/etc/ethers文件的所有ip地址,掃描的端口爲21
- arping -c 2 -w 1 -I 網卡名 ip地址 //發送mac地址解析請求,或者使用ping
- arp -n 記錄mac
- awk 打印ip與mac地址
- 使用wget下載的方法測試ftp服務
[root@localhost ~]# arping -c 2 -w 1 -I ens33 192.168.247.134
ARPING 192.168.247.134 from 192.168.247.136 ens33
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89] 1.452ms
Unicast reply from 192.168.247.134 [00:0C:29:52:4D:89] 1.182ms
Sent 2 probes (1 broadcast(s))
Received 2 response(s)
配置ftp匿名訪問模式, 首先輸入命令“vi /etc/vsftpd/vsftpd.conf” 打開ftp服務具體配置文件
進行修改(有點改,沒有的添)(去“#”號)
參數 | 作用 |
---|---|
anonymous_enable=YES | 允許匿名訪問模式。 |
anon_umask=022 | 匿名用戶上傳文件的umask值。 |
anon_upload_enable=YES | 允許匿名用戶上傳文件 |
anon_mkdir_write_enable=YES | 允許匿名用戶創建目錄 |
anon_other_write_enable=YES | 允許匿名用戶修改目錄名或刪除目錄 |
2.4 腳本編程與調試
- 通過arping命令發送ARP請求,使用if語句根據反饋結果記錄mac地址
- 將網段地址賦值給變量,作爲檢測地址的前綴
- 使用循環語句,重複檢測目標並記錄mac地址,主機地址爲1-254
- 通過awk命令過濾出/etc/ethers文件中的所有ip地址,賦值給變量,使用循環語句,讀取變量中的ip地址,重複探測ftp開啓情況
#!/bin/bash
#測試文件是否存在,若存在,就將當前文件備份
[ -f /etc/ethers ]
if [ $? -eq 0 ]
then
cp -p /etc/ethers /etc/ethers.bak
fi
#去ping254個地址,將成功的ip地址和mac追加到/ethers
for ((i=134;i<=139;i++))
do
ping -c 3 -w 3 192.168.247.$i &> /dev/null
if [ $? -eq 0 ]
then
echo "192.168.247.$i 存活"
fi
done
arp -n | grep "ether" | awk '{print $1,$3}' > /etc/ethers
#檢查是否安裝nmap掃描軟件
rpm -q nmap
if [ $? -eq 1 ]
then
yum clean all
yum list
yum install nmap -y
[ $? -eq 0 ] && echo "未安裝namp掃描工具,當前已爲您安裝"
fi
#檢查有哪些ip開啓了匿名服務ftp服務,即22端口
for a in $(cat /etc/ethers | awk '{print $1}')
do
m=$(nmap -sT $a -p 21 | awk '/ftp/{print $2}')
if [ $m = open ]
then
echo "$a 開啓ftp服務"
fi
done
三 : 開發系統監控腳本
3.1 企業環境說明
- 某公司隨着業務的不斷髮展,所使用的linux服務器也越來越多。管理員希望編寫一個簡單的性能監控腳本,放到各服務器中,當監控指標出現異常時發送告警郵件
3.2 需求描述
- 編寫名爲sysmon.sh的shell監控腳本
- 監控內容包括CPU使用率、內存使用率、根分區的磁盤佔用率
- 百分比只精確到個位,如7%、12%、23%等
- 出現以下任意情況時告警:磁盤佔用率超過90%、cpu使用率超過80%、內存使用率超過90%,告警郵件通過mail命令發送到指定郵箱
- 結合crond服務,每半個小時執行一次監控腳本
3.3 思路與命令測試
- 分析:監控內容包括cpu使用率、內存使用率、根分區的磁盤佔用率
- df命令
- awk命令
- mpstat 命令 (需安裝sysstat軟件包)
- free命令
- crontab命令
3.4 腳本編程與調試
- 使用df命令提取出根分區的磁盤佔用率,賦值給變量DUG
- 使用mpstat命令提取cpu使用率,賦值給變量CUG
- 使用free命令提取出內存使用率,賦值給變量MUG
- 使用if語句判斷上述監控項目是否超標,將需要告警的信息保存到/tmp/alert.txt文件;若存在則作爲告警郵件發送
- 調試優化並設置crontab計劃
#!/bin/bash
#/根分區的當前佔用率
DUG=$(df -Th | grep '/$' | awk '{print $6}' | sed 's/%//')
#cpu 的當前空閒佔用率
CUG=$(mpstat | grep 'all' | awk '{print $13}' | awk -F. '{print $1}')
#內存當前佔用率
used=$(free | grep 'Mem' | awk '{print $3}')
total=$(free | grep 'Mem' | awk '{print $2}')
(( MUG = used*100/total))
genfenquzhanyong=當前根磁盤佔用未到警戒線20%
cpukongxian=當前cpu空閒資源未低於警戒線1%
neicunzhanyong=當前內存佔用未超過警戒線10%
#當根分區佔用率超過10時
if [ $DUG -gt 10 ]
then
echo `date` >> /tmp/alert.txt
echo "當前磁盤佔用超過10%" >> /tmp/alert.txt
genfenquzhanyong='當前根磁盤佔用超過警戒線20%,爲$DUG%'
fi
#當cpu的空閒內存小於20時
if [ $CUG -lt 1 ]
then
echo `date` >> /tmp/alert.txt
echo "當前cpu空閒資源小於1%" >> /tmp/alert.txt
cpukongxian='當前cpu空閒資源低於警戒線1%,爲$CUG'
fi
if [ $MUG -gt 10 ]
then
echo `date` >> /tmp/alert.txt
echo "當前內存佔用超過10%" >> /tmp/alert.txt
neicunzhanyong='當前內存佔用超過警戒線10%,爲$MUG'
fi
rpm -q expect
if [ $? -ne 0 ]
then
yum install expect -y
fi
echo "$genfenquzhanyong,$cpukongxian,$neicunzhanyong" | mail "[email protected]"
[root@localhost ~]# crontab -e -u root
[root@localhost ~]# crontab -l
30 * * * * /usr/bin/sh /root/sysmon.sh