linux练习题十
一、编写脚本selinux.sh,实现开启或禁用SELinux功能
脚本:
[ $# = 0 ] && (echo "Usage: $0 on|off";exit 10)
CURRENTSTATE=`getenforce`
selinuxset () {
sed -i 's/^SELINUX.*/SELINUX='''$STATE'''/' /etc/selinux/config && echo -e "/etc/selinux/config is \033[1;34m$STATE\033[0m,selinux service is \033[1;36m`getenforce` \033[0m"
} #修改selinux配置文件,并打印selinux配置文件配置情况和selinux服务状态
takeffect () {
read -p "Need to reboot to take effect.Are you sure to reboot?(Answer yes or no):" input
case $input in
[Yy]|[Yy][Ee][Ss])
reboot
;;
[Nn]|[Nn][Oo])
exit 20
;;
*)
echo -e "\033[1;31mPlease input yes or no!\033[0m" && takeffect
esac
} #重启判断使selinux配置生效
case $1 in
enforcing|[Ee]|[Ee][Nn]|[Oo][Nn])
STATE=enforcing
setenforce 1 &>/dev/null
selinuxset
if [[ "$CURRENTSTATE" =~ Disabled ]];then
takeffect
fi
;;
Permissive|[Pp]|[Pp][Ee]|[Pp][Ee][Rr])
STATE=Permissive
setenforce 0 &>/dev/null
selinuxset
if [[ "$CURRENTSTATE" =~ Disabled ]];then
takeffect
fi
;;
disabled|[Dd]|[Dd][Ii]|[Oo][Ff][Ff])
STATE=disabled
selinuxset
if [[ ! "$CURRENTSTATE" =~ Disabled ]];then
takeffect
fi
;;
*)
esac
实现如下图:
二、统计/etc/fstab文件中每个文件系统类型出现的次数
方法一:
awk -F' ' '!/^#.*/&&!/^$.*/{print $3}' /etc/fstab |sort -n | uniq -c
方法二:
awk -F' ' '!/^#.*/&&!/^$.*/{time[$3]++}END{for(i in time){print i,time[i]}}' /etc/fstab
或者
awk '/^[^#]/{time[$3]++}END{for(i in time){print i,time[i]}}' /etc/fstab
三、提取出字符串[email protected]%9&Bdh7dq+YVixp3vpw中的所有数字
echo '[email protected]%9&Bdh7dq+YVixp3vpw' |awk '{gsub(/[0-9]/,"");print $0}'
四、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
脚本:
TIME=1 #连接数
LOGDIR=/data #ss日志目录
awk -F'[ ]+|:' '/[^ESTAB]/&&$6~/^[^127.]/{ip[$6]++}END{for (i in ip){if(ip[i]>'''$TIME''')print i}}' $LOGDIR/ss.log | tee /tmp/temp.log &>/dev/null #从ss日志取出连接数大于TIME的IP
while read IP;do
iptables -L -n | grep "^REJECT" | grep "$IP"
if [ $? -eq 1 ];then #判断IP是否已设置拒绝策略
iptables -A INPUT -s $IP -j REJECT &>/dev/null #添加策略
echo "$IP has been reject acccess." >>/data/iptables.log
fi
done </tmp/temp.log
实现如下图: