1、身份鉴权

1)口令复杂度

涉及用户密码,配置口令复杂度

安全基线说明:

对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、大小写字母和特殊符号中至少2类

pam认证实现:用户登录到系统的时候,经过pam检查。pam是系统的模块

配置方法:

/etc/pam.d/system-auth文件中是否对 pam_cracklib.so 的参数进行了正确设置。
pam_pwquality.so系统默认的是:
password  requisite  pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=

系统默认:

修改为:

password requisite pam_pwquality.so try_first_pass local_users_only retry=3 difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 authtok_type=alexmk_linux

参数解释:

difok=3  :新旧密码必须有多少位不同,3表示,必须有3位不同
minlen=8 :密码最少8位
ucredit=-1  :u,up,大写字母,-1(负1)表示最少1位
lcredit=-1  :l,low,小写字母,最少1位
dcredit=-1  :d,digital,数字,最少1位
ocredit=    :o,other,除了数字、大小写字母以外的字符
authtok_type=alexmk_linux  :提示域名。默认为空

如果没有pam_pwquality,则使用pam_cracklib,例如:

password  requisite  pam_cracklib.so difok=3 minlen=8 ucredit=1 lcredit=1 dcredit=1

设置后,测试一下:把test用户密码设为1:

[root@m01 ~]#id test
uid=1000(test) gid=1000(test) groups=1000(test),10(wheel)
[root@m01 ~]#echo 1 | passwd test
Changing password for user test.
New alexmk_linux password: BAD PASSWORD: The password is a palindrome
Retype new alexmk_linux password: Password change aborted.
New alexmk_linux password: Password change aborted.
New alexmk_linux password: Password change aborted.
passwd: Have exhausted maximum number of retries for service
[root@m01 ~]#

提示错误。

注意这是限制普通用户的密码,如果要限制root,则在末尾添加enforce_for_root即可。

2)口令认证失败锁定次数

比如远程连接,失败多少次就锁定

配置:在/etc/pam.d/login、/etc/pam.d/ssh文件第一行添加:

auth  required  pam_tally2.so onerr=fail  deny=3 unlock_time=300

用户登录失败3次,则锁定300秒

解锁用户:

pam_tally2  -u  用户名  --reset

例如:

[root@m01 ~]#pam_tally2 -u test --reset
Login           Failures Latest failure     From
test                9    07/23/23 20:19:40  192.168.10.1
[root@m01 ~]#

如果要锁定root,则加上even_deny_root

3)口令生存周期

定期更新密码

面向新用户:/etc/login.defs文件设置

PASS_MAX_DAYS 90 # 新建用户的密码最长使用天数
PASS_MIN_DAYS 0  # 新建用户的密码最短使用天数
PASS_WARN_AGE 7  # 新建用户的密码到期提前提醒天数
PASS_MIN_LEN  5  # 密码长度最少几位

旧用户(已有的用户):使用passwd命令修改

passwd  -x  天数  用户名

查看用户密码过期时间:

passwd -S 用户名

4)配置使用ssh方式远程访问

远程连接只保留ssh方式,禁用telnet

[root@m01 ~]#systemctl is-active sshd
[root@m01 ~]#systemctl is-enabled sshd
[root@m01 ~]#systemctl is-enabled telnet
[root@m01 ~]#systemctl is-active telnet
[root@m01 ~]#

查看telnet端口是否打开

[root@m01 ~]#nmap -p23 192.168.10.61

安装telnet服务:

[root@m01 ~]#yum install telnet-server
[root@m01 ~]#systemctl start  telnet.socket

5)配置历史口令

历史密码:设置最近的5次密码不能相同

红帽系列:修改/etc/pam.d/system-auth文件

在password sufficient pam_unix.so这一行的末尾加上:

remember=数字,如:5

如果要限制root:在password部分的开头

password requisite pam_pwhistory.so remember=5 enforce_for_root

该设置通用适用于普通用户,因此,不需要password sufficient pam_unix.so这一行

suse系统:/etc/security/pam_pwcheck文件添加remember=5

6)身份鉴权脚本

a)检查是否配置口令复杂度

/etc/pam.d/system-auth文件的pam_pwquality这行要有:
minlen、ucredit、lcredit、dcredit这4个参数

minlen=右边内容,过滤出密码最少几位
ucredit、lcredit、dcredit 最少几位,不做要求

b)检查口令认证失败锁定次数

/etc/pam.d/sshd、 /etc/pam.d/login两个文件中的首行要有:
auth  required  pam_tally2.so  onerr=fail  deny=3 unlock_time=300

c)口令生存时间

新用户:
/etc/login.defs文件PASS_MAX_DAYS 是否小于等于90
旧用户:
  先过滤出可以登录的用户,命令解释器:/bin/bash
  passwd -S 检查的第5列或/etc/shadow文件的第5列
  判断第5列小于等于90

d)历史口令配置

/etc/pam.d/system-auth文件password首行password requisite pam_pwhistory.so
有没配置remember参数

具体脚本:

[root@m01 /server/script/devops-shell]#vim project_secure_check.sh
#0、diy funcs
funcs=/server/script/devops-shell/funcs_diy.sh
. /server/script/devops-shell/funcs_log.sh
logfile=/var/log/project_secure_check.log
if [ -f $funcs ];then
   . $funcs
else
   echo "$funcs not found"
   exit 1
fi

#1、user password
user_password_fuzadu() {
   #配置复杂度的参数个数
   cnt=`grep -v "#" /etc/pam.d/system-auth | grep 'pam_pwquality' | grep -Eo 'minlen|ucredit|lcredit|dcredit' | wc -l`  
   if [ $cnt -eq 4 ];then
      #密码最少多少位
      password_minlen=`grep -v "#" /etc/pam.d/system-auth | grep 'pam_pwquality' | grep -Eo 'minlen=[0-9]+' | cut -d"=" -f2`
      greenecho "密码复杂度配置成功"
      greenecho "密码最少${password_minlen}位"
      log INFO "[密码复杂度配置成功,密码最少${password_minlen}位]" $logfile
   else
      redecho "密码复杂度未配置"
      log ERROR "[密码复杂度未配置]" $logfile
   fi
}  
user_password_lock() {
   #参数个数
   cnt=`grep -nv "#"  /etc/pam.d/sshd /etc/pam.d/login  | grep 'pam_tally2.so' | grep -oE 'onerr|deny|unlock_time' | wc -l
`
   if [ $cnt -eq 6 ];then
      deny_num=`grep -nv "#"   /etc/pam.d/sshd /etc/pam.d/login  | grep 'pam_tally2.so' | grep -oE -m1 'deny=[0-9]+' | cut -d'=' -f2`
      greenecho "远程连接失败锁定配置成功"
      greenecho "连接失败次${deny_num}次,会被锁定"
      log INFO "[远程连接失败锁定配置成功,失败次数:${deny_num}]" $logfile
   else
      redecho "远程连接锁定未配置"
      log ERROR "[远程连接失败锁定未配置]" $logfile
   fi
}
user_password_expire() {
   msg="用户密码过期时间配置"
   #新用户
   expire=`grep -i ^pass_max_days /etc/login.defs  | cut -f2`
   if [ $expire -le 90 ];then
      greenecho "${msg}成功"
      log INFO "[${msg}成功]" $logfile
   else
      redecho "${msg}失败"
      log ERROR "[${msg}失败]" $logfile
   fi
   #旧用户
   #过滤出可以登录的用户
   user_lists=`grep '/bin/bash' /etc/passwd | cut -d: -f1`
   #检查密码过期日期(第5列为天数)
   for user in $user_lists
   do
      expire_date=`passwd -S $user |  awk '{print $5}'`
      if [ $expire_date -gt 90 ];then
          echo "$user 没有配置密码过期时间"
      fi
   done
}
user_password_history() {
    msg="历史密码是否重复功能"
    cnt=`grep -v '#' /etc/pam.d/system-auth | grep 'pam_pwquality' | grep remember | wc -l`
   if [ $cnt -eq 1 ];then
      greenecho "${msg}成功"
      log INFO "[${msg}成功]" $logfile
   else
      redecho "${msg}失败"
      log ERROR "[${msg}失败]" $logfile
   fi
}
#main
main() {
   user_password_fuzadu
   user_password_lock
   user_password_expire
   user_password_history
}
main

执行效果:

2、访问控制

2.1禁用共享用户

是否有多个人共用Linux账号情况。判断方法:最近2次登录ip

2.2 锁定无关用户

注释或删除或锁定

需要统计哪些虚拟用户没有使用,注释掉即可。

一般情况下,需要锁定的用户有:

ip、nuucp、hpdb、sync、adm、ftp

锁定用户:

passwd -l 用户名

解锁:

passwd -u 用户名

2.3 清除uid为0的非root账户

一些情况下,有些人员(黑客)处于便捷性考虑,创建了uid为0,名字不是root的用户

创建uid为0的非root用户,,用户名:haha:

[root@m01 ~]#useradd -o -u 0 haha
[root@m01 ~]#id haha
uid=0(root) gid=0(root) groups=0(root)
[root@m01 ~]#

本质还是root用户

检查:

[root@m01 ~]#awk -F: '$3==0 && $1!="root"' /etc/passwd
haha:x:0:1001::/home/haha:/bin/bash
[root@m01 ~]#

删除:

[root@m01 ~]#userdel -r haha

2.4 设置umask值

可以在/etc/profile、/etc/bashrc、用户家目录下的.bash_profie、用户家目录下的.profile、用户家目录下的.bashrc等文件中设置umask值。但,具体得看系统的发行版本。

默认的umask:

root:0022
普通用户:0002

/etc/profile文件中的默认umask:

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002
else
    umask 022
fi

推荐安全的umask是:027,则

文件默认权限:666-027=64(-1),如果umask有奇数,则结果所在的位置要加1,所以,结果是640
目录默认权限:777-027=750

如果改成027,有可能导致某些服务异常。非必要,不要改

2.5 重要目录与文件的权限

一些重要目录、文件:

[root@m01 ~]#ls -ld /etc/              权限:755
[root@m01 ~]#ls -ld /etc/rc.d/init.d/  权限:755
[root@m01 ~]#ls -ld /tmp/              权限:1777
[root@m01 ~]#ls -ld /etc/inetd.conf
[root@m01 ~]#ls -ld /etc/passwd        权限:644
[root@m01 ~]#ls -ld /etc/shadow        权限:000
[root@m01 ~]#ls -ld /etc/group         权限:644
[root@m01 ~]#ls -ld /etc/security/     权限:755
[root@m01 ~]#ls -ld /etc/services      权限:644
[root@m01 ~]#ls -ld /etc/rc*.d         权限:777,但/etc/rc.d为755

推荐使用aide监控

2.6 控制未授权的suid和sgid

suid:一般用于命令,普通用户可以运行这个命令具有这个命令所有者(root)的权限
sgid:一般用于命令,普通用户可以运行这个命令具有这个命令用户组(root)的权限

检查:

[root@m01 ~]#find / -perm /+s 2>/dev/null | xargs ls -ld  --color
[root@m01 ~]#find / -perm /+s 2>/dev/null | xargs ls -ld  --color | wc -l
30
[root@m01 ~]#

默认一般是30个。

/+s:所有者、用户组任意位置有s权限

2.6 控制任何人都有写权限的目录

主要的目录其他人的权限:rwx

检查:

[root@m01 ~]#find / -type d -perm /o=w | xargs ls -ld

2.7 控制任何人都有写权限的文件

文件的其他人权限:rw

检查命令:

[root@m01 ~]#find / -type f -perm /o=w 2>/dev/null | xargs ls -ld 2>/dev/null | egrep -v '/proc/|/sys/'

其中,/sys/、/proc/是虚拟目录,可以排除

结果应该是0

2.8 删除没有属主的文件

可能是从其他地方下载的文件,所有者、用户组可能不是名字而是数字(uid、gid)

检查:

[root@m01 ~]#find / -type f \( -nouser -o -nogroup \) | xargs ls -ld

结果应该是0

2.9 控制异常或隐藏文件、目录

查找:

[root@m01 ~]#find / -type d -name ".*" | xargs ls -ld | wc -l
13
[root@m01 ~]#find / -type f -name ".*" | xargs ls -ld | wc -l
1095
[root@m01 ~]#

安装完成系统并部署好服务后,检查并获取一个数值,然后下次检查对比数值是否变化

2.10 禁止ctrl+alt_del

禁止重启按键,查看:

[root@m01 ~]#systemctl list-unit-files | grep ctrl
ctrl-alt-del.target                           disabled
[root@m01 ~]#

默认没开启。如果开启,则

在 "/etc/inittab" 文件中注释掉下面这行(使用#)
ca::ctrlaltdel:/sbin/shutdown –t3 –r now
改为:
#ca::ctrlaltdel:/sbin/shutdown –t3 –r now
输入如下命令使改动生效: #/sbin/init q

2.11 访问控制脚本

锁定虚拟用户

uid=0,用户名不是root

suid、sgid数量

任何人都有读写权限的文件和目录

没有用户组或所有者的文件

[root@m01 /server/script/devops-shell]#vim access_ctrl.sh
#1、锁定虚拟用户
access_ctrl_lockuser() {
   msg="锁定一些不使用的虚拟用户"
   user_list="ip|nuucp|hpdb|sync|adm|ft"
   cnt=`egrep -v '#' /etc/passwd | egrep "${user_list}" | wc -l`
   if [ $cnt -eq 0 ];then
          echo "${msg} 成功"
   else 
          echo "${msg} 失败"
          echo "未锁定的虚拟用户数量:${cnt}"
   fi
}
#2、uid=0,用户名不是root
access_ctrl_notroot() {
   msg="检查uid为0,用户名不是root的用户"
   cnt=`awk -F: '$3==0 && $1!="root" {print $1}' /etc/passwd | wc -l`
   if [ $cnt -eq 0 ];then
          echo "${msg} 成功"
   else
          echo "${msg} 失败"
          echo "uid为0,用户名不是root的数量:${cnt}"
   fi
}
#3、suid、sgid数量
access_ctrl_suidsgid() {
        msg="检查系统是否有新增的suid、sgid"
        now=30
        cnt=`find / -perm /+s 2>/dev/null | xargs ls -ld  --color | wc -l`
        if [ $cnt -gt $now ];then
      echo "${msg} 成功"
    else
          echo "${msg} 失败"
          echo "检查系统有新增的suid、sgid文件"
    fi
}

#4、任何人都有读写权限的文件和目录
access_ctrl_dir() {
        msg="检查系统是否有新增的所有人都有读写权限的目录"
        now=9
        cnt=`find / -type d -perm /o=w | xargs ls -ld | wc -l`
        if [ $cnt -lt $now ];then
      echo "${msg} 成功"
    else
          echo "${msg} 失败"
          echo "检查系统有新增的所有人都有读写权限的目录,数量:${cnt}"
    fi
}
access_ctrl_file() {
        msg="检查系统是否有新增的所有人都有读写权限的文件"
        now=0
        cnt=`find / -type f -perm /o=w 2>/dev/null | xargs ls -ld 2>/dev/null | egrep -v '/proc/|/sys/' | wc -l`
        if [ $cnt -eq $now ];then
      echo "${msg} 成功"
    else
          echo "${msg} 失败"
          echo "检查系统有新增的所有人都有读写权限的文件,数量:${cnt}"
    fi
}
#5、检查没有属主的文件
access_ctrl_nousergroup() {
        msg="检查系统是否有没有属主的文件"
        now=0
        cnt=`find / -type f \( -nouser -o -nogroup \) 2>/dev/null | xargs ls -ld | wc -l`
        if [ $cnt -gt $now ];then
      echo "${msg} 成功"
    else
          echo "${msg} 失败"
          echo "检查系统有有属主的文件,数量:${cnt}"
    fi
}
access_ctrl() {
   access_ctrl_lockuser
   access_ctrl_dir
   access_ctrl_file
   access_ctrl_notroot
   access_ctrl_suidsgid
   access_ctrl_nousergroup
}
access_ctrl

3、安全审计

记录用户每时每刻的操作

未来推荐交给vpn+堡垒机

3.1 PROMPT_COMMAND命令实现操作记录功能

环境变量:
作用:记录写的命令会在用户执行命令后运行

步骤:

修改环境变量内容,history 1写入到某个文件中

例如:

[root@m01 ~]#export PROMPT_COMMAND="history 1 >> /tmp/audi.log"

执行一些命令后,查看该文件

[root@m01 ~]#ls
[root@m01 ~]#cd /server/script/devops-shell/
[root@m01 /server/script/devops-shell]#cd
[root@m01 ~]#cat /tmp/audi.log 
 1030  export PROMPT_COMMAND="history 1 >> /tmp/audi.log"
 1031  ls
 1032  cd /server/script/devops-shell/
 1033  cd
[root@m01 ~]#

history 1:1条历史命令

要记录更详细的信息,则通过脚本实现:

[root@m01 /server/script/devops-shell]#vim audit.sh
cmd=`history 1`
user=`whoami`
time=`date +%F_%T`
logfile=/tmp/audit-`whoami`.log

echo "[$time] [$user] [$cmd]" >>$logfile

然后PROMPT_COMMAND加载该脚本:

[root@m01 ~]#export PROMPT_COMMAND=". /server/script/devops-shell/audit.sh"

执行命令,查看/tmp/audit.log文件:

[root@m01 ~]#id
uid=0(root) gid=0(root) groups=0(root)
[root@m01 ~]#whoami
root
[root@m01 ~]#cat /tmp/audit.log 
[2023-07-25_22:57:41] [root] [ 1040  export PROMPT_COMMAND=". /server/script/devops-shell/audit.sh"]
[2023-07-25_22:57:43] [root] [ 1041  id]
[2023-07-25_22:57:46] [root] [ 1042  whoami]
[root@m01 ~]#

永久生效:

把export PROMPT_COMMAND=". /server/script/devops-shell/audit.sh"命令写入/etc/profile文件的末尾

存在的问题:如果用户把/tmp/audit.log删除了,就无法查看了,怎么做到用户只能追加,不能删除该文件呢?

3.2 将操作日志实时发送到备份服务器,防止本地的操作日志被删除

3.3 配置认证日志

[root@m01 ~]#cat /etc/rsyslog.conf
authpriv.*                                              /var/log/secure

3.4 ntp时间同步配置

为了保证日志记录时间的准确性,建议配置NTP服务器,并与NTP服务器时间同步

以 root 账户登录 Linux 系统
在/etc/ntp.conf 文件中配置时间服务器。
# vi /etc/ntp.conf
在配置文件末尾可见如下行:
server 127.0.0.1 local clock
fudge 127.0.0.1 stratum 10
在如上两行下添加 NTP 服务器 IP
server x.x.x.x minpoll 4 maxpoll 4
保存退出后,执行开机自启动命令。
# chkconfig xntpd on
利用 date 命令查看系统当前时间,与监控终端时间比较,若相差超过 1000s,
利用 ntpdate 命令与时间服务器强制同步。
# ntpdate x.x.x.x
配置完成后,启动 ntp 服务。
# /etc/init.d/xntpd start

3.5 配置远程日志服务器

建议系统配置远程日志功能,将需要重点关注的日志内容传输到日志服务器进行备份

4、安全环境变量

1)TMOUT

TMOUT:用户不进行任何操作,自动退出,单位是:秒

export TMOUT=3
2)HIST开头的环境变量

这些环境变量与历史命令有关

HISTSIZE:历史history记录最近多少条命令,默认1000条

HISTFILESIZE:历史命令history文件记录多少(家目录下的.bash_history),一般与HISTSIZE一致

HISTCONTROL:控制history命令何时记录,ignorespace命令以空格开头的就不会被记录。默认是ignoredups,去除重复命令。ignoreboth:结合ignoredups和ignorespace的功能

HISTFILE:指定历史命令的文件路径和文件名,默认是当前用户家目录下的.bash_history

检查:

# 使用env命令检查上述环境变量,比如:
[root@m01 ~]#env | egrep "HISTSIZE|HISTFILE"
HISTSIZE=1000
[root@m01 ~]#
3)限制root用户远程登录

在服务端的/etc/ssh/sshd_config 文件中配置:

PermitRootLogin no #注意,配置前要配置好普通用户+sudo
Port XX #修改默认的22端口
PasswordAuthentication no     //yes改为no
ChallengeResponseAuthentication no  //yes改为no
RSAAuthentication yes   //去掉前面的注释
PubkeyAuthentication yes  //去掉前面的注释
AuthorizedKeysFile .ssh/authorized_keys  //去掉前面的注释

禁止适用密码登录:

执行:客户端ssh-keygen命令,生成客户端秘钥,把id_rsa.pub公钥发送给服务端(ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@ip),默认是22端口,如果修改了端口,则:

ssh-copy-id   -i  ~/.ssh/id_rsa.pub   用户名@ip   -p   端口

-i:指定公钥文件,默认是:~/.ssh/id_rsa.pub,如果生成密钥的时候适用默认的~/.ssh/id_rsa.pub,则可以省略-i选项。写成:ssh-copy-id 用户名@ip -p 端口

如果是Windows使用Xshell,则:点击工具–>新建用户秘钥生成向导,生成公钥

用户秘钥生成:

点击下一步:

再点击下一步:

名称:可以根据实际填写,密码:可以不用设置,但为了安全,建议设置。

点击下一步:

点击:“是”:

点击“保存为文件”:

文件名:id_rsa_2048.pub,这个就是公钥。

最后,点击完成:

id_rsa_2048:这个就是私钥,可以导出来。在别的电脑,导入。

生成的秘钥对:id_rsa_2048.pub(公钥)、id_rsa_2048(私钥)

把公钥内容复制到服务端的用户家目录的.ssh/authorized_keys文件中即可。如果该文件不存在,自行创即可(要注意目录、文件的权限,.ssh目录700,文件600权限)。

然后Xshell登录的时候使用秘钥登录:

如果创建秘钥的时候没有设置密码,则密码不需要填写。

6、安全辅助工具

aide:增强版本的MD5对比工具,对比文件属性信息是否变化。yum安装即可

chkrootkit:rootkit检查工具,系统文件或命令是否改变。二进制安装。

clamav:扫描系统是否有病毒,任何地方。yum安装。

hm河马:webshell网站后门(扫描站点目录)。二进制安装

6.1 安装

安装

[root@m01 ~]#tar xf project-secure-aide-clamav-iptables-rpms.tar.gz 
[root@m01 ~]#cd project-secure-rpms/
[root@m01 ~/project-secure-rpms]#yum localinstall *.rpm

6.2 aide

1)配置

配置文件:/etc/aide.conf

分两部分:1、定义格式(监控哪些指标MD5,属性信息指标)。2、用于指定监控哪些文件或目录+格式

定义监控格式:

# These are the default rules.
#
#p:      permissions  权限
#i:      inode:        inode
#n:      number of links  硬连接数
#u:      user              用户
#g:      group             用户组
#s:      size             大小
#b:      block count       block数量
#m:      mtime             修改时间
#a:      atime             访问时间
#c:      ctime             文件属性变化时间
#S:      check for growing size
#acl:           Access Control Lists
#selinux        SELinux security context
#xattrs:        Extended file attributes
#md5:    md5 checksum
#sha1:   sha1 checksum
#sha256:        sha256 checksum
#sha512:        sha512 checksum
#rmd160: rmd160 checksum

#系统定义了一些集合(监控指标的合集):
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256
NORMAL = sha256

指定监控哪些文件或目录+格式:

格式:文件或目录   格式
例如:
/bin/              FIPSR
/sbin/             FIPSR
/usr/local/bin/    FIPSR
/usr/local/sbin/   FIPSR
/etc/              FIPSR

!/usr/local/sinb/xxx    表示排除xxx
2)使用

第一次使用,需要初始化:

[root@m01 ~]#aide --init
AIDE, version 0.15.1
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
[root@m01 ~]#

对比:

[root@m01 ~]#mv /var/lib/aide/aide.db.new.gz  /var/lib/aide/aide.db.gz

#检查
[root@m01 ~]#aide --check
AIDE, version 0.15.1
### All files match AIDE database. Looks okay!
[root@m01 ~]#

#配置或代码升级或更新
[root@m01 ~]#aide --update
[root@m01 ~]#mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

6.3 chkrootkit

rootkit 修改感染了系统的命令

软件组成:

shell脚本
c语言代码,需要执行make编译
1)安装
#安装依赖
[root@m01 ~]#tar xf chkrootkit-rpms.tar.gz 
[root@m01 ~]#cd chkrootkit-rpms/
[root@m01 ~/chkrootkit-rpms]#yum localinstall *.rpm
#解压命令
[root@m01 ~]#tar xf chkrootkit.tar.gz 
[root@m01 ~]#cd chkrootkit-0.57/
#执行make编译
[root@m01 ~/chkrootkit-0.57]#make
2)执行
[root@m01 ~/chkrootkit-0.57]#./chkrootkit
#或者
[root@m01 ~/chkrootkit-0.57]#./chkrootkit | egrep -v 'not|nothing'

6.4 clamav

官网:http://www.clamav.net/

可以通过yum安装

更新:

#1、开始定时更新
[root@m01 ~]#systemctl start clamav-freshclam.service

使用:clamscan 选项 目录

[root@m01 ~]#clamscan  -ri  /tmp/
Infected files: 0  被感染的文件个数

-r:扫描目录

-i:只有异常的时候才提示

6.5 hm河马

专门扫描webshell(网站后门),扫描站点目录

官网:https://shellpub.com/

Linux版使用教程:https://www.shellpub.com/doc/hm_linux_usage.html

1)安装
#官网下载后,解压
[root@m01 ~]#mkdir -p  /app/tools/hm
[root@m01 ~]#tar xf hm-linux-amd64.tgz -C /app/tools/hm
[root@m01 ~]#cd /app/tools/hm/
2)使用
普通扫描:
./hm scan  站点目录  
深度扫描
./hm deepscan  站点目录