脚本内容如下:

    1. #!/bin/bash
    2. ##Filename: CentOS_Check_Script.sh
    3. ##Date: 2021-11-25
    4. ##Author: Guibing Chen
    5. ##Description: Security detection script
    6. echo"##########################################################################"
    7. echo"# #"
    8. echo"# Epoint health check script #"
    9. echo"# #"
    10. echo"#警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告 #"
    11. echo"#进行相应的安全整改 #"
    12. echo"##########################################################################"
    13. echo" "
    14. #read -p "=====================Are You Ready,Please press enter=================="
    15. echo" "
    16. echo"##########################################################################"
    17. echo"# #"
    18. echo"# 主机安全检测 #"
    19. echo"# #"
    20. echo"##########################################################################"
    21. echo" "
    22. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>系统基本信息<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    23. hostname=$(uname -n)
    24. system=$(cat /etc/os-release | grep "^NAME" | awk -F\" '{print $2}')
    25. version=$(cat /etc/redhat-release | awk '{print $4$5}')
    26. kernel=$(uname -r)
    27. platform=$(uname -p)
    28. address=$(ip addr | grep inet | grep -v "inet6" | grep -v "127.0.0.1" | awk '{ print $2; }' | tr '\n' '\t' )
    29. cpumodel=$(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq)
    30. cpu=$(cat /proc/cpuinfo | grep 'processor' | sort | uniq | wc -l)
    31. machinemodel=$(dmidecode | grep "Product Name" | sed 's/^[ \t]*//g' | tr '\n' '\t' )
    32. date=$(date)
    33. echo"主机名: $hostname"
    34. echo"系统名称: $system"
    35. echo"系统版本: $version"
    36. echo"内核版本: $kernel"
    37. echo"系统类型: $platform"
    38. echo"本机IP地址: $address"
    39. echo"CPU型号: $cpumodel"
    40. echo"CPU核数: $cpu"
    41. echo"机器型号: $machinemodel"
    42. echo"系统时间: $date"
    43. echo" "
    44. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>资源使用情况<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    45. summemory=$(free -h |grep "Mem:" | awk '{print $2}')
    46. freememory=$(free -h |grep "Mem:" | awk '{print $4}')
    47. usagememory=$(free -h |grep "Mem:" | awk '{print $3}')
    48. uptime=$(uptime | awk '{print $2" "$3" "$4" "$5}' | sed 's/,$//g')
    49. loadavg=$(uptime | awk '{print $9" "$10" "$11" "$12" "$13}')
    50. echo"总内存大小: $summemory"
    51. echo"已使用内存大小: $usagememory"
    52. echo"可使用内存大小: $freememory"
    53. echo"系统运行时间: $uptime"
    54. echo"系统负载: $loadavg"
    55. echo"=============================dividing line================================"
    56. echo"内存状态:"
    57. vmstat 2 5
    58. echo"=============================dividing line================================"
    59. echo"僵尸进程:"
    60. ps -ef | grep zombie | grep -v grep
    61. if [ $? == 1 ];then
    62. echo">>>无僵尸进程"
    63. else
    64. echo">>>有僵尸进程------[需调整]"
    65. fi
    66. echo"=============================dividing line================================"
    67. echo"耗CPU最多的进程:"
    68. ps auxf |sort -nr -k 3 |head -5
    69. echo"=============================dividing line================================"
    70. echo"耗内存最多的进程:"
    71. ps auxf |sort -nr -k 4 |head -5
    72. echo"=============================dividing line================================"
    73. echo "环境变量:"
    74. env
    75. echo"=============================dividing line================================"
    76. echo "路由表:"
    77. route -n
    78. echo"=============================dividing line================================"
    79. echo "监听端口:"
    80. netstat -tunlp
    81. echo"=============================dividing line================================"
    82. echo "当前建立的连接:"
    83. netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    84. echo"=============================dividing line================================"
    85. echo"开机启动的服务:"
    86. systemctl list-unit-files | grep enabled
    87. echo" "
    88. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>系统用户情况<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    89. echo "活动用户:"
    90. w | tail -n +2
    91. echo"=============================dividing line================================"
    92. echo "系统所有用户:"
    93. cut -d: -f1,2,3,4 /etc/passwd
    94. echo"=============================dividing line================================"
    95. echo "系统所有组:"
    96. cut -d: -f1,2,3 /etc/group
    97. echo"=============================dividing line================================"
    98. echo "当前用户的计划任务:"
    99. crontab -l
    100. echo" "
    101. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>身份鉴别安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    102. grep -i "^password.*requisite.*pam_cracklib.so" /etc/pam.d/system-auth > /dev/null
    103. if [ $? == 0 ];then
    104. echo">>>密码复杂度:已设置"
    105. else
    106. grep -i "pam_pwquality\.so" /etc/pam.d/system-auth > /dev/null
    107. if [ $? == 0 ];then
    108. echo">>>密码复杂度:已设置"
    109. else
    110. echo">>>密码复杂度:未设置,请加固密码--------[需调整]"
    111. fi
    112. fi
    113. echo"=============================dividing line================================"
    114. awk -F":"'{if($2!~/^!|^*/){print ">>>("$1")" " 是一个未被锁定的账户,请管理员检查是否是可疑账户--------[需调整]"}}' /etc/shadow
    115. echo"=============================dividing line================================"
    116. more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print ">>>密码过期天数是"$2"天,请管理员改成90天------[需调整]"}}'
    117. echo"=============================dividing line================================"
    118. grep -i "^auth.*required.*pam_tally2.so.*$" /etc/pam.d/sshd > /dev/null
    119. if [ $? == 0 ];then
    120. echo">>>登入失败处理:已开启"
    121. else
    122. echo">>>登入失败处理:未开启,请加固登入失败锁定功能----------[需调整]"
    123. fi
    124. echo" "
    125. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>访问控制安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    126. echo"系统中存在以下非系统默认用户:"
    127. more /etc/passwd |awk -F ":"'{if($3>500){print ">>>/etc/passwd里面的"$1 "的UID为"$3",该账户非系统默认账户,请管理员确认是否为可疑账户--------[需调整]"}}'
    128. echo"=============================dividing line================================"
    129. echo"系统特权用户:"
    130. awk -F: '$3==0 {print $1}' /etc/passwd
    131. echo"=============================dividing line================================"
    132. echo"系统中空口令账户:"
    133. awk -F: '($2=="!!") {print $1"该账户为空口令账户,请管理员确认是否为新增账户,如果为新建账户,请配置密码-------[需调整]"}' /etc/shadow
    134. echo" "
    135. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>安全审计<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    136. echo"正常情况下登录到本机30天内的所有用户的历史记录:"
    137. last | head -n 30
    138. echo"=============================dividing line================================"
    139. echo"查看syslog日志审计服务是否开启:"
    140. if service rsyslog status | egrep " active \(running";then
    141. echo">>>经分析,syslog服务已开启"
    142. else
    143. echo">>>经分析,syslog服务未开启,建议通过service rsyslog start开启日志审计功能---------[需调整]"
    144. fi
    145. echo"=============================dividing line================================"
    146. echo"查看syslog日志是否开启外发:"
    147. if more /etc/rsyslog.conf | egrep "@...\.|@..\.|@.\.|\*.\* @...\.|\*\.\* @..\.|\*\.\* @.\.";then
    148. echo">>>经分析,客户端syslog日志已开启外发--------[需调整]"
    149. else
    150. echo">>>经分析,客户端syslog日志未开启外发---------[无需调整]"
    151. fi
    152. echo"=============================dividing line================================"
    153. echo"审计的要素和审计日志:"
    154. more /etc/rsyslog.conf | grep -v "^[$|#]" | grep -v "^$"
    155. echo"=============================dividing line================================"
    156. echo"系统中关键文件修改时间:"
    157. ls -ltr /bin/ls /bin/login /etc/passwd /bin/ps /etc/shadow|awk '{print ">>>文件名:"$9" ""最后修改时间:"$6" "$7" "$8}'
    158. echo"
    159. ###############################################################################################
    160. # ls文件:是存储ls命令的功能函数,被删除以后,就无法执行ls命令 #
    161. # login文件:login是控制用户登录的文件,一旦被篡改或删除,系统将无法切换用户或登陆用户 #
    162. # /etc/passwd是一个文件,主要是保存用户信息 #
    163. # /bin/ps 进程查看命令功能支持文件,文件损坏或被更改后,无法正常使用ps命令 #
    164. # /etc/shadow是/etc/passwd的影子文件,密码存放在该文件当中,并且只有root用户可读 #
    165. ###############################################################################################"
    166. echo"=============================dividing line================================"
    167. echo"检查重要日志文件是否存在:"
    168. log_secure=/var/log/secure
    169. log_messages=/var/log/messages
    170. log_cron=/var/log/cron
    171. log_boot=/var/log/boot.log
    172. log_dmesg=/var/log/dmesg
    173. if [ -e "$log_secure" ]; then
    174. echo ">>>/var/log/secure日志文件存在"
    175. else
    176. echo ">>>/var/log/secure日志文件不存在------[需调整]"
    177. fi
    178. if [ -e "$log_messages" ]; then
    179. echo ">>>/var/log/messages日志文件存在"
    180. else
    181. echo ">>>/var/log/messages日志文件不存在------[需调整]"
    182. fi
    183. if [ -e "$log_cron" ]; then
    184. echo ">>>/var/log/cron日志文件存在"
    185. else
    186. echo ">>>/var/log/cron日志文件不存在--------[需调整]"
    187. fi
    188. if [ -e "$log_boot" ]; then
    189. echo ">>>/var/log/boot.log日志文件存在"
    190. else
    191. echo ">>>/var/log/boot.log日志文件不存在--------[需调整]"
    192. fi
    193. if [ -e "$log_dmesg" ]; then
    194. echo ">>>/var/log/dmesg日志文件存在"
    195. else
    196. echo ">>>/var/log/dmesg日志文件不存在--------[需调整]"
    197. fi
    198. echo" "
    199. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>剩余信息保护<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    200. echo"分区情况:"
    201. echo"如果磁盘空间利用率过高,请及时调整---------[需调整]"
    202. df -h
    203. echo"=============================dividing line================================"
    204. echo"可用块设备信息:"
    205. lsblk
    206. echo"=============================dividing line================================"
    207. echo"文件系统信息:"
    208. more /etc/fstab | grep -v "^#" | grep -v "^$"
    209. echo" "
    210. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>入侵防范安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    211. echo"系统入侵行为:"
    212. more /var/log/secure |grep refused
    213. if [ $? == 0 ];then
    214. echo"有入侵行为,请分析处理--------[需调整]"
    215. else
    216. echo">>>无入侵行为"
    217. fi
    218. echo"=============================dividing line================================"
    219. echo"用户错误登入列表:"
    220. lastb | head > /dev/null
    221. if [ $? == 1 ];then
    222. echo">>>无用户错误登入列表"
    223. else
    224. echo">>>用户错误登入--------[需调整]"
    225. lastb | head
    226. fi
    227. echo"=============================dividing line================================"
    228. echo"ssh暴力登入信息:"
    229. more /var/log/secure | grep "Failed" > /dev/null
    230. if [ $? == 1 ];then
    231. echo">>>无ssh暴力登入信息"
    232. else
    233. more /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print ">>>登入失败的IP和尝试次数: "$2"="$1"次---------[需调整]";}'
    234. fi
    235. echo" "
    236. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>恶意代码防范<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    237. echo"检查是否安装病毒软件:"
    238. crontab -l | grep clamscan.sh > /dev/null
    239. if [ $? == 0 ];then
    240. echo">>>已安装ClamAV杀毒软件"
    241. crontab -l | grep freshclam.sh > /dev/null
    242. if [ $? == 0 ];then
    243. echo">>>已部署定时更新病毒库"
    244. fi
    245. else
    246. echo">>>未安装ClamAV杀毒软件,请部署杀毒软件加固主机防护--------[无需调整]"
    247. fi
    248. echo" "
    249. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>资源控制安全<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"
    250. echo"查看是否开启了xinetd服务:"
    251. if ps -elf |grep xinet |grep -v "grep xinet";then
    252. echo">>>xinetd服务正在运行,请检查是否可以把xinetd服务关闭--------[无需调整]"
    253. else
    254. echo">>>xinetd服务未开启-------[无需调整]"
    255. fi
    256. echo"=============================dividing line================================"
    257. echo "查看是否开启了ssh服务:"
    258. if service sshd status | grep -E "listening on|active \(running\)"; then
    259. echo">>>SSH服务已开启"
    260. else
    261. echo">>>SSH服务未开启--------[需调整]"
    262. fi
    263. echo"=============================dividing line================================"
    264. echo"查看是否开启了Telnet-Server服务:"
    265. if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
    266. echo">>>Telnet-Server服务已开启"
    267. else
    268. echo">>>Telnet-Server服务未开启--------[无需调整]"
    269. fi
    270. echo"=============================dividing line================================"
    271. ps axu | grep iptables | grep -v grep || ps axu | grep firewalld | grep -v grep
    272. if [ $? == 0 ];then
    273. echo">>>防火墙已启用"
    274. iptables -nvL --line-numbers
    275. else
    276. echo">>>防火墙未启用--------[需调整]"
    277. fi
    278. echo"=============================dividing line================================"
    279. echo "查看系统SSH远程访问设置策略(host.deny拒绝列表):"
    280. if more /etc/hosts.deny | grep -E "sshd"; then
    281. echo">>>远程访问策略已设置--------[需调整]"
    282. else
    283. echo">>>远程访问策略未设置--------[无需调整]"
    284. fi
    285. echo"=============================dividing line================================"
    286. echo"查看系统SSH远程访问设置策略(hosts.allow允许列表):"
    287. if more /etc/hosts.allow | grep -E "sshd"; then
    288. echo">>>远程访问策略已设置--------[需调整]"
    289. else
    290. echo">>>远程访问策略未设置--------[无需调整]"
    291. fi
    292. echo"=============================dividing line================================"
    293. echo"当hosts.allow和host.deny相冲突时,以hosts.allow设置为准"
    294. echo"=============================dividing line================================"
    295. grep -i "TMOUT" /etc/profile /etc/bashrc
    296. if [ $? == 0 ];then
    297. echo">>>已设置登入超时限制"
    298. else
    299. echo">>>未设置登入超时限制,请设置,设置方法:在/etc/profile或者/etc/bashrc里面添加参数TMOUT=600 --------[需调整]"
    300. fi
    301. echo">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"