当前位置:   article > 正文

Linux安全基线配置全解析

linux安全基线
 
 
 
 
 
 
 
 
 
 
 
 
来自:https://blog.csdn.net/chj_1224365967/article/details/114589867

现在大多数企业都是使用linux作为服务器,不仅是linux是开源系统,更是因为linux比windows更安全。但是由于管理员的安全意识不全或者疏忽,导致linux的敏感端口和服务没有正确的配置,可能会被恶意利用,所以需要进行基线加固。

1.基线
即安全基线配置,诸如操作系统、中间件和数据库的一个整体配置,这个版本中各项配置都符合安全方面的标准。比如在系统安装后需要按安全基线标准,将新机器中各项配置调整到一个安全、高效、合理的数值。

2.基线扫描
使用自动化工具、抓取系统和服务的配置项。将抓取到的实际值和标准值进行对比,将不符合的项显示出来,最终以报告 的形式体现出扫描结果有的工具将配置采集和配置对比分开,通过自动化脚本采集配置后再通过特别的软件转换为适合人类阅读的文档

3.基线加固自动化脚本的编写
本篇文章主要是记录和学习安全加固脚本,首先放几张安全加固shell脚本的命令语法:

0dc6c3b36f55f1e7bbf8063463af228c.png

4125b94f8db62c494fb73edf7e5b1832.png

bcf29f4fe967617da2619fe9a6e8bdec.png

73671169376564d8d2ba7c92580285bb.png

a562e3781f2a26e7cd7fe262bf394d7a.png

a2899fe2c20f48710699a25469836551.png

400b21080fb5105bcb7b0c24304f2895.png

1cb171cc7470a5ac17c9c6a1c13157e6.png

基本命令语法介绍完了,借用网上的脚本来学习:

在执行脚本前需要提前做好备份:

  1. #!/bin/bash
  2. cp /etc/login.defs /etc/login.defs.bak
  3. cp /etc/security/limits.conf /etc/security/limits.conf.bak
  4. cp /etc/pam.d/su  /etc/pam.d/su.bak
  5. cp /etc/profile /etc/profile.bak
  6. cp /etc/issue.net /etc/issue.net.bak
  7. cp /etc/shadow /etc/shadow.bak
  8. cp /etc/passwd /etc/passwd.bak
  9. cp /etc/pam.d/passwd  /etc/pam.d/passwd.bak
  10. cp /etc/pam.d/common-password /etc/pam.d/common-password.bak
  11. cp /etc/host.conf /etc/host.conf.bak
  12. cp /etc/hosts.allow /etc/hosts.allow.bak
  13. cp /etc/ntp.conf /etc/ntp.conf.bak
  14. cp -p /etc/sysctl.conf /etc/sysctl.conf.bak
  15. echo "============备份完成=================="
  1. 检查是否设置口令更改最小间隔天数

7a7498aa36ca039fcda28e130147210a.png

  1. MINDAY=`cat -n /etc/login.defs | grep -v ".*#.*"| grep PASS_MIN_DAYS|awk '{print $1}'`
  2. sed -i ''$MINDAY's/.*PASS_MIN_DAYS.*/PASS_MIN_DAYS 6/' /etc/login.defs
  3. echo "检查口令更改最小间隔天数完成"

2.检查是否设置口令过期前警告天数

c94b6b259e49442539d481688d24e069.png

  1. WARNAGE=`cat -n /etc/login.defs | grep -v ".*#.*"| grep PASS_WARN_AGE|awk '{print $1}'`
  2. sed -i ''$WARNAGE's/.*PASS_WARN.*/PASS_WARN_AGE 30/' /etc/login.defs
  3. echo "检查口令过期前警告天数完成"

3.检查口令生存周期

096677f161b9fb9c408a3b24983a767a.png

  1. MAXDAY=`cat -n /etc/login.defs | grep -v ".*#.*"| grep PASS_MAX_DAYS|awk '{print $1}'`
  2. sed -i ''$MAXDAY's/.*PASS_MAX.*/PASS_MAX_DAYS 90/' /etc/login.defs
  3. echo "检查口令生存周期完成"

4.检查口令最小长度

0fd58c9511f0ce80fb28a77e60386c48.png

  1. MINLEN=`cat -n /etc/login.defs | grep -v ".*#.*"| grep PASS_MIN_LEN|awk '{print $1}'`
  2. sed -i ''$MINDAY's/.*PASS_MIN_LEN.*/PASS_MIN_ LEN 6/' /etc/login.defs
  3. echo "检查口令最小长度"

5.检查是否设置grub,lilo密码

406224de0b2d5a273b7f5633fecf1a36.png

  1. grub="/etc/menu.lst"
  2. if [ ! -x "$grub" ];then
  3. touch "$grub"
  4. echo password=123456 >> "$grub"
  5. else 
  6. echo password=123456 >> "$grub"
  7. fi
  8. lilo="/etc/lilo.conf"
  9. if [ ! -x "$lilo" ];then
  10. touch "$lilo"
  11. echo password=123456 >> "$lilo"
  12. else
  13. echo password=123456 >> "$lilo"
  14. fi

6.检查是否设置core

30e2b4940ad811bf8192752b82cd7a0a.png

  1. c=`cat -n /etc/security/limits.conf | grep "#root" | awk '{print $1}'`
  2. d=`cat -n /etc/security/limits.conf | grep "#root" | awk '{print $5}'`
  3. sed -i ''$c' s/$d/0/g' /etc/security/limits.conf
  4. echo "设置* hard core 0完成"
  5. e=`cat -n /etc/security/limits.conf | grep soft | grep core | awk '{print $1}'`
  6. f=`cat -n /etc/security/limits.conf | grep soft | grep core | awk '{print $5}'`
  7. sed -i ''$e' s/'$f'/0/g' /etc/security/limits.conf
  8. echo "设置* soft core 0完成"

7.检查系统是否禁用ctrl+alt+del组合

82f1bcad186e3c9d697222e33e6dfc4e.png

  1. a=`cat -n /etc/control-alt-delete.conf|grep -v "#" | grep /sbin/shutdown | awk '{print $1}'`
  2. if [ -z $a ];then
  3.    echo ok
  4. else
  5.    sed -i ''$a' s/^/#/' /etc/control-alt-delete.conf
  6. fi

8.检查保留历史记录文件的大小与数量

cc545315ad43a782e203baa9f652a59d.png

  1. echo "HISTFILESIZE=5" >> /etc/profile
  2. echo "  检查保留历史命令的记录文件大小完成"
  3. echo "HISTSIZE=5" >> /etc/profile
  4. echo "检查保留历史命令的条数完成"

9.检查是否使用PAM认证模块禁止wheel组之外的用户su为root

d9b6771e04a3fee20481a374ce7f8099.png

10.检查是否删除了/etc/issue.net文件

b04675c69a9e5d37dc776f96405db1e7.png

  1. if [ -f /etc/issue.net ]
  2. then
  3. mv /etc/issue.net /etc/issue.net.bak
  4. else
  5. echo "issue.net 文件不存在"
  6. fi
  7. if [ -f /etc/issue ]
  8. then
  9. mv /etc/issue /etc/issue.bak
  10. else
  11. echo "issue 文件不存在"
  12. fi

11.是否删除与设备运行,维护等工作无关的账户

405b3ff2ea9e91c2eac8420825b6eb97.png

12.检查密码重复使用次数限制

a507cbf1e3e4f0a5fdddb92ac87ea96a.png

13.检查是否配置账户认证失败次数限制

c325c68dfbcca5c9d8fb45ec14b0f86f.png

  1. cd /etc/pam.d
  2. if [ -f system-auth ];then
  3. cp /etc/pam.d/system-auth  /etc
  4. #num=`grep -n "md5" /etc/system-auth | cut -d ":" -f 1`
  5. #sed -i ''$num'    r s/$/ remember=5' /etc/system-auth
  6. kk=`cat -n /etc/system-auth | grep -v ".*#.*"| grep md5|awk '{print $1}'`
  7. echo $kk
  8. version="password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=500"
  9. sed -i ""$kk"c $version" /etc/system-auth
  10. letter=`cat -n /etc/system-auth |grep password | grep requisite | awk '{print $1}'`
  11. sed -i ''$letter's/pam_cracklib.so/& ucredit=-1 lcredit=-1 dcredit=-1 /' /etc/pam.d/system-auth
  12. fi

14.检查是否配置关闭IP伪装与绑定

975de13b9744114140a7c76b36d4da68.png

  1. snu=`cat /etc/host.conf | awk '{print $2}'`
  2. if [ "$snu" = "on" ]; then
  3. echo "没有关闭ip伪装"
  4. fi
  5. sed -i 's/on/off/g' /etc/host.conf
  6. echo "  关闭IP伪装完成"

15.检查/etc/hosts配置

8c3473794fb1e12bf28e9e7702acdb20.png

  1. if [ -f hosts.allow ];then
  2. cp /etc/hosts.allow /etc/
  3. echo "all:172.18.12.:all" >> /etc/hosts.allow
  4. echo "sshd:172.18.12.:all" >> /etc/hosts.allow
  5. fi
  6. cd /etc
  7. if [ -f hosts.deny ];then
  8. cp /etc/hosts.deny /etc/
  9. echo "all:all" >> /etc/hosts.deny
  10. fi

16.检查相关服务状态

ebbbcf6aee22f6034946e7b78209b6c8.png

17.检查重要文件是否存在suid和sgid权限

fb9dd242bb4fb48be27262d47a21351e.png

  1. find /usr/bin/chage /usr/bin/gpasswd /usr/bin/wall /usr/bin/chfn /usr/bin/chsh /usr/bin/newgrp /usr/bin/write /usr/sbin/usernetctl /usr/sbin/traceroute /bin/mount /bin/umount /bin/ping /sbin/netreport -type f -perm +6000 2>/dev/null >file.txt
  2. if [ -s file.txt ]; then
  3. echo " find。。这条命令有输出"
  4. for i in `cat file.txt`
  5. do
  6. chmod 755 $idoneelse
  7. echo "find 。。这条命令没有输出"
  8. fi

18.其他

8250236f6cbf3ce9ad2daa13f82c2068.png

19.权限设置

  1. chmod 644 /etc/passwd
  2. chmod 644 /etc/group
  3. chmod 400 /etc/shadow
  4. #chmod 600 /etc/xinetd.conf
  5. chmod 644 /etc/services
  6. chmod 600 /etc/security
  7. chmod 600 /etc/grub.conf
  8. chmod 600 /boot/grub/grub.conf
  9. chmod 600 /etc/lilo.conf
  10. echo "文件权限设置完成"

经典综合脚本鉴赏:

1、

  1. echo ---------------开始--------------------
  2. echo ---------------aboutkey----------------
  3. cd /etc
  4. if [ -f login.defs ];then
  5. cp /etc/login.defs  /home/test1
  6. MINDAY=`cat -n /home/test1/login.defs | grep -v ".*#.*"| grep PASS_MIN_DAYS|awk '{print $1}'`
  7. sed -i ''$MINDAY's/.*PASS_MIN_DAYS.*/PASS_MIN_DAYS 6/' /home/test1/login.defs
  8. WARNAGE=`cat -n /home/test1/login.defs | grep -v ".*#.*"| grep PASS_WARN_AGE|awk '{print $1}'`
  9. sed -i ''$WARNAGE's/.*PASS_WARN.*/PASS_WARN_AGE 30/' /home/test1/login.defs
  10. MAXDAY=`cat -n /home/test1/login.defs | grep -v ".*#.*"| grep PASS_MAX_DAYS|awk '{print $1}'`
  11. sed -i ''$MAXDAY's/.*PASS_MAX.*/PASS_MAX_DAYS 90/' /home/test1/login.defs
  12. MINLEN=`cat -n /home/test1/login.defs | grep -v ".*#.*"| grep PASS_MIN_LEN|awk '{print $1}'`
  13. sed -i ''$MINDAY's/.*PASS_MIN_LEN.*/PASS_MIN_ LEN 6/' /home/test1/login.defs
  14. fi
  15. echo --------------------ok---------------------------
  16. echo -------------------stop the del------------------------
  17. cd /etc/init
  18. if [ -f control-alt-delete.conf ];then
  19. cp /etc/init/control-alt-delete.conf /home/test1
  20. #delete=`grep -n "/sbin/shutdown -r now" /home/test1/control-alt-delete.conf | cut -d ":" -f 1`
  21. #sed -i ''$delete' r s/^/#/' /home/test1/control-alt-delete.conf
  22. #cp /etc/init/control-alt-delete.conf /home/test1
  23. #num1=`grep -n "/sbin/shutdown" /home/test1/control-alt-delete.conf | cut -d "" -f 1`
  24. #sed -i ''$num' r s/^/#/' /home/test1/control-alt-delete.conf
  25. #a=`cat -n /home/test1/control-alt-delete.conf|grep -v "#" | grep "/sbin/shutdown" | awk '{print $1}'`
  26. #text=`sed -n "$a"p /home/test1/control-alt-delete.conf`
  27. #sed -i ''$a'c # '$text'' /home/test1/control-alt-delete.conf
  28. a=`cat -n /home/test1/control-alt-delete.conf|grep -v "#" | grep /sbin/shutdown | awk '{print $1}'`
  29.     if [ -z $a ];then
  30.     echo ok
  31.     else
  32.     sed -i ''$a' s/^/#/' /home/test1/control-alt-delete.conf
  33.     fi
  34. fi
  35. echo ---------------------ok---------------------------------------
  36. echo ------------------------grub and lilo key------------------------
  37. grub="/home/test1/menu.lst"
  38. if [ ! -x "$grub" ];then
  39. touch "$grub"
  40. echo password=123456 >> "$grub"
  41. else 
  42. echo password=123456 >> "$grub"
  43. fi
  44. lilo="/home/test1/lilo.conf"
  45. if [ ! -x "$lilo" ];then
  46. touch "$lilo"
  47. echo password=123456 >> "$lilo"
  48. else
  49. echo password=123456 >> "$lilo"
  50. fi
  51. echo ---------------------ok--------------------------------------
  52. echo ----------------------the history of mouthpasswd------------------
  53. cd /etc
  54. if [ -f profile ];then
  55. cp /etc/profile /home/test1
  56. #num=`sed -n /home/test1/profile | grep HISTFILESIZE | awk '{print $1}'`
  57.  #/home/test1/profile | sed $num'c HISTFILESIZE=5'
  58. echo "HISTFILESIZE=5" >> /home/test1/profile
  59. echo "ulimit -S -c unlimited" >> /home/test1/profile
  60. fi
  61. echo -------------------------ok--------------------- 
  62. echo ------------------------issue-----------------
  63. #issu="/etc/issue.net"
  64. cd /etc
  65. if [ -f issue.net ];then
  66. cp  issue.net  /home/test1/issue.net.bak
  67. echo ok
  68. fi
  69. echo ok
  70. if [ -f issue ];then
  71. cp issue /home/test1/issue.bak
  72. echo ok
  73. fi
  74. echo -----------------------allow/deny ip-------------------
  75. cd /etc
  76. if [ -f hosts.allow ];then
  77. cp /etc/hosts.allow /home/test1
  78. echo "all:172.18.12.:all" >> /home/test1/hosts.allow
  79. echo "sshd:172.18.12.:all" >> /home/test1/hosts.allow
  80. fi
  81. cd /etc
  82. if [ -f hosts.deny ];then
  83. cp /etc/hosts.deny /home/test1
  84. echo "all:all" >> /home/test1/hosts.deny
  85. fi
  86. echo -----------------ok------------------------
  87. #/etc/init.d/xinetd restart
  88. echo -----------------------------core dump-------------------
  89. cd /etc/security
  90. if [ -f limits.conf ];then 
  91. cp /etc/security/limits.conf  /home/test1
  92. echo "*soft core 0" >> /home/test1/limits.conf
  93. echo "*hard core 0" >> /home/test1/limits.conf
  94. fi
  95. echo --------------ok-------------------------
  96. echo ----------------------------passwdrepeat---------------------
  97. cd /etc/pam.d
  98. if [ -f system-auth ];then
  99. cp /etc/pam.d/system-auth  /home/test1
  100. #num=`grep -n "md5" /home/test1/system-auth | cut -d ":" -f 1`
  101. #sed -i ''$num'    r s/$/ remember=5' /home/test1/system-auth
  102. kk=`cat -n /home/test1/system-auth | grep -v ".*#.*"| grep md5|awk '{print $1}'`
  103. echo $kk
  104. version="password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=500"
  105. sed -i ""$kk"c $version" /home/test1/system-auth
  106. letter=`cat -n /home/test1/system-auth |grep password | grep requisite | awk '{print $1}'`
  107. sed -i ''$letter's/pam_cracklib.so/& ucredit=-1 lcredit=-1 dcredit=-1 /' /etc/pam.d/system-auth
  108. fi
  109. echo -----------------ok--------------------
  110. echo --------------------超出退出--------------
  111. cd /etc
  112. if [ -f profile ];then
  113. cp /etc/profile /home/test1
  114. echo "export TMOUT=600" >> /home/test1/profile
  115. fi
  116. echo ------------------ok-------------------
  117. echo ------------------权限-------------------
  118. chmod 644 /etc/passwd
  119. chmod 644 /etc/group
  120. chmod 400 /etc/shadow
  121. #chmod 600 /etc/xinetd.conf
  122. chmod 644 /etc/services
  123. chmod 600 /etc/security
  124. chmod 600 /etc/grub.conf
  125. chmod 600 /boot/grub/grub.conf
  126. chmod 600 /etc/lilo.conf
  127. echo ------------------unmask--------------------
  128. cp /etc/csh.cshrc /home/test1
  129. cp /etc/csh.login /home/test1
  130. cp /etc/bashrc /home/test1
  131. cp /etc/profile /home/test1
  132. sed -i '11 s/.*umask.*/umask 077/' /home/test1/csh.cshrc
  133. sed -i '58 s/.*umask.*/umask 077/' /home/test1/csh.login
  134. sed -i '66 s/.*UMASK.*/UMASK 077/' /home/test1/bashrc
  135. sed -i '62s/.*umask.*/umask 077/' /home/test1/profile
  136. echo --------------------before login banner-------------------
  137. cd /etc
  138. if [ -f ssh_banner ];then
  139. touch /etc/ssh_banner
  140. chown bin:bin /etc/ssh_banner
  141. chmod 644 /etc/ssh_banner
  142. echo "Authorized only.All activity will be monitored and reported" > /etc/ssh_banner
  143. fi
  144. echo -----------------------ok----------------------------
  145. echo -------------------stop root ssh login------------------
  146. cp /etc/pam.d/login /home/test1
  147. echo "auth   required   pam_securetty.so" >> /home/test1/login
  148. cp /etc/ssh/sshd_config /home/test1
  149. echo "Banner /etc/ssh_banner" >> /home/test1/sshd_config
  150. echo "PermitRootLogin no" >> /home/test1/sshd_config
  151. service sshd restart
  152. echo -------------------------ok-------------------
  153. echo --------------------openssh----------------------------
  154. openssh=`cat -n /home/test1/sshd_config | grep -v ".*#.*"| grep Protocol |awk '{print $1}'`
  155. sed -i ''$openssh's/.*Protocol.*/Protocol 2/' /home/test1/sshd_config
  156. echo -------------ok---------------------------

2、

  1. #!/bin/bash
  2. read key
  3. echo "警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"
  4. echo ---------------------------------------主机安全检查-----------------------
  5. echo "系统版本"
  6. uname -a
  7. echo --------------------------------------------------------------------------
  8. echo "本机的ip地址是:"
  9. ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
  10. echo --------------------------------------------------------------------------
  11. awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow
  12. echo --------------------------------------------------------------------------
  13. more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' '  '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
  14. echo --------------------------------------------------------------------------
  15. more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' '  '{if($2!=6){print "/etc/login.defs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'
  16. echo --------------------------------------------------------------------------
  17. more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' '  '{if($2!=10){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'
  18. echo --------------------------------------------------------------------------
  19. grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"
  20. echo --------------------------------------------------------------------------
  21. if ps -elf |grep xinet |grep -v "grep xinet";then
  22. echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"
  23. else
  24. echo "xinetd 服务未开启"
  25. fi
  26. echo --------------------------------------------------------------------------
  27. echo "查看系统密码文件修改时间"
  28. ls -ltr /etc/passwd
  29. echo --------------------------------------------------------------------------
  30. echo  "查看是否开启了ssh服务"
  31. if service sshd status | grep -E "listening on|active \(running\)"; then
  32. echo "SSH服务已开启"
  33. else
  34. echo "SSH服务未开启"
  35. fi
  36. echo --------------------------------------------------------------------------
  37. echo "查看是否开启了TELNET服务"
  38. if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
  39. echo  "TELNET服务已开启 "
  40. else
  41. echo  "TELNET服务未开启 "
  42. fi
  43. echo --------------------------------------------------------------------------
  44. echo  "查看系统SSH远程访问设置策略(host.deny拒绝列表)"
  45. if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then
  46. echo  "远程访问策略已设置 "
  47. else
  48. echo  "远程访问策略未设置 "
  49. fi
  50. echo --------------------------------------------------------------------------
  51. echo  "查看系统SSH远程访问设置策略(hosts.allow允许列表)"
  52. if more /etc/hosts.allow | grep -E "sshd: ";more /etc/hosts.allow | grep -E "sshd"; then
  53. echo  "远程访问策略已设置 "
  54. else
  55. echo  "远程访问策略未设置 "
  56. fi
  57. echo "当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。"
  58. echo -------------------------------------------------------------------------
  59. echo "查看shell是否设置超时锁定策略"
  60. if more /etc/profile | grep -E "TIMEOUT= "; then
  61. echo  "系统设置了超时锁定策略 "
  62. else
  63. echo  "未设置超时锁定策略 "
  64. fi
  65. echo -------------------------------------------------------------------------
  66. echo "查看syslog日志审计服务是否开启"
  67. if service syslog status | egrep " active \(running";then
  68. echo "syslog服务已开启"
  69. else
  70. echo "syslog服务未开启,建议通过service syslog start开启日志审计功能"
  71. fi
  72. echo -------------------------------------------------------------------------
  73. echo "查看syslog日志是否开启外发"
  74. if more /etc/rsyslog.conf | egrep "@...\.|@..\.|@.\.|\*.\* @...\.|\*\.\* @..\.|\*\.\* @.\.";then
  75. echo "客户端syslog日志已开启外发"
  76. else
  77. echo "客户端syslog日志未开启外发"
  78. fi
  79. echo -------------------------------------------------------------------------
  80. echo "查看passwd文件中有哪些特权用户"
  81. awk -F: '$3==0 {print $1}' /etc/passwd
  82. echo ------------------------------------------------------------------------
  83. echo "查看系统中是否存在空口令账户"
  84. awk -F: '($2=="!!") {print $1}' /etc/shadow
  85. echo "该结果不适用于Ubuntu系统"
  86. echo ------------------------------------------------------------------------
  87. echo "查看系统中root用户外连情况"
  88. lsof -u root |egrep "ESTABLISHED|SYN_SENT|LISTENING"
  89. echo ----------------------------状态解释------------------------------
  90. echo "ESTABLISHED的意思是建立连接。表示两台机器正在通信。"
  91. echo "LISTENING的"
  92. echo "SYN_SENT状态表示请求连接"
  93. echo ------------------------------------------------------------------------
  94. echo "查看系统中root用户TCP连接情况"
  95. lsof -u root |egrep "TCP"
  96. echo ------------------------------------------------------------------------
  97. echo "查看系统中存在哪些非系统默认用户"
  98. echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"
  99. more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'
  100. echo ------------------------------------------------------------------------
  101. echo "检查系统守护进程"
  102. more /etc/xinetd.d/rsync | grep -v "^#"
  103. echo ------------------------------------------------------------------------
  104. echo "检查系统是否存在入侵行为"
  105. more /var/log/secure |grep refused
  106. echo ------------------------------------------------------------------------
  107. echo "-----------------------检查系统是否存在PHP脚本后门---------------------"
  108. if find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn 1>/dev/null 2>&1;then
  109. echo "检测到PHP脚本后门"
  110. find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn
  111. find / -type f -name *.php | xargs egrep -l "mysql_query\($query, $dbconn\)|专用网马|udf.dll|class PHPzip\{|ZIP压缩程序 荒野无灯修改版|$writabledb|AnonymousUserName|eval\(|Root_CSS\(\)|黑狼PHP木马|eval\(gzuncompress\(base64_decode|if\(empty\($_SESSION|$shellname|$work_dir |PHP木马|Array\("$filename"| eval\($_POST\[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn |awk '{print $2}' | xargs -I{} cp {} /tmp/
  112. echo "后门样本已拷贝到/tmp/目录"
  113. else
  114. echo "未检测到PHP脚本后门"
  115. fi
  116. echo ------------------------------------------------------------------------
  117. echo "-----------------------检查系统是否存在JSP脚本后门---------------------"
  118. find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门" |sort -n|uniq -c |sort -rn 2>&1
  119. find / -type f -name *.jsp | xargs egrep -l "InputStreamReader\(this.is\)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/  2>&1 
  120. echo ------------------------------------------------------------------------
  121. echo "----------------------检查系统是否存在HTML恶意代码---------------------"
  122. if find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" 1>/dev/null 2>&1;then
  123. echo "发现HTML恶意代码"
  124. find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn
  125. find / -type f -name *.html | xargs egrep -l "WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
  126. echo "后门样本已拷贝到/tmp/目录"
  127. else
  128. echo "未检测到HTML恶意代码"
  129. fi
  130. echo "----------------------检查系统是否存在perl恶意程序----------------------"
  131. if find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;" 1>/dev/null 2>&1;then
  132. echo "发现perl恶意程序"
  133. find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn
  134. find / -type f -name *.pl | xargs egrep -l "SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;"|sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
  135. echo "可疑样本已拷贝到/tmp/目录"
  136. else
  137. echo "未检测到perl恶意程序"
  138. fi
  139. echo "----------------------检查系统是否存在Python恶意程序----------------------"
  140. find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn
  141. find / -type f -name *.py | xargs egrep -l "execCmd|cat /etc/issue|getAppProc|exploitdb" |sort -n|uniq -c |sort -rn| awk '{print $2}' | xargs -I{} cp {} /tmp/
  142. echo ------------------------------------------------------------------------
  143. echo "-----------------------检查系统是否存在恶意程序---------------------"
  144. find / -type f -perm -111  |xargs egrep "UpdateProcessER12CUpdateGatesE6C|CmdMsg\.cpp|MiniHttpHelper.cpp|y4'r3 1uCky k1d\!|execve@@GLIBC_2.0|initfini.c|ptmalloc_unlock_all2|_IO_wide_data_2|system@@GLIBC_2.0|socket@@GLIBC_2.0|gettimeofday@@GLIBC_2.0|execl@@GLIBC_2.2.5|WwW.SoQoR.NeT|2.6.17-2.6.24.1.c|Local Root Exploit|close@@GLIBC_2.0|syscall\(\__NR\_vmsplice,|Linux vmsplice Local Root Exploit|It looks like the exploit failed|getting root shell" 2>/dev/null
  145. echo ------------------------------------------------------------------------
  146. echo "检查网络连接和监听端口"
  147. netstat -an 
  148. echo "--------------------------路由表、网络连接、接口信息--------------"
  149. netstat -rn 
  150. echo "------------------------查看网卡详细信息--------------------------"
  151. ifconfig -a 
  152. echo ------------------------------------------------------------------------
  153. echo "查看正常情况下登录到本机的所有用户的历史记录"
  154. last
  155. echo ------------------------------------------------------------------------
  156. echo "检查系统中core文件是否开启"
  157. ulimit -c
  158. echo "core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析,如果返回结果为0,则是关闭了此功能,系统不会生成core文件"
  159. echo ------------------------------------------------------------------------
  160. echo "检查系统中关键文件修改时间"
  161. ls -ltr /bin/ls /bin/login /etc/passwd /bin/ps /usr/bin/top /etc/shadow|awk '{print "文件名:"$8"  ""最后修改时间:"$6" "$7}'
  162. echo "ls文件:是存储ls命令的功能函数,被删除以后,就无法执行ls命令,黑客可利用篡改ls文件来执行后门或其他程序。
  163. login文件:login是控制用户登录的文件,一旦被篡改或删除,系统将无法切换用户或登陆用户
  164. user/bin/passwd是一个命令,可以为用户添加、更改密码,但是,用户的密码并不保存在/etc/passwd当中,而是保存在了/etc/shadow当中
  165. etc/passwd是一个文件,主要是保存用户信息。
  166. sbin/portmap是文件转换服务,缺少该文件后,无法使用磁盘挂载、转换类型等功能。
  167. bin/ps 进程查看命令功能支持文件,文件损坏或被更改后,无法正常使用ps命令。
  168. usr/bin/top top命令支持文件,是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。
  169. etc/shadow shadow 是 /etc/passwd 的影子文件,密码存放在该文件当中,并且只有root用户可读。"
  170. echo --------------------------------------------------------------------------
  171. echo "-------------------查看系统日志文件是否存在--------------------"
  172. log=/var/log/syslog
  173. log2=/var/log/messages
  174. if [ -e "$log" ]; then
  175. echo  "syslog日志文件存在! "
  176. else
  177. echo  "/var/log/syslog日志文件不存在! "
  178. fi
  179. if [ -e "$log2" ]; then
  180. echo  "/var/log/messages日志文件存在! "
  181. else
  182. echo  "/var/log/messages日志文件不存在! "
  183. fi
  184. echo --------------------------------------------------------------------------
  185. echo "检查系统文件完整性2(MD5检查)"
  186. echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"
  187. echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"
  188. echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"
  189. file="/etc/md5db"
  190. if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1
  191. else 
  192. md5sum /etc/passwd >>/etc/md5db
  193. md5sum /etc/shadow >>/etc/md5db
  194. md5sum /etc/group >>/etc/md5db
  195. md5sum /usr/bin/passwd >>/etc/md5db
  196. md5sum /sbin/portmap>>/etc/md5db
  197. md5sum /bin/login >>/etc/md5db
  198. md5sum /bin/ls >>/etc/md5db
  199. md5sum /bin/ps >>/etc/md5db
  200. md5sum /usr/bin/top >>/etc/md5db;
  201. fi
  202. echo ----------------------------------------------------------------------
  203. echo "------------------------主机性能检查--------------------------------"
  204. echo "CPU检查"
  205. dmesg | grep -i cpu
  206. echo -----------------------------------------------------------------------
  207. more /proc/cpuinfo
  208. echo -----------------------------------------------------------------------
  209. echo "内存状态检查"
  210. vmstat 2 5
  211. echo -----------------------------------------------------------------------
  212. more /proc/meminfo
  213. echo -----------------------------------------------------------------------
  214. free -m
  215. echo -----------------------------------------------------------------------
  216. echo "文件系统使用情况"
  217. df -h
  218. echo -----------------------------------------------------------------------
  219. echo "网卡使用情况"
  220. lspci -tv
  221. echo ----------------------------------------------------------------------
  222. echo "查看僵尸进程"
  223. ps -ef | grep zombie
  224. echo ----------------------------------------------------------------------
  225. echo "耗CPU最多的进程"
  226. ps auxf |sort -nr -k 3 |head -5
  227. echo ----------------------------------------------------------------------
  228. echo "耗内存最多的进程"
  229. ps auxf |sort -nr -k 4 |head -5
 
 
 
 
 
 
 
 

652d960e97b5267bdf480907e117dcd1.gif

 
 

10T 技术资源大放送!包括但不限于:Linux、虚拟化、容器、云计算、网络、Python、Go 等。在 开源Linux 公众号内回复 10T,即可免费获取!

  1. Linux学习指南
  2. 有收获,点个在看
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/439103
推荐阅读
相关标签
  

闽ICP备14008679号