Linux系统一键安全加固shell脚本编写思路

本次分享一下个人在对Linux系统一键安全加固shell脚本编写时的一些思路:

1.编写须知

要写一个这样的功能性的脚本,首先要知道:

1.1 脚本使用说明

1.适用对象:linux系统Centos 7
2.要考虑本次的安全加固是否自带重置,有安全设置与系统的业务有冲突时,需要自行检查。
3.本脚本仅用于一次性安全加固,不用于安全修复。

1.2 主要功能说明:

需要了解本次脚本一键加固默认安全功能选项有哪些,以下为个人编写的相关安全功能:
1.开启防火墙,默认开启22端口,其他已放行端口不会关闭;
2.禁止telnet运行,禁止开机启动;
3.加强用户密码强度和限制登录错误次数、设置自动注销时间;
4.开启审核策略;
5.日志审计记录6个月;
6.禁止蓝牙启动;
7.DOS攻击防御;
8.记录历史命令。

1.3隐藏或附加功能说明:

在确认主要功能后,就需要考虑一些次要的功能,有的附加功能要以脚本使用说明出发,有的是不必要的,有的是必要的,根据个人经验而定。
比如:
1.默认检测网络是否畅通。
2.在/etc目录下产生safe.log一键加固日志。
3.一键加固后,再次运行脚本可以检查本系统是否已经运行过本脚本。
4.一键加固后,再次运行脚本可以选择增加要开启的端口号。
5.隐藏在有网络时,如果有的功能需安装一些插件,需提前写好安装该插件的脚本。
6.脚本再次运行时,检测判断此脚本是否运行过。

2.编写思路

2.1.优先写主体框架

比如:系统显示、目录功能。比如如下代码:

select_safe(){
cat <<-EOF

一键加固默认安全选项包括:
1.开启防火墙,默认开启22端口;
2.禁止telnet运行,禁止开机启动;
3.加强用户密码强度和限制登录错误次数、设置自动注销时间;
4.开启审核策略;
5.日志审计记录6个月; 
6.禁止蓝牙开机启动;
7.DOS攻击防御;
8.记录历史命令。"

========选择安全加固选项=======
    1 输入1选择默认一键加固
    2 输入2或者其他任意按钮选择退出
===============================
EOF
}
2.2.确认每个主要功能的函数。

比如:

function_main(){
read -p "请输入数字选择功能:" safe
case "$safe" in
1)
echo "开始一键加固......"
#主要功能函数启动代码
firewall_on
telnet_off
usermanage_on
auditd_on
log_on
bluetooth_off
ddos_on
historycomand_on
print_result_one
;;
*)
echo " 退出 "
exit 1
;;
esac
}

根据每一个主要功能的函数去填充相应的功能代码,本文就不列出所有主要功能代码。
比如其中的主要功能之一的防火墙开启代码:

firewall_on(){
systemctl start firewalld
echo "防火墙是 ` sed -n '3p' /fw.log|awk '{print $2}' ` "
echo "添加ssh端口22 ` firewall-cmd --zone=public --add-port=22/tcp --permanent ` "
}
2.3.隐藏和附件功能编写

隐藏功能一般是在编写主要功能代码时,才会知道需要哪些隐藏或者附加功能。根据个人经验而定。
比如有的系统是没有iptables功能插件的,就需要安全,那要安装就需要网络。
针对每一个隐藏或者附加的功能,再利用相关的函数去实现这些功能。
比如检查网络是否畅通

network(){
net_ok=" `curl -I -s www.baidu.com |sed -n "1p"|awk '{print $NF}'|sed s/[[:space:]]//g ` "
if [ $net_ok = "OK" ];then
#1表示网络畅通
network_status=1
action "网络状态:有网络."   /bin/true
else
#0表示网络不畅通
network_status=0
action "网络状态:无网络."   /bin/false
echo "无网络,可能会影响相关安全功能部署"
fi
}
2.4.验证功能配置结果。

再完成整体主要框架后,就需要去验证,这些主要的安全功能是否已经配置成功。
比如一键验证的功能,

print_result_one(){
echo "==============================="
echo "本次一键安全加固结果如下:"
firewall_result
telnet_result
usermanage_result
auditd_result
log_result
bluetooth_result
ddos_result
historycomand_result
echo "执行用户:`logname` 执行ip:`ifconfig ens33|sed -n '2p'|awk '{ print $2 }'`  一键加固执行时间:`date`   " >> /etc/safe.log
echo "1" >>/etc/safe.log
echo "==============================="
}

举例验证防火墙安全功能是否成功:
(个人在结果验证上,未作更多考虑,仅针对了一键加固,未在加固后的安全结果进行全面验证)

firewall_result(){
if [ " ` sed -n '3p' /fw.log|awk '{print $2}' ` "="active" ];then 
action "1.开启防火墙,默认开启22端口;"  /bin/true
else
action "1.开启防火墙,默认开启22端口;"  /bin/false
fi 
}
2.5.测试脚本功能是否完整。

在写完脚本后需要根据功能需求去测试、脚本是否有bug或者错误的地方。靠个人能力和熟练度去修复这些bug了。
温馨提示:因为功能需求,有的需求缺陷和bug,都是不重要的bug,可以忽略。

3.操作说明

1.将safe_linux.sh放入linux系统任意目录下 输入 sh safe_linux.sh 即可运行本此脚本。
2.根据系统提示,选择相应功能。
3.如需查看加固日志,输入 cat /etc/safe.log

4.总结

不管是写脚本还是写相关程序的代码,都是需要有很好的逻辑,根据需求逻辑,将相关代码编写处理。写的代码越多,就越熟练,完成的时间就越短,bug就相对更少。
由于个人编写的代码有近440行,就不方便完全分享出来,有需要的可以自行去下载、使用学习。
Linux系统一键安全加固脚本下载链接

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的Linux自动安全基线加固脚本,根据需求可以自行修改: ```shell #!/bin/bash # 修改密码策略,最小密码长度为8,密码复杂度要求为数字、大小写字母和特殊字符的组合 sed -i 's/PASS_MIN_LEN.*/PASS_MIN_LEN 8/' /etc/login.defs authconfig --passminlen=8 --passcomplexity=4 --update # 禁止root以外的用户使用su切换为root用户 echo "auth required pam_wheel.so use_uid" >> /etc/pam.d/su # 设置密码过期时间为90天 sed -i 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs sed -i 's/^#\(PASS_WARN_AGE\)/\1/' /etc/login.defs # 禁止空密码登录 sed -i 's/nullok_secure/nullok/' /etc/pam.d/system-auth # 禁用不必要的服务 systemctl disable avahi-daemon.service systemctl disable cups.service systemctl disable dhcpd.service systemctl disable slapd.service systemctl disable nfs.service systemctl disable rpcbind.service # 关闭不必要的端口 firewall-cmd --zone=public --remove-port=111/tcp --permanent firewall-cmd --zone=public --remove-port=2049/tcp --permanent firewall-cmd --zone=public --remove-port=5353/udp --permanent firewall-cmd --zone=public --remove-port=631/tcp --permanent # 安装基础安全工具 yum install -y wget curl net-tools nmap telnet tcpdump iptables echo "安全加固完成!" ``` 这个脚本包含以下安全加固措施: 1. 修改密码策略,最小密码长度为8,密码复杂度要求为数字、大小写字母和特殊字符的组合; 2. 禁止root以外的用户使用su切换为root用户; 3. 设置密码过期时间为90天; 4. 禁止空密码登录; 5. 禁用不必要的服务; 6. 关闭不必要的端口; 7. 安装基础安全工具。 注意:在运行脚本之前,请确保已经备份了系统的重要文件,并且仔细检查脚本中的每一条命令是否适用于当前的环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值