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

实现如下图:

linux练习题十

linux练习题十

 

 

 

二、统计/etc/fstab文件中每个文件系统类型出现的次数

方法一:

awk -F' ' '!/^#.*/&&!/^$.*/{print $3}' /etc/fstab |sort -n | uniq -c

linux练习题十

方法二:

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

linux练习题十

linux练习题十

 

 

 

三、提取出字符串[email protected]%9&Bdh7dq+YVixp3vpw中的所有数字

echo '[email protected]%9&Bdh7dq+YVixp3vpw' |awk '{gsub(/[0-9]/,"");print $0}'

linux练习题十

 

 

 

四、解决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

实现如下图:linux练习题十

linux练习题十