目录
项目1
需求描述
- 编写名为system.sh的脚本,记录局域网中各主机的MAC地址,保存到/etc/ethers文件中;若此文件已存在,应先转移进行备份;每行一条记录,第一列位IP地址,第2列为对应的MAC地址
- 检查有哪些主机开启了匿名FTP服务,扫描对象为/etc/ethers文件中的所有IP地址,扫描的端口为21
项目流程
[root@server1 ~]# ping -c 3 -i 0.2 -W 3 20.0.0.11 > a.txt
[root@server1 ~]# cat a.txt
[root@server1 ~]# arping -c 3 -I ens33 -w 3 20.0.0.11 > a.txt
[root@server1 ~]# cat a.txt
[root@server1 ~]# arping -c 1 -I ens33 -w 3 20.0.0.11 > a.txt
[root@server1 ~]# cat a.txt
[root@server1 ~]# awk '{print $4,$5}' a.txt > b.txt
[root@server1 ~]# cat b.txt
两个主机安装ftp,查看21端口状态
[root@server1 ~]# yum -y install vsftpd
[root@server1 ~]# systemctl start vsftpd
[root@server1 ~]# netstat -anpt | grep 21
[root@server2 ~]# yum -y install vsftpd
[root@server2 ~]# systemctl start vsftpd
[root@server2 ~]# netstat -napt | grep 21
[root@server2 ~]# nmap -p 21 20.0.0.10
[root@server2 ~]# nmap -p 21 20.0.0.10 &> /dev/null
[root@server2 ~]# wget ftp://20.0.0.10
选择一台新的进行shell脚本测试
进行记录在线用户并测试其是否开放21号端口
[root@client1 ~]# vi system.sh
#!/bin/bash
# 记录在线用户并测试其是否开放21号端口
net="20.0.0." 定义变量地址段
file=/etc/ethers 义变量记录文件位置
[ -f /etc/ethers ] && cp -f $file $file.bak 文件存在判断,存在备份
add=1 循环测试的起始变量
while [ $add -le 20 ] 循环条件
do 20.0.0. 1
ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null
if [ $? -eq 0 ] 追加
then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file
fi 以数字形式显示
let add++
done
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh
[root@client1 ~]# sort -u /etc/ethers
进行ftp在线测试
[root@client1 ~]# vi system.sh
#!/bin/bash
# 记录在线用户并测试其是否开放21号端口
net="20.0.0."
file=/etc/ethers
[ -f /etc/ethers ] && cp -f $file $file.bak
add=1
while [ $add -le 20 ]
do
ping -c 3 -i 0.2 -w 1 ${net}${add} &> /dev/null
if [ $? -eq 0 ]
then arp -n | grep ${net}${add} | awk '{print $1,$3}' >> $file
fi
let add++
done
sort -u $file >> /root/file1.txt
target=$(awk '{print $1}' /root/file1.txt)
for ip in $target
do
wget ftp://$ip &> /dev/null 匿名下载
if [ $? -eq 0 ] 如果下载成功
then echo "$ip 主机ftp开启"
rm -rf index.html 删除下载的文件。因为每次测试下载的都是它
fi
done
[root@client1 ~]# chmod +x system.sh
[root@client1 ~]# ./system.sh
项目2
需求描述
- 编写名为sysmon.sh的Shell监控脚本
- 监控内容包括CPU使用率,内存使用率,根分区的磁盘占有率
- 百分比只需精确到个位,如7%,12%,23%等
- 出现以下任意情况时告警:磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%,告警邮件通过mail命令发送到指定邮箱
磁盘占有率
[root@client1 ~]# df -Th | grep '/$'
[root@client1 ~]# df -Th | grep '/$' | awk '{print $6}'
[root@client1 ~]# df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}'
[root@client1 ~]# disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU使用率
[root@client1 ~]# mpstat
[root@client1 ~]# mpstat | tail -1 | awk '{print $12}'
[root@client1 ~]# mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}
[root@client1 ~]# expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}')
[root@client1 ~]# CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
内存使用率
[root@client1 ~]# free -m
[root@client1 ~]# free -m | grep "Mem:" | awk '{print $7}'
[root@client1 ~]# free -m | grep "Mem:" | awk '{print $2}'
[root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') / $(free -m | grep "Mem:" | awk '{print $2}')
[root@client1 ~]# expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}')
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
配置文件
[root@client1 ~]# rpm -qa mailx
mailx-12.5-16.el7.x86_64
[root@client1 ~]# vi /etc/mail.rc
[root@client1 ~]# echo "122333" | mail -s "test" ***********@qq.com
修改一下内容
set from=***********@qq.com 发送邮箱地址
set smtp=smtp.qq.com 邮箱使用的smtp服务器的域名
set smtp-auth-user=1609325444@qq.com smtp邮件发送时登录的账号
set smtp-auth-password=........ 授权码
set smtp-auth=login smtp的状态,登录状态
编辑配置告警脚本
[root@client1 ~]# vim sysmon.sh
#!/bin/bash
# 磁盘占有率超过90%,CPU使用率超过80%,内存使用率超过90%告警发送邮件
disk=$(df -Th | grep '/$' | awk '{print $6}' | awk -F% '{print $1}')
CPU=$(expr 100 - $(mpstat | tail -1 | awk '{print $12}' | awk -F. '{print $1}'))
mem=$(expr $(free -m | grep "Mem:" | awk '{print $7}') \* 100 / $(free -m | grep "Mem:" | awk '{print $2}'))
A=/root/alert.txt
B=*************@qq.com
if [ $disk -ge 90 ]
then echo "磁盘占有率超过90%" >> $A
fi
if [ $CPU -ge 80 ]
then echo "CPU使用率超过80%" >> $A
fi
if [ $mem -ge 90 ]
then echo "内存使用率超过90%" >> $A
fi
if [ -f $A ]
then
cat $A | mail -s "alert report" $B
rm -rf $A
fi
[root@client1 ~]# chmod +x sysmon.sh
[root@client1 ~]# ./sysmon.sh
项目3:实现dns及apache服务的一键化部署
项目需求
- 要求apche服务器绑定域名,客户机实现访问。
项目流程
配置脚本文件
- 注:由于DNS服务配置需要较多的文件设置。可以先准备相应文件,以便配置时调用
文件1:1912zf.txt (正反向配置文件)
zone "aa.com" IN {
type master;
file "aa.com.zone";
allow-transfer { 192.168.6.12; };
also-notify { 192.168.6.12; };
};
zone "6.168.192.in-addr.arpa" IN {
type master;
file "aa.com.local";
allow-transfer { 192.168.6.12; };
};
文件2:http.txt (网页配置)
<html><title>web1</title><body><h1>This is web!!!</h1></body></html>
文件3:local.txt(反向解析文件配置)
$TTL 1D
@ IN SOA aa.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS aa.com.
A 192.168.6.11
11 IN PTR www.aa.com.
12 IN PTR ftp.aa.com.
文件4:zone.txt(正向解析文件配置)
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 192.168.6.11
www IN A 192.168.6.11
ftp IN A 192.168.6.12
mail IN CNAME www
文件5:服务脚本配置
#!/bin/bash
# dns缓存服务器
A=/var/named
B=/etc/named.conf
C=/etc/named.rfc1912.zones
D=/var/named/aa.com.zone
E=/var/named/aa.com.local
apache服务配置
yum -y install httpd
[ -e /var/www/html/index.html ] || touch /var/www/html/index.html
F=/var/www/html/index.html
chmod 755 $F
cat /root/http.txt > $F
yum -y install bind* 修改主配置文件
sed -i -e 's/listen-on port 53 { 127.0.0.1; };/listen-on port 53 { 192.168.6.11; };/g' $B
sed -i -e '/allow-query/s/{.*}/{ any; }/g' $B
cat /root/1912zf.txt >> $C 区域配置
cp -p $A/named.localhost $A/aa.com.zone 区域文件
cp -p $A/named.loopback $A/aa.com.local
cat /root/local.txt > $E 调用配置文件
cat /root/zone.txt > $D
sed -i '1anameserver 192.168.6.11' /etc/resolv.conf 添加ip地址指向
sed -i '1{H;d};2G' /etc/resolv.conf
systemctl restart named.service 服务启动
systemctl restart httpd
systemctl start named
nslookup www.aa.com 解析地址