linux安全_linux安全配置 - CSDN
精华内容
参与话题
  • 主要是我发生了真实的被入侵的经历,让我开始有了linux系统网络攻防的一点点意识。因此找网络上的一些内容来学习,这篇文章讲述的经历,跟我的经历有些类似,所以转载来记录下,同时学习学习。 事件原因 晚上...

    背景

    这个背景部分我改一改。主要是我发生了真实的被入侵的经历,让我开始有了linux系统网络攻防的一点点意识。因此找网络上的一些内容来学习,这篇文章讲述的经历,跟我的经历有些类似,所以转载来记录下,同时学习学习。


    事件原因

    晚上看到有台服务器流量跑的很高,明显和平常不一样,流量达到了800Mbps,第一感觉应该是中木马了,被人当做肉鸡了,在大量发包。

    我们的服务器为了最好性能,防火墙(iptables)什么的都没有开启,但是服务器前面有物理防火墙,而且机器都是做的端口映射,也不是常见的端口,按理来说应该是满安全的,可能最近和木马有缘吧,老是让我遇到,也趁这次机会把发现过程记录一下。

    发现并追踪处理

    1、查看流量图发现问题

    查看的时候网页非常卡,有的时候甚至没有响应。

    这里写图片描述

    2、top动态查看进程

    我马上远程登录出问题的服务器,远程操作很卡,网卡出去的流量非常大,通过top发现了一个异常的进程占用资源比较高,名字不仔细看还真以为是一个Web服务进程。

    这里写图片描述

    3、ps命令查看进程的路径

    发现这个程序文件在/etc目录下面,是个二进制程序,我拷贝了下来,放到了本文附近位置,以供大家在虚拟机上面研究,哈哈。

    这里写图片描述

    4、结束异常进程并继续追踪

    这里写图片描述
    干掉进程之后,流量立刻下来了,远程也不卡顿了,难道删掉程序文件,干掉异常进程我们就认为处理完成了么?想想也肯定没那么简单的,这个是木马啊,肯定还会自己生成程序文件(果然不出我所料,在我没有搞清楚之前,后面确实又生成了)我们得继续追查。

    5、查看登录记录及日志文件secure

    通过命令last查看账户登录记录,一切正常。查看系统文件message并没有发现什么,但是当我查看secure文件的时候发现有些异常,反正是和认证有关的,应该是尝试连进来控制发包?
    这里写图片描述

    6、再次ps查看进程

    其实第一次ps的时候就有这个问题,那时候没有发现,第二次是自习查看每个进程,自习寻找不太正常的进程,发现了一个奇怪的ps进程。
    这里写图片描述

    我找了一台正常的机器,查看了一下ps命令的大小,正常的大约是81KB,然后这台机器上面的ps却高达1.2M,命令文件肯定是被替换了。

    这里写图片描述

    然后进入另一个ps的目录,看到有如下几个命令,然后我有查询了一下系统的这几个命令,发现都变得很大,都达到了1.2M,这些系统命令文件肯定是都被替换了。

    这里写图片描述

    7、更多异常文件的发现

    查看定时任务文件crontab并没有发现什么一次,然后查看系统启动文件rc.local,也没有什么异常,然后进入/etc/init.d目录查看,发现比较奇怪的脚本文件DbSecuritySpt、selinux。

    这里写图片描述

    第一个文件可以看出他就是开机启动那个异常文件的,第二个应该和登录有关,具体我还不是很清楚,反正肯定是有问题的。

    这里写图片描述

    既然和登录有关,那就找和ssh相关的,找到了下面的一个文件,是隐藏文件,这个也是木马文件,我们先记录下来,这样程序名字都和我们的服务名字很相近,就是为了迷惑我们,他们的大小都是1.2M,他们有可能是一个文件。

    这里写图片描述

    我有看了一下木马喜欢出现的目录/tmp,也发现了异常文件,从名字上感觉好像是监控木马程序的。

    这里写图片描述

    想到这里,替换的命令应该很多,单靠我们去找肯定是解决不了的,我的建议最好是重装操作系统,并做好安全策略,如果不重装,我下面给一下我的方法,具体行不行有待验证。

    木马手动清除

    现在综合总结了大概步骤如下:

    1、简单判断有无木马

    这里写图片描述

    2、上传如下命令到/root下
    这里写图片描述

    3、删除如下目录及文件
    这里写图片描述

    4、找出异常程序并杀死

    这里写图片描述

    5、删除含木马命令并重新安装(或者把上传的正常程序复制过去也行)

    我自己重新安装好像不行,我是找的正常的机器复制的命令。
    这里写图片描述

    杀毒工具扫描

    1、安装杀毒工具clamav

    yum -y install clamav clamav-milter

    2、启动服务

    service clamd restart

    3、更新病毒库

    由于ClamAV不是最新版本,所以有告警信息。可以忽略或升级最新版本。

    这里写图片描述

    4、扫描方法
    这里写图片描述
    可以使用clamscan -h查看相应的帮助信息

    5、查看日志发现

    把发现的命令删掉替换正常的

    这里写图片描述

    附录:Linux.BackDoor.Gates.5

    经过查询资料,这个木马应该是Linux.BackDoor.Gates.5,找到一篇文件,内容具体如下:

    某些用户有一种根深蒂固的观念,就是目前没有能够真正威胁Linux内核操作系统的恶意软件,然而这种观念正在面临越来越多的挑战。与4月相比,2014年5月Doctor Web公司的技术人员侦测到的Linux恶意软件数量创下了新纪录,六月份这些恶意软件名单中又增加了一系列新的Linux木马,这一新木马家族被命名为Linux.BackDoor.Gates。

    在这里描述的是恶意软件家族Linux.BackDoor.Gates中的一个木马:Linux.BackDoor.Gates.5,此恶意软件结合了传统后门程序和DDoS攻击木马的功能,用于感染32位Linux版本,根据其特征可以断定,是与Linux.DnsAmp和Linux.DDoS家族木马同出于一个病毒编写者之手。新木马由两个功能模块构成:基本模块是能够执行不法分子所发指令的后门程序,第二个模块在安装过程中保存到硬盘,用于进行DDoS攻击。Linux.BackDoor.Gates.5在运行过程中收集并向不法分子转发受感染电脑的以下信息:

    • CPU核数(从/proc/cpuinfo读取)。
    • CPU速度(从/proc/cpuinfo读取)。

    • CPU使用(从/proc/stat读取)。

    • Gate’a的 IP(从/proc/net/route读取)。

    • Gate’a的MAC地址(从/proc/net/arp读取)。

    • 网络接口信息(从/proc/net/dev读取)。

    • 网络设备的MAC地址。

    • 内存(使用/proc/meminfo中的MemTotal参数)。

    • 发送和接收的数据量(从/proc/net/dev读取)。

    • 操作系统名称和版本(通过调用uname命令)。

    启动后,Linux.BackDoor.Gates.5会检查其启动文件夹的路径,根据检查得到的结果实现四种行为模式。

    如果后门程序的可执行文件的路径与netstat、lsof、ps工具的路径不一致,木马会伪装成守护程序在系统中启动,然后进行初始化,在初始化过程中解压配置文件。配置文件包含木马运行所必须的各种数据,如管理服务器IP地址和端口、后门程序安装参数等。

    根据配置文件中的g_iGatsIsFx参数值,木马或主动连接管理服务器,或等待连接:成功安装后,后门程序会检测与其连接的站点的IP地址,之后将站点作为命令服务器。

    木马在安装过程中检查文件/tmp/moni.lock,如果该文件不为空,则读取其中的数据(PID进程)并“干掉”该ID进程。然后Linux.BackDoor.Gates.5会检查系统中是否启动了DDoS模块和后门程序自有进程(如果已启动,这些进程同样会被“干掉”)。如果配置文件中设置有专门的标志g_iIsService,木马通过在文件/etc/init.d/中写入命令行#!/bin/bash\n将自己设为自启动,然后Linux.BackDoor.Gates.5创建下列符号链接:

    这里写图片描述 如果在配置文件中设置有标志g_bDoBackdoor,木马同样会试图打开/root/.profile文件,检查其进程是否有root权限。然后后门程序将自己复制到/usr/bin/bsd-port/getty中并启动。在安装的最后阶段,Linux.BackDoor.Gates.5在文件夹/usr/bin/再次创建一个副本,命名为配置文件中设置的相应名称,并取代下列工具:

    这里写图片描述

    木马以此完成安装,并开始调用基本功能。

    执行另外两种算法时木马同样会伪装成守护进程在被感染电脑启动,检查其组件是否通过读取相应的.lock文件启动(如果未启动,则启动组件),但在保存文件和注册自启动时使用不同的名称。

    与命令服务器设置连接后,Linux.BackDoor.Gates.5接收来自服务器的配置数据和僵尸电脑需完成的命令。按照不法分子的指令,木马能够实现自动更新,对指定IP地址和端口的远程站点发起或停止DDoS攻击,执行配置数据所包含的命令或通过与指定IP地址的远程站点建立连接来执行其他命令。

    此后门程序的主要DDoS攻击目标是中国的服务器,然而不法分子攻击对象也包括其他国家。下图为利用此木马进行的DDoS攻击的地理分布:

    这里写图片描述

    本文出自 “小小水滴” 博客,请务必保留此出处http://wangzan18.blog.51cto.com/8021085/1740113

    展开全文
  • Linux服务器安全加固

    万次阅读 多人点赞 2018-12-20 14:28:59
    对未经过安全认证的RPM包进行安全检查 Linux用户方面的加固 设定密码策略​ 对用户密码强度的设定 对用户的登录次数进行限制 禁止ROOT用户远程登录 设置历史命令保存条数和账户超时时间 设置只有指定用户组...

    目录

    对未经过安全认证的RPM包进行安全检查

    Linux用户方面的加固

    设定密码策略

    对用户密码强度的设定

    对用户的登录次数进行限制

    禁止ROOT用户远程登录

    设置历史命令保存条数和账户超时时间

    设置只有指定用户组才能使用su命令切换到root用户

    对Linux账户进行管理

    对重要的文件进行锁定,即使ROOT用户也无法删除

    建立日志服务器


    对未经过安全认证的RPM包进行安全检查

    rpm  -qp   xxx.rpm   --scripts     查看rpm包中的脚本信息

    Linux用户方面的加固

    设定密码策略

    修改  /etc/login.defs 配置文件

    • PASS_MAX_DAYS      90               密码最长有效期
    • PASS_MIN_DAYS       10               密码修改之间最小的天数
    • PASS_MIN_LEN          8                密码长度
    • PASS_WARN_AGE     7                 口令失效前多少天开始通知用户修改密码

    脚本实现设定密码策略

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 实现对用户密码策略的设定,如密码最长有效期等
    read -p  "设置密码最多可多少天不修改:" A
    read -p  "设置密码修改之间最小的天数:" B
    read -p  "设置密码最短的长度:" C
    read -p  "设置密码失效前多少天通知用户:" D
    sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS   '$A'' /etc/login.defs
    sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS   '$B'' /etc/login.defs
    sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN     '$C'' /etc/login.defs
    sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE   '$D'' /etc/login.defs
    echo "已设置好密码策略......"
    

    对用户密码强度的设定

    打开 /etc/pam.d/sysetm-auth 文件 ,修改如下。我们设置新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字

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

    • difok= :此选项用来定义新密码中必须要有几个字符和旧密码不同
    • minlen=:此选项用来设置新密码的最小长度
    • ucredit= :此选项用来设定新密码中可以包含的大写字母的最大数目。-1 至少一个
    • lcredit=:此选项用来设定新密码中可以包含的小写字母的最大数目
    • dcredit=:此选项用来设定新密码中可以包含的数字的最大数目 

    :这个密码强度的设定只对普通用户有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功

    脚本实现对用户密码强度的设定

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 对用户密码强度的设定,新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字
    sed -i '/pam_pwquality.so/c\password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=  difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth
    

    对用户的登录次数进行限制

    有一些攻击性的软件是专门采用暴力破解密码的形式反复进行登录尝试,对于这种情况,我们可以调整用户登录次数限制,使其密码输入3次后自动锁定,并且设置锁定时间,在锁定时间内即使密码输入正确也无法登录

    打开 /etc/pam.d/sshd  文件,在 #%PAM-1.0 的下面,加入下面的内容,表示当密码输入错误达到3次,就锁定用户150秒,如果root用户输入密码错误达到3次,锁定300秒。锁定的意思是即使密码正确了也登录不了

    auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300

    当输入3次密码错误时

    pam_tally2   查看被锁定的用户

    pam_tally2  --reset  -u  username      将被锁定的用户解锁

    脚本设置对用户的登录次数做限制

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 对用户登录输入错误密码次数做限制
    n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
    if [ $n -eq 0 ];then
    sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshd
    fi
    

    禁止ROOT用户远程登录

    禁止ROOT用户远程登录 。打开  /etc/ssh/sshd_config  

    脚本设置禁止ROOT用户远程登录

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 禁止ROOT用户远程登录
    sed -i '/PermitRootLogin/c\PermitRootLogin no'  /etc/ssh/sshd_config

    设置历史命令保存条数和账户超时时间

    设置账户保存历史命令条数,超时时间  。打开  /etc/profile ,修改如下

    使用脚本修改配置文件

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 修改配置文件,设置历史命令保存条数和账户自动注销时间
    read -p "设置历史命令保存条数:" E
    read -p "设置账户自动注销时间:" F
    sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
    sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile
    

    设置只有指定用户组才能使用su命令切换到root用户

    在linux中,有一个默认的管理组 wheel。在实际生产环境中,即使我们有系统管理员root的权限,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户,这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户。然后设置只有wheel组内的成员可以使用su命令切换到root用户。

    比如,我们将普通用户xie加入wheel组。   usermod  -G  wheel  xie 

    然后,我们修改配置文件 /etc/pam.d/su  ,将这行的注释给去掉

    然后去 /etc/login.defs 末尾加入   SU_WHEEL_ONLY yes  即可。

    当 tom 用户使用su命令切换到root用户时,会提示拒绝权限

    使用脚本设置配置文件

    #! /bin/bash
    # Author:谢公子
    # Date: 2018-10-12
    # Function: 修改配置文件,使得只有wheel组的用户可以使用 su 权限
    sed -i '/pam_wheel.so use_uid/c\auth            required        pam_wheel.so use_uid ' /etc/pam.d/su
    n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
    if [ $n -eq 0 ];then
    echo SU_WHEEL_ONLY yes >> /etc/login.defs
    fi  
    

    对Linux账户进行管理

    • 使用命令 userdel  -r 用户名  删除不必要的账号
    • 使用命令 passwd -l  用户名  锁定不必要的账号
    • 使用命令 awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd   查看具有登录权限的用户
    • 使用命令 awk -F: '($3==0)' /etc/passwd    查看UID为0的账号,UID为0的用户会自动切换到root用户,所以危害很大
    • 使用命令 awk -F: '($2=="")' /etc/shadow   查看空口令账号,如果存在空口令用户的话必须设置密码 

    使用脚本对账户进行管理

    #! /bin/bash
    # Author:谢公子
    # Date:2018-10-11
    # Function: 对系统中的用户做检查,加固系统
    echo "系统中有登录权限的用户有:"
    awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
    echo "********************************************"
    echo "系统中UID=0的用户有:"
    awk -F: '($3=="0"){print $1}' /etc/passwd
    echo "********************************************"
    N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
    echo "系统中空密码用户有:$N"
    if [ $N -eq 0 ];then
     echo "恭喜你,系统中无空密码用户!!"
     echo "********************************************"
    else
     i=1
     while [ $N -gt 0 ]
     do
        None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
        echo "------------------------"
        echo $None
        echo "必须为空用户设置密码!!"
        passwd $None
        let N--
     done
     M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
     if [ $M -eq 0 ];then
      echo "恭喜,系统中已经没有空密码用户了!"
     else
    echo "系统中还存在空密码用户:$M"
     fi
    fi
    
    

    对重要的文件进行锁定,即使ROOT用户也无法删除

    chattr    改变文件或目录的扩展属性

    lsattr    查看文件目录的扩展属性

    chattr  +i  /etc/passwd /etc/shadow                 //增加属性
    chattr  -i  /etc/passwd /etc/shadow                 //移除属性  
    lsattr  /etc/passwd /etc/shadow

    使用脚本对重要文件进行锁定

    #! /bin/bash
    # Author: 谢公子
    # Date:2018-10-10
    # Function: 锁定创建用户和组的文件,使之无法对用户和组进行操作!
    read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" i
    case $i in
          [Y,y])
                chattr +i /etc/passwd
                chattr +i /etc/shadow
                chattr +i /etc/group
                chattr +i /etc/gshadow
                echo "锁定成功!"
    ;;
          [N,n])
                chattr -i /etc/passwd
                chattr -i /etc/shadow
                chattr -i /etc/group
                chattr -i /etc/gshadow
                echo "取消锁定成功!!"
    ;;
           *)
                echo "请输入Y/y or  N/n"
    esac
    

    一个脚本对上面所有的合并了

    #! /bin/bash
    # Author:谢公子
    # Date:2018-10-11
    # Function:对账户的密码的一些加固
    read -p  "设置密码最多可多少天不修改:" A
    read -p  "设置密码修改之间最小的天数:" B
    read -p  "设置密码最短的长度:" C
    read -p  "设置密码失效前多少天通知用户:" D
    sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS   '$A'' /etc/login.defs
    sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS   '$B'' /etc/login.defs
    sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN     '$C'' /etc/login.defs
    sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE    '$D'' /etc/login.defs
    
    echo "已对密码进行加固,新用户不得和旧密码相同,且新密码必须同时包含数字、小写字母,大写字母!!"
    sed -i '/pam_pwquality.so/c\password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=  difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1' /etc/pam.d/system-auth
    
    echo "已对密码进行加固,如果输入错误密码超过3次,则锁定账户!!"
    n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
    if [ $n -eq 0 ];then
    sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300' /etc/pam.d/sshd
    fi
    
    echo  "已设置禁止root用户远程登录!!"
    sed -i '/PermitRootLogin/c\PermitRootLogin no'  /etc/ssh/sshd_config
    
    read -p "设置历史命令保存条数:" E
    read -p "设置账户自动注销时间:" F
    sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
    sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile
    
    echo "已设置只允许wheel组的用户可以使用su命令切换到root用户!"
    sed -i '/pam_wheel.so use_uid/c\auth            required        pam_wheel.so use_uid ' /etc/pam.d/su
    n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
    if [ $n -eq 0 ];then
    echo SU_WHEEL_ONLY yes >> /etc/login.defs
    fi
    
    echo "即将对系统中的账户进行检查...."
    echo "系统中有登录权限的用户有:"
    awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
    echo "********************************************"
    echo "系统中UID=0的用户有:"
    awk -F: '($3=="0"){print $1}' /etc/passwd
    echo "********************************************"
    N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
    echo "系统中空密码用户有:$N"
    if [ $N -eq 0 ];then
     echo "恭喜你,系统中无空密码用户!!"
     echo "********************************************"
    else
     i=1
     while [ $N -gt 0 ]
     do
        None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
        echo "------------------------"
        echo $None
        echo "必须为空用户设置密码!!"
        passwd $None
        let N--
     done
     M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
     if [ $M -eq 0 ];then
      echo "恭喜,系统中已经没有空密码用户了!"
     else
    echo "系统中还存在空密码用户:$M"
     fi
    fi
    
    echo "即将对系统中重要文件进行锁定,锁定后将无法添加删除用户和组"
    read -p "警告:此脚本运行后将无法添加删除用户和组!!确定输入Y,取消输入N;Y/N:" i
    case $i in
          [Y,y])
                chattr +i /etc/passwd
                chattr +i /etc/shadow
                chattr +i /etc/group
                chattr +i /etc/gshadow
                echo "锁定成功!"
    ;;
          [N,n])
                chattr -i /etc/passwd
                chattr -i /etc/shadow
                chattr -i /etc/group
                chattr -i /etc/gshadow
                echo "取消锁定成功!!"
    ;;
           *)
                echo "请输入Y/y or  N/n"
    esac
    

    建立日志服务器

    日志服务器的好处在于,每个工作服务器将自己的日志信息发送给日志服务器进行集中管理,即使有人入侵了服务器并将自己的登录信息悄悄删除,但由于日志信息实时与日志服务器同步,保证了日志的完整性。以备工作人员根据日志服务器信息对服务器安全进行评测。

    客户端的配置:

    打开 /etc/rsyslog.conf 配置文件

    你想把哪种类型的日志文件发送给服务端,你就把他原来的对应的目录改成: @192.168.10.20

    如果你想吧所有的日志文件都发送给服务器的话,你可以在文件最后加上: *.*  @@192.168.10.20:514

    然后重启rsyslog服务: systemctl  restart  rsyslog

    服务器端的配置:

    打开 /etc/rsyslog.conf 配置文件,将这里的注释给去掉

    然后重启rsyslog服务:systemctl  restart  rsyslog

    开启防火墙: firewall-cmd  --add-port=514/tcp

    这样客户端的相应的日志文件就会保存在服务器端的相应的文件中。

     

    展开全文
  • 演练检查项(针对Linux) 2.1)黑客入侵 当发生黑客入侵、系统崩溃,网页篡改,主机宕机或其它影响业务正常运行的安全事件时,急需第一时间响应处理,第一时间应急响应切断危害,及时确保业务系统在最...

    项目背景

    因适逢国家重大节日,诸如即将到来的70周年国庆阅兵,企业要求对公司各业务进行攻防演练,自查自纠,确保重保期间业务正常运转;各部门需要提前进行安全演练,加强和锻炼网络安全防控意识和应急处置能力。

    Linux集中常见的安全事件:
    在这里插入图片描述
    在这里插入图片描述

    演练检查项(针对Linux)

    2.1)黑客入侵

    当发生黑客入侵、DDOS攻击、系统崩溃,网页篡改,主机宕机或其它影响业务正常运行的安全事件时,急需第一时间响应处理,第一时间应急响应切断危害,及时确保业务系统在最短时间内恢复正常,备份相关入侵记录文件以待进一步查证入侵事件,还原入侵事故经过,同时出具解决方案与整改措施,避免同类事故发生。

    2.1.1)排查账号异常

    1、检查用户信息文件,确保无新建用户,无特权用户:
    /etc/passwd、/etc/shadow,/etc/group 、/etc/gshadow
    格式1:用户名:密码:用户ID:组ID:用户说明:家目录:登陆之后shell
    格式2:用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留
    1>查询特权用户特权用户(uid 为 0):
    awk -F: ‘$3==0{print $1}’ /etc/passwd ##默认只有root

    在这里插入图片描述
    awk -F: ‘$3==0 {print1}’ /etc/passwd
    查看空口令:awk -F: ‘length(2)==0 {print1}’ /etc/shadow
    2>查询可以远程登录的帐号,即/bin/shell:awk '/$1|$6/{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲' /etc/shadow …" | grep “ALL=(ALL)”
    4>禁用或删除多余及可疑的帐号:
    usermod -L user ###禁用帐号,帐号无法登录,验证:/etc/shadow 第二栏为 ! 开头
    userdel user ###删除 user 用户
    userdel -r user 将删除user用户,且将/home目录下的user家目录一并删除

    2、检查当前及历史用户登录情况:
    who、whoami,last,lastb,cat .bash_history >> history.txt,lastlog

    查看机器所有用户的连接时间(小时),对应日志文件“/var/log/wtmp”:ac -dp

    2.1.2)系统异常排查

    3、检查当前主机系统负载:
    w、top、uptime
    4、查看异常进程的端口:
    ss -antlp|less ##分析可疑端口、IP、PID
    如果发现异常,用以下命令查看下pid所对应的进程文件路径,
    ls -l /proc/PID/exefile/proc/PID/exe 或 file /proc/PID/exe($PID 为对应的 pid 号)
    ps aux | grep pid ##分析异常进行,关联的子进程或线程
    killall -9 可疑进程 ###杀掉所有可疑进程的关联进程/线程;
    5、启动项配置文件查看是否异常:
    more /etc/rc.local /etc/rc.d/rc[0~6].d
    ls -l /etc/rc.d/rc3.d/
    查看系统启动文件rc.local和/etc/init.d有无异常脚本文件;
    或进去/etc/init.d/删除异常开机文件
    6、查看异常计划任务执行:
    crontab -l
    crontab -e ##进去删除异常的任务
    more /etc/cron.daily/* 查看目录下文件
    ps aux | grep crond
    7、查看系统脚本异常:
    查看以下目录下脚本文件的修改时间和最近访问时间:
    var/spool/cron/* /etc/crontab /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/ /etc/anacrontab /var/spool/anacron/*
    如果有异常,备份后删除,从之前备份的文件中恢复这些目录下异常项
    8、服务查看:
    chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
    9、查看日志:
    入侵者可能会删除机器的日志信息,可以查看日志信息是否还存在或者是否被清空
    more /etc/rsyslog.conf
    ll -h /var/log/*
    du -sh /var/log/*
    cat /var/log/secure | grep -i “accepted password” ##尝试发现入侵者的信息

    1、定位有多少IP在爆破主机的 root 帐号:

    grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    

    定位有哪些 IP 在爆破:

    grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
    

    爆破用户名字典是什么?

    grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
    

    登录成功的 IP 有哪些:

    grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
    

    登录成功的日期、用户名、IP:

    grep "Accepted " /var/log/secure | awk ‘{print $1,$2,$3,$9,$11}’
    10、查看sudo
    visudo
    sudo -l
    11、异常文件查看:
    find . -name “muma.php” -type f -mtime -5 -exec ls -l {} ; ##如果怀疑muma.php
    find常用:
    find /home -size +512k; #查大于512k的文件
    find /home -size -512k; #查小于512k的文件
    find /home -mtime -2; # 在/home下查最近两天内改动过的文件
    find /home -atime -1; # 查1天之内被存取过的文件
    find /home -mmin +60; # 在/home下查60分钟前改动过的文件
    find /home -amin +30; # 查最近30分钟前被存取过的文件
    find /home -newer tmp.txt; # 在/home下查更新时间比tmp.txt近的文件或目录
    find /home -anewer tmp.txt; # 在/home下查存取时间比tmp.txt近的文件或目录

    ls -lc filename 列出文件的创建时间
    注意:ctime 是在写入文件、更改所有者、权限或链接设置时随Inode的内容更改而更改的时间。
    ls -l filename 列出文件的修改时间;
    注意:mtime 是在写入文件时随文件内容的更改而更改的时间。如果ctime和mtime不一致时有可能是木马文件,黑客有可能会修改了mtime时间。

    确认后删除木马文件:
    find . -name “muma.php” -type f -mtime -5 -size -5k -exec rm -rf {} ;

    查找目录下文件内容包含木马特定字符串(比如YLb)的文件列表,并删除处理:
    #查找文件,并显示文件的ctime时间,比对文件信息
    find . -name “.php" -exec grep -rl “YLb” {} ; -exec ls -lc {} ;
    #确认没有问题后,删除掉
    find . -name "
    .php” -exec grep -rl “YLb” {} ; -exec rm -rfv {} ;
    如果杀不了,查看以下文件:
    /usr/bin/killall
    /usr/bin/wget
    另外:木马也喜欢出现的目录/tmp,查看其下是否有异常文件;
    12:查看cat /etc/resolv.conf,如果网页恶意重定向
    13、安装杀毒软件:
    yum -y install clamav*
    service clamd restart启动
    freshclam ##更新病毒库
    扫描方法:
    clamscan -r /etc –max-dir-recursion=5 -l /root/etcclamav.log
    clamscan -r /bin –max-dir-recursion=5 -l /root/binclamav.log
    clamscan -r /usr –max-dir-recursion=5 -l /root/usrclamav.log
    clamscan -r –remove /bin/
    clamscan -r –remove /usr/bin/
    14、查看常用运维排查软件:
    ps,ps,netstat,lsof等命令是否异常;如果ps命令,ls命令执行无输出,就该警惕被病毒感染替换为虚假命令工具;
    /root/chattr -i -a /bin/ps && rm /bin/ps -f #删除这些可能被感染的命令,比如ps,ls,netstat,lsof,top等。可以通过ls -lh /bin/ps 查看这些命令的大小和正常程序是否一致;如果被感染,可去一个相同操作系统的的ps,ls, netstat,lsof命令,将这些命令复制到被感染的系统中,临时使用。
    15、查看异常进程
    top #仔细检查异常进程pid
    ls -l /proc/pid/exe 查看异常进程命令所在地
    若发现异常进程,可在虚拟文件系统目录查找该进程的可执行文件:
    ll /proc/1850/ | grep -i exe ##1850是进程的pid
    16、对关键目录加锁,降低危害:
    chmod 000 /usr/bin/可疑文件
    chattr +i /usr/bin
    chattr +i /bin
    chattr +i /tmp
    17、linux查找被入侵后留下的后门文件

    找/opt/下的所有jsp,拷贝到/dir(提前创建隔离目录)
    linux下:find /opt -name *.jsp | xargs cp -a --target-directory=/dir/ --parents
    或:find . -name *.jsp|xargs cp -a --target-directory=/dir/ --parents

    18、流量异常:
    如果发现机器产生了异常流量,可以使用命令“tcpdump”抓取网络包查看流量情况或者使用工具”iperf”查看流量情况
    19、原理介绍:
    如果确认机器已经被入侵,重要文件已经被删除,可以尝试找回被删除的文件

    1>当进程打开了某个文件时,只要该进程保持打开该文件,即使将其删除,它依然存在于磁盘中。这意味着,进程并不知道文件已经被删除,它仍然可以向打开该文件时提供给它的文件描述符进行读取和写入。除了该进程之外,这个文件是不可见的,因为已经删除了其相应的目录索引节点。

    2>在/proc 目录下,其中包含了反映内核和进程树的各种文件。/proc目录挂载的是在内存中所映射的一块区域,所以这些文件和目录并不存在于磁盘中,因此当我们对这些文件进行读取和写入时,实际上是在从内存中获取相关信息。大多数与 lsof 相关的信息都存储于以进程的 PID 命名的目录中,即 /proc/1234 中包含的是 PID 为 1234 的进程的信息。每个进程目录中存在着各种文件,它们可以使得应用程序简单地了解进程的内存空间、文件描述符列表、指向磁盘上的文件的符号链接和其他系统信息。lsof 程序使用该信息和其他关于内核内部状态的信息来产生其输出。所以lsof 可以显示进程的文件描述符和相关的文件名等信息。也就是我们通过访问进程的文件描述符可以找到该文件的相关信息。

    3>当系统中的某个文件被意外地删除了,只要这个时候系统中还有进程正在访问该文件,那么我们就可以通过lsof从/proc目录下恢复该文件的内容。
    假设/var/log/secure文件被删除,用lsof命令查看当前是否有进程打开/var/log/secure,执行:lsof | grep /var/log/secure
    结果示例:
    rsyslogd 1264 root 4w REG 8,1 3173904 263917 /var/log/secure (deleted) ##其中4w的4表示:文件描述符未4

    然后:在/proc/1264/fd/4(fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息来确认:tail -f /proc/1264/fd/4

    20、安全建议:

    1)密码文件安全:

    /etc/hosts.deny 和/etc/hosts.allow利用这2个文件建立白名单,控制主机访问;
    或利用iptables规则;

    对/etc/passwd、/etc/group、/etc/sudoers、/etc/shadow等用户信息文件进行加锁(chattr +ai),验证lsattr,一切非必要用户登录权限均设为/sbin/nologin

    禁ping设置:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

    紧急临时账户锁定:passwd -l 异常账户 ##-u解锁,对应-L锁定需要-U解锁

    2)密码安全控制

    设置密码有效期和复杂度

    对新建用户,编辑/etc/login.defs,新增PASS MAX DAYS 30
    对老用户,chage -M 30 zabbix;修改已存在用户zabbix的密码有效期为30天
    chage -d 0 zabbix //强制zabbix用户下次登录时必须更改密码

    3)历史命令记录

    减少历史命令记录条数,注销时自动清空命令历史

    编辑/etc/profile,修改HISTSIZE=5参数值,这里配置为5条或export HISTSIZE=5;

    同上修改/etc/profile,修改TMOUT=100参数,即让系统终端闲置100s后自动注销;如果针对单个特定用户来进行,只需修改该用户下的.bash_profile的TMOUT=100参数。

    4)限制su命令使用和sudo权限
    将允许使用su命令的用户加入wheel组,启用pam_wheel模块;su的操作记录在/var/log/secure日志里;编辑/etc/login.defs,文末添加SU_WHEEL_ONLY yes

    注:PAM认证一般遵循顺序:service—>pam配置文件—>pam_*.so;pam认证首先要确定当前求情的事哪一项服务,后加载响应的pam配置文件(位于/etc/pam.d/),找到后调用认证文件(/lib/security/)来安全认证;

    pam常见4种控制类型:验证开始----->required—>requisite—>sufficient—>optional—>验证结束

    sudo权限限制visudo或vim /etc/sudoers,记录格式:用户 主机名列表 = 命令程序列表

    sudo默认日志/var/log/sudo;

    5)禁止root从其他终端登录,只能从安全终端登录
    编辑/etc/securetty,只保留tty1为安全终端,其他注释掉。

    6)临时禁止普通用户登录
    1.建立/etc/nologin文件,这样当普通用户登录时,login程序会检查/etc/nologin文件是否存在,如存在就拒绝普通用户登录系统,root不受此限制。

    ……未完待整理

    展开全文
  • Linux系统安全基础知识

    千次阅读 2019-02-17 11:11:21
    Linux系统安全基础知识
                   

    基本的系统安全
    物理安全和登录安全
    禁用root登录和sudo
    可插拔认证模块(PAM)
    基于PAM的口令安全和口令策略
    基于PAM的访问控制


    1、基本的系统安全

    安全的磁盘布局
    使用挂装选项提高文件系统的安全性
    查找并取消文件/目录的非必要的特殊权限
    避免安装不必要的软件包
    配置软件包更新的Email通知
    关闭不必要的服务
    关闭IPv6的内核功能


    1) 、安全的磁盘布局

    1、如果是新安装系统,对磁盘分区应考虑安全性: 
    1)根目录(/)中必须包括 /etc、/lib、/bin、/sbin,即不能在此四个目录上使用独立的分区或逻辑卷
    2)除了 根目录(/)、/boot 和 SWAP 之外您应该根据自己的需要尽量分离数据到不同的分区或逻辑卷
         即根目录(/)、用户目录(/home)、临时目录(/tmp)和/var目录应分开到不同的磁盘分区; 
       
    3)建议创建独立的 /usr、/var、/tmp、/var/tmp 文件系统
    4)根据日志管理需要,您可能应该创建独立的 /var/log、/var/log/audit 文件系统
    5)若所有普通用户数据存储在本机,您还应该创建独立的 /home 文件系统
    6)若系统对外提供大量服务(如Web虚拟主机等),应该创建独立的 /srv 文件系统

    以上各目录所在分区的磁盘空间大小应充分考虑,避免因某些原因造成分区空间用完而导致系统崩溃;  


    2 )、提高文件系统的安全性


    常用如下三个挂装参数提高文件系统的安全性
    noexec:不允许在本分区上执行二进制程序,即防止执行二进制程序但允许脚本执行
    nodev:不解释本分区上的字符或块设备,即防止用户使用设备文件
    nosuid:不允许在本分区上执行 SUID/SGID 的访问
    例如:


    3 )、去除非必要的特殊权限

    1)查找系统中权限为SUID/SGID 的文件:# find / -xdev perm4000operm2000 −perm−4000−o−perm−2000 -ls

    3)使用 chmod命令修改权限:#chmodo-w  

    4)使用 chown命令修改文件属主或组:#chownUSER:GROUP 


    5 )、避免安装不必要的软件包

    在安装过程中仅仅安装必要的软件包,使用如下命令查找、删除不必要的软件包:

    # yum list installed

    # yum remove PackageName

    通常服务器无需运行X系统,尤其是被托管的服务器。在系统运行过程中,可以安装需要的软件包:

    # yum install PackageName

    6 )、软件包的更新

    保持系统中软件包的更新极为重要,当软件的编制者发现软件的漏洞之后将对其进行修复,修复后的软件包就会发布到相应的yum仓库中
    软件包的更新的方法:
        1)启用 yum-updated       2)服务编写 cron 脚本

    7 ) 、关闭不必要的服务

    cd /etc/init.d #进入到系统init进程启动目录
    在这里有两个方法,可以关闭init目录下的服务,

    一、将init目录下的文件名mv成*.old类的文件名,即修改文件名,作用就是在系统启动的时候找不到这个服务的启动文件。

    二、使用chkconfig系统命令来关闭系统启动等级的服务。

    注:在使用以下任何一种方法时,请先检查需要关闭的服务是否是本服务器特别需要启动支持的服务,以防关闭正常使用的服务。



    使用chkcofig命令来关闭不使用的系统服务 (level前面为2个减号)要想在修改启动脚本前了解有多少服务正在运行,输入:

    ps aux | wc -l

    然后修改启动脚本后,重启系统,再次输入上面的命令,就可计算出减少了多少项服务。越少服务在运行,安全性就越好。另外运行以下命令可以了解还有多少服务在运行:

    netstat -na --ip

    批量方式先停止服务


    批量方式先停止服务

    for i in acpid anacron apmd atd auditd autofs avahi-daemon avahi-dnsconfd bluetooth cpuspeed cups dhcpd firstboot gpm haldaemon hidd ip6tables ipsec isdn kudzu lpd mcstrans messagebus microcode_ctl netfs nfs nfslock nscd pcscd portmap readahead_early restorecond rpcgssd rpcidmapd rstatd sendmai
    l setroubleshoot snmpd sysstat xfs xinetd yppasswdd ypserv yum-updatesd ;do service $i stop;done

    关闭启动服务

    for i in acpid anacron apmd atd auditd autofs avahi-daemon avahi-dnsconfd bluetooth cpuspeed cups dhcpd firstboot gpm haldaemon hidd ip6tables ipsec isdn kudzu lpd mcstrans messagebus microcode_ctl netfs nfs nfslock nscd pcscd portmap readahead_early restorecond rpcgssd rpcidmapd rstatd sendmai
    l setroubleshoot snmpd sysstat xfs xinetd yppasswdd ypserv yum-updatesd ;do chkconfig $i off;done

    以下为手动方式及解释,执行批量方式后不需再执行了

    chkconfig --level 345 apmd off ##笔记本需要chkconfig --level 345 netfs off ## nfs客户端chkconfig --level 345 yppasswdd off ## NIS服务器,此服务漏洞很多chkconfig --level 345 ypserv off ## NIS服务器,此服务漏洞很多chkconfig --level 345 dhcpd off ## dhcp服务chkconfig --level 345 portmap off ##运行rpc(111端口)服务必需chkconfig --level 345 lpd off ##打印服务chkconfig --level 345 nfs off ## NFS服务器,漏洞极多chkconfig --level 345 sendmail off ##邮件服务, 漏洞极多chkconfig --level 345 snmpd off ## SNMP,远程用户能从中获得许多系统信息chkconfig --level 345 rstatd off ##避免运行r服务,远程用户可以从中获取很多信息chkconfig --level 345 atd off ##和cron很相似的定时运行程序的服务注:以上chkcofig 命令中的3和5是系统启动的类型,以下为数字代表意思0:开机(请不要切换到此等级)1:单人使用者模式的文字界面2:多人使用者模式的文字界面,不具有网络档案系统(NFS)功能3:多人使用者模式的文字界面,具有网络档案系统(NFS)功能4:某些发行版的linux使用此等级进入x windows system5:某些发行版的linux使用此等级进入x windows system6:重新启动

    如果不指定--level 单用on和off开关,系统默认只对运行级3,4,5有效

    chkconfig cups off #打印机chkconfig bluetooth off # 蓝牙chkconfig hidd off # 蓝牙chkconfig ip6tables off # ipv6chkconfig ipsec off # vpnchkconfig auditd off #用户空间监控程序chkconfig autofs off #光盘软盘硬盘等自动加载服务chkconfig avahi-daemon off #主要用于Zero Configuration Networking ,一般没什么用建议关闭chkconfig avahi-dnsconfd off #主要用于Zero Configuration Networking ,同上,建议关闭chkconfig cpuspeed off #动态调整CPU频率的进程,在服务器系统中这个进程建议关闭chkconfig isdn off #isdnchkconfig kudzu off #硬件自动监测服务chkconfig nfslock off #NFS文档锁定功能。文档共享支持,无需的能够关了chkconfig nscd off #负责密码和组的查询,在有NIS服务时需要chkconfig pcscd off #智能卡支持,,如果没有可以关了chkconfig yum-updatesd off #yum更新chkconfig acpid offchkconfig autofs offchkconfig firstboot offchkconfig mcstrans off #selinuxchkconfig microcode_ctl offchkconfig rpcgssd offchkconfig rpcidmapd offchkconfig setroubleshoot offchkconfig xfs offchkconfig xinetd offchkconfig messagebus offchkconfig gpm off #鼠标chkconfig restorecond off #selinuxchkconfig haldaemon offchkconfig sysstat offchkconfig readahead_early offchkconfig anacron off

    需要保留的服务

    crond , irqbalance , microcode_ctl ,network , sshd ,syslog

    因为有些服务已运行,所以设置完后需重启

    chkconfig/*

    语法:chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]

    补充说明:这是Red Hat公司遵循GPL规则所开发的程序,它可查询操作系统在每一个执行等级中会执行哪些系统服务,其中包括各类常驻服务。

    参数:

     --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。 --del  删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。 --level<等级代号>  指定读系统服务要在哪一个执行等级中开启或关毕*/






    1)使用 ntsysv 或 chkconfig 管理工具,可以编写自己的脚本文件关闭不必要的服务:
    #!/bin/bash
    # /root/bin/stop_services.sh
    # 请将要停止的服务以空格间隔写入变量stop_services
    stop_services="bluetooth hidd irqbalance rawdevices "
    for i in $stop_services; do
    echo "disabling $i"
    chkconfig $i off
    done




    8 ) 、关闭IPv6的内核功能

    # echo 'install ipv6 /bin/true' >> /etc/modprobe.conf


    # echo <<_END_>> /etc/sysconfig/network
    NETWORKING_IPV6=no
    IPV6INIT=no
    _END_


    # service network restart
    # chkconfig ip6tables off
    # service ip6tables stop

    2、物理安全和登录安全

    配置GRUB的口令
    为单用户模式启用认证
    禁用重启热键
    为单用户模式启用认证
    禁用启动时的交互热键
    设置屏幕锁定
    为 BASH 设置超时自动注销

    一、配置GRUB的口令

    1)生成 GRUB 口令:

    GRUB可以允许用户绕过所有的安全验证而进入单用户模式。管理员应该设置GRUB口令避免修改启动参数从而提供安全性。
    为GRUB生成MD5口令:
    # grub-md5-crypt
    Password:<ENTER-YOUR-PASSWORD>
    Retype password:<ENTER-YOUR-PASSWORD>
    $1$WqFGw/$hkFDqkoGxqescpPKVt8/I1

    2)启用GRUB配置文件的口令

    修改启动参数时需要口令验证
    passwd 配置语句位于全局部分(第一个“title”之前)

    default=0
    timeout=5
    splashimage=(hd0,0)/grub/splash.xpm.gz
    hiddenmenu
    password --md5 $1$WqFGw/$hkFDqkoGxqescpPKVt8/I1   # 添加此行

    进入所选择的系统前需要口令验证,passwd 配置语句位于引导参数部分(每个“title”部分之后)

    title CentOS (2.6.18-194.32.1.el5)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.18-194.32.1.el5 ro root=LABEL=/
        initrd /boot/initrd-2.6.18-194.32.1.el5.img
        password --md5 $1$WqFGw/$hkFDqkoGxqescpPKVt8/I1   # 添加此行

    二、为单用户模式启用认证

    在 RHEL/CentOS 中默认情况下进入单用户模式无需认证。为了提高安全性启用单用户模式的用户认证

    # echo “~~:S:wait:/sbin/sulogin”>> /etc/inittab

    # init q

    三、禁用重启热键

    在 RHEL/CentOS 中默认情况下可以通过键盘热键 <Ctrl>+<Alt>+<Delete> 重启系统。为了提高安全性禁用重启热键
    # vi /etc/inittab
    注释如下的行:
    #ca::ctrlaltdel:/sbin/shutdown -t3 -r now

    # init q


    四、为单用户模式启用认证


    五、禁用启动时的交互热键

    RHEL/CentOS 允许控制台用户在启动过程中通过热键“i”执行交互式启动设置。
    为了提高安全性,禁用启动时的交互热键


    # sed -i "s/PROMPT=yes/PROMPT=no/" /etc/sysconfig/init

    六、设置屏幕锁定

    安装vlock包
    # yum -y install vlock
    使用vlock命令锁定屏幕。 锁定当前屏幕:
    $ vlock
    锁定所有已登录的终端会话并禁止虚拟控制台切换:
    $ vlock -a

    七、为BASH设置超时自动注销帐号


            自动注销帐号的登录,在Linux系统中root账户是具有最高特权的。如果系统管理员在离开系统之前忘记注销root账户,那将会带来很大的安全隐患,应该让系统会自动注销。通过修改账户中“TMOUT”参数,可以实现此功能。TMOUT按秒计算。编辑你的profile文件(vi /etc/profile),在"HISTSIZE="后面加入下面这行:

    TMOUT=300

    300,表示300秒,也就是表示5分钟。这样,如果系统中登陆的用户在5分钟内都没有动作,那么系统会自动注销这个账户。 




    # vi /etc/profile.d/autologout.sh
    TMOUT=300  # 5分钟后超时
    readonly TMOUT
    export TMOUT

    # chmod +x /etc/profile.d/autologout.sh






    3、账号安全问题,禁用root登录和sudo

    一、sudo简介

    1)sudo 允许授权用户以超级用户或其他用户身份执行命令
           sudo 能限制指定用户在指定主机上运行某些命令
           默认情况下,只有root用户可以使用sudo命令
    2)sudo  使用普通用户自己的口令
          sudo 是设置了SUID权限位的执行文件
    3)sudo 使用时间戳文件来完成类似“检票”的系统
          当用户执行 sudo 时,5分钟 内不用再输入口令
    4)记录所有登录(包括成功的和不成功的登录)
    /var/log/secure

    二、与sudo相关的文件

    1)/usr/bin/sudo:以其他用户身份执行命令
    2)/etc/sudoers:sudo的配置文件。
          列出哪(些)个用户在哪个(些)主机上执行哪个(些)命令
    3)/usr/sbin/visudo:用于编辑 sudoers 文件
          防止两个用户同时进行修改
        进行有限的语法检查
    4)/var/run/sudo/目录:包含用户的时间戳文件

    三、sudo的执行过程 


    在 /var/run/sudo/$USER目录中查找时间戳文件
            1)若时间戳已过期,提示用户输入自己的口令
                   若口令输入错误则退出 sudo 的执行
                   若口令输入正确则继续 sudo 的执行过程
            2)若时间戳未过期,继续 sudo 的执行过程
    读取配置文件 /etc/sudoers,判断用户是否具有执行此 sudo 命令的权限
           1)若有权限执行则执行 sudo 后面的命令
            2)若无权执行则退出 sudo 的执行


    四、快速配置sudo


    将所有需要使用sudo的普通用户添加到 wheel组中
    # usermod -G wheel  osmond
    # usermod -G wheel  jason

    配置允许wheel组可以执行sudo命令
    # visudo
    // 删除如下行的注释符,之后保存退出
    %wheel        ALL=(ALL)       ALL

    五、su与sudo比较
    su
    直接切换为超级用户
    普通用户要切换为超级用户必须知道超级用户的口令
    适用于系统中只有单个系统管理员的情况
    sudo
    直接使用 sudo 命令前缀执行系统管理命令
    执行系统管理命令时无需知道超级用户的口令
    适用于系统中有多个系统管理员的情况
    允许 root 为几个用户或组委派权利,使之能运行部分或全部由 root (或另一个)用户执行的命令
    sudo 设计者的宗旨:给用户尽可能少的权限但仍允许完成他们的工作
    当然系统只有单个系统管理员时也可以使用

    六、/etc/sudoers 的配置语法


    1)(Runas)部分可以省略,省略时表示(root)
    2)四个部分均可设置多个项目,每个项目用逗号间隔。
    3)在User部分使用“%组名”的形式为组中的所有用户授权。
    在Cmnd部分
         使用NOPASSWD:前缀参数,表示不用输入口令即可执行Cmnd。
          使用 ! 前缀表示逻辑非。使用Shell通配符 匹配可以执行的命令。
    4)ALL表示所有。以#开始的行为注释行。行末的\为续行符。

    5)定义四种别名
    User_Alias
    Host_Alias
    Runas_Alias
    Cmnd_Alias

    6)语法
    User_Alias     USER_ALIAS_NAME = user1, user2, ......
    Host_Alias     HOST_ALIAS_NAME = host1, host2, ......
    Runas_Alias  RUNAS_ALIAS_NAME = runas1, runas2, ......
    Cmnd_Alias   COMMAND_ALIAS_NAME = cmnd1, cmnd2, ......
    6)使用别名简化授权


    7)/etc/sudoers 的配置举例1:
    专职系统管理员(millert,mikef和dowdy)可以在任何主机上以root用户身份执行任何命令而不需要进行身份验证。

    User_AliasFULLTIMERS =millert,mikef,dowdy

    FULLTIMERSALL = NOPASSWD: ALL


    8)/etc/sudoers的配置举例2

    兼职管理员(jalala, sonar和huge)可以在任何主机上以root用户身份运行别名BROWSE、PROCESSES、USERS 中定义的命令,同时可以修改除了root 用户之外的所有用户口令。

    User_Alias       PARTTIMERS2 = jalala,sonar , huge

    Cmnd_Alias      BROWSE = /bin/ls,/bin/cd,/bin/cat

    Cmnd_Alias      PROCESSES = /bin/nice, /bin/kill, /usr/bin/killall

    Cmnd_Alias      USERS = /usr/sbin/useradd [A-z]*,/usr/sbin/userdel -r[A-z]*

    PARTTIMERS2  ALL= USERS,PROCESSES,BROWSE, /usr/bin/passwd [A-z]*!/usr/bin/passwd root

    七、sudo命令


    n-H : 将环境变量中的$HOME指定为要变更身份的使用者的目录(如不加-u参数就是/root)。
    n-b : 在后台执行指令。
    n-u username|#uid:以指定的用户作为新的身份。省略此参数表示以root的身份执行指令。
    n-i : 模拟一个新用户身份的初始Shell。
    n-s : 执行环境变量$SHELL所指定的Shell,或是/etc/passwd里所指定的Shell。

    sudo命令举例:

    n查看当前用户可以使用sudo执行的命令列表

    sudo -l

    n进入交互式( interactively)登录,类似“su-”

    sudo -i

    n直接执行授权的命令

    sudo/usr/sbin/useradd otheruser

    sudo/usr/bin/passwdotheruser

    sudosh -c "cd /home ; du -s * |sort -rn > USAGE"


    五、限制su命令

     如果您不想任何人能够su作为root,可以编辑/etc/pam.d/su文件,增加如下两行: 
      auth sufficient /lib/security/pam_rootok.so debug 
      auth required /lib/security/pam_wheel.so group=isd 
     这时,仅isd组的用户可以su作为root。此后,如果您希望用户admin能够su作为root,可以运行如下命令: 
      # usermod -G10 admin 

    六、修改ssh服务的登录权限

    修改ssh服务配置文件,使的ssh服务不允许直接使用root用户来登录,这样减少系统被恶意登录攻击的机会。

    #vi /etc/ssh/sshd_configPermitRootLogin yes

    将这行前的#去掉后,修改为:

    PermitRootLogin no

    七、修改ssh服务的sshd 端口

         ssh默认会监听在22端口,可以修改到60200端口以避过常规的扫描。
         注意:修改端口错误可能会导致你下次连不到服务器,可以先同时开着22和6022两个端口,然后再关掉22端口;
         重启sshd不会弹掉你当前的连接,可以另外开一个客户端来测试服务;

    #vi /etc/ssh/sshd_config#增加修改#Port 22 #关闭22端口Port 6022 #增加6022端口#重启sshd服务service sshd restart检查一下sshd的监听端口对不对netstat -lnp|grep ssh#iptables开放sshd的6022端口vi /etc/sysconfig/iptables#如果使用redhat默认规则则增加-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6022 -j ACCEPT#或iptables -A INPUT -p tcp --dport 6022 -j ACCEPTiptables -A OUTPUT -p udp --sport 6022 -j ACCEPT


    重启iptables 服务

    service iptables restart#测试两个端口是否都能连上,连上后再将22端口删除



    八、更安全措施:禁止帐号登录,使用pubkey登录






    4、系统安全记录文件

       操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果您的系统是直接连到Internet,您发现有很多人对您的系统做Telnet/FTP登录尝试,可以运行\"#more /var/log/secure | grep refused\"来检查系统所受到的攻击,以便采取相应的对策,如使用SSH来替换Telnet/rlogin等。 






    5、防止攻击

      1.阻止ping 如果没人能ping通您的系统,安全性自然增加了。为此,可以在/etc/rc.d/rc.local文件中增加如下一行: 
         echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 

      2.防止IP欺骗 
        编辑/etc/host.conf文件并增加如下几行来防止IP欺骗攻击。 
    # Lookup names via DNS first then fall back to /etc/hosts.order hosts,bind# We have machines with multiple IP addresses.multi on# Check for IP address spoofing.nospoof on

             第一项设置首先通过DNS解析IP地址,然后通过hosts文件解析。

             第二项设置检测是否“/etc/hosts”文件中的主机是否拥有多个IP地址(比如有多个以太口网卡)。

            第三项设置说明要注意对本机未经许可的电子欺骗。


      3.防止DoS攻击 
     对系统所有的用户设置资源限制可以防止DoS类型攻击。如最大进程数和内存使用数量等。例如,可以在/etc/security/limits.conf中添加如下几行: 
      * hard core 0 
      * hard rss 5000 
      * hard nproc 20 
      然后必须编辑/etc/pam.d/login文件检查下面一行是否存在。 
      session required /lib/security/pam_limits.so 
     上面的命令禁止调试文件,限制进程数为50并且限制内存使用为5MB。 

     经过以上的设置,你的Linux服务器已经可以对绝大多数已知的安全问题和网络攻击具有免疫能力,但一名优秀的系统管理员仍然要时刻注意网络安全动态,随时对已经暴露出的和潜在安全漏洞进行修补。













    4、可插播认证模块(PAM)




    可插拔认证模块(PAM)

    5、基于PAM的口令安全和口令策略




    可插拔认证模块(PAM)
    基于PAM的口令安全和口令策略
    基于PAM的访问控制


    基于PAM的口令安全和口令策略


    6、基于PAM的访问控制



    基于PAM的访问控制

    5、基于PAM的口令安全和口令策略




    可插拔认证模块(PAM)
    基于PAM的口令安全和口令策略
    基于PAM的访问控制

    4、可插播认证模块(PAM)



               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • Linux安全基础知识

    千次阅读 2018-04-15 20:11:18
    其次,补充提供了一个通用的安全访问控制框架——Linux安全模块(LSM),是通过可加载的内核模块实现的,可以支持现存的各种不同的安全访问控制系统。SELinux、DTE、LIDS、AppArmor、SELinuxSmack、TOMOYO Linux、...
  • Linux安全

    2019-01-03 18:00:22
    补丁:对原版本进行错误修改和添加功能 diff:创建补丁 (原则是告诉我们怎么修改第一个文件得到第二个文件) -u 输出统一内容的头部信息(打补丁使用) -r 递归对比目录中的所有资源(可以对比目录) ...
  • Linux系统安全防护一

    千次阅读 2019-06-19 19:20:44
    一、系统安全防护常用技能: 1.1 检查并锁定可疑用户 #w ##查看当前登录的用户 #passwd -l nobody ##锁定用户 ]# ps -ef | grep @pts/0 #查找用户进程pid #kill -0 6054 ##提出可疑用户 #last 查看用户登录事件 ]# ...
  • linux安全加固技术--内核安全模块LSM

    万次阅读 2018-09-01 01:14:53
    Linux安全相关技术 SELinux AppArmor openSSL TPM SGX LSM   linux上六种常用的安全加固技术: 1 安全的编码(Secure Code),减少编写的错误。 2 应用层漏洞缓解技术(Application-level exploitation)...
  • linux安全模式

    千次阅读 2019-04-30 15:52:57
    ##### linux安全模式 安全模式可以恢复系统状态, 背景 ------ 我在尝试系统自启动的时候reboot卡在了开机界面一直不动。 然后百度说安全模式可以。 我这个板子进入安全模式的方式是长按shift按键。进入后仔细看界面...
  • Linux安全基线配置

    万次阅读 2019-02-15 17:19:56
    检查项目 : 设置密码失效时间 加固建议: 在 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间,如 PASS_MAX_DAYS 90。需同时执行命令设置root... ...加固建议: 在 /etc/login.defs 中将 PASS_MIN_DAYS 参数...
  • 1.首先我们说说,为什么Linux安全。  Linux安全一是因为它的软件一般只收录开源社区审核过的开源软件,或者商业机构审核过的闭源软件;二是因为Linux内部的权限机构比较复杂,并且周密,一般Linux被用在服务器平台...
  • Linux安全加固

    千次阅读 2018-08-25 11:11:15
    一. 账户安全 1.1 锁定系统中多余的自建帐号 检查方法: 执行命令 #cat /etc/passwd #cat /etc/shadow 查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如...#cp -p /etc/passw...
  • 一较高下:Windows与Linux安全性比较

    千次阅读 2006-03-08 11:27:00
    一较高下:Windows与Linux安全性比较 来自:315safe 软件安全的衡量标准通常是主观的,因为程序代码的每一行都有出现安全漏洞的风险。每个安全漏洞都有严重程度,但是,这种严重程度对最终用户也许很重要,也许不...
  • 第1章 Linux安全渗透简介 渗透测试是对用户信息安全措施积极评估的过程。通过系统化的操作和分析,积极发现系统和网络中存在的各种缺陷和弱点,如设计缺陷、技术缺陷。本章将简要介绍Linux安全渗透及安全渗透...
  • Linux安全配置关闭

    千次阅读 2018-07-17 21:59:18
    1.关闭防护墙 chkconfig列出所用的服务的状态 关闭防火墙:chkconfig iptables off 2.关闭Linux安全
  • Kali Linux安全渗透教程(内部资料)

    万次阅读 2014-05-27 14:14:42
    Kali Linux安全渗透教程第一章(内部资料) 下载地址://pan.baidu.com/s/1dDnEL4P Kali Linux安全渗透教程第二章(内部资料) 下载地址:://pan.baidu.com/s/1dDnEL4P Kali Linux安全渗透教程第九章(内部资料) ...
  • 最近在读倪继利的《Linux安全体系分析与编程》,想把一些笔记发出来,这是第一篇。 Linux的日志系统主要就是syslog系统构架,其实现是内核函数printk将消息写入一个环形缓冲区中,供高层的sys_syslog系统调用读取。...
  • [Kali Linux 安全渗透教程新手版]

    万次阅读 2017-05-25 09:13:13
    1.1什么是安全渗透 渗透测试时通过模拟黑客的攻击方法,来评估计算机网络系统安全的一种评估方法. 通常的评估方式对评估结果更具全面性,而渗透测试更注重安全露的严重性. 1.6Kali更新与升级 Ctrl+F1 快捷键提示 ...
  • Kali Linux是一个基于Debian的Linux发行版,包括很多安全和取证方面的相关工具。它由Offensive Security Ltd维护和资助。最先由Offensive Security的MatiAharoni和Devon Kearns通过重写Back Track来完成。Back T
  • 1、安装: centos默认安装,Ubuntu:sudo apt-get install auditd 2、开启auditd服务: service auditd start 3、查看当前auditd服务状态: service auditd status ...service auditd restart 或 service audi...
1 2 3 4 5 ... 20
收藏数 597,436
精华内容 238,974
关键字:

linux安全