zoukankan      html  css  js  c++  java
  • CentOS7-系统优化及安全加固

    说明:CentOS7系统基础命令使用变化:(wget与curl经常被用于木马下载,自动挖矿脚本执行,顾将默认的命令进行了rename)

    • wget → mywget
    • curl → mycurl

    定时任务添加无法保存时,请执行如下命令解锁相关文件后再次添加定时任务:

    [root@CN-localhost ~]# lsattr /var/spool/cron/root  # <--该文件被锁定(文件有i标志位),
    # 添加root用户定时任务时,需要先使用命令进行解锁(chattr -i /var/spool/cron/root),解锁后可以使用cront -e命令添加定时任务
    ----i----------- /var/spool/cron/root
    

    CentOS7系统优化

    最大文件打开数/文件句柄优化(推荐)

    ## 备份配置文件
    cp -a /etc/security/limits.conf{,.bak}
    ## 添加以下两行配置到该文件最后
    * soft nofile 65536
    * hard nofile 65536
    

    用户最大进程数(推荐)

    ## 1.备份配置文件
    cp -a /etc/security/limits.d/20-nproc.conf{,.bak}
    ## 2.修改配置文件
    vim /etc/security/limits.d/20-nproc.conf
    *     soft  nproc   65536
    *     hard  nproc   65536
    root    soft  nproc   unlimited
    

    关闭防火墙(推荐)

    /usr/bin/systemctl stop firewalld.service &> /dev/null
    /usr/bin/systemctl disable firewalld.service &> /dev/null
    /usr/bin/systemctl mask firewalld.service &> /dev/null
    

    关闭SELinux(推荐)

    cp /etc/selinux/config{,.bak}
    sed -r -i '/^SELINUX=/s/.*/SELINUX=disabled/' /etc/selinux/config
    setenforce 0
    

    操作系统时间同步设置(推荐)

    ## 解锁配置文件
    chattr -i ``/var/spool/cron/root
    ## 添加定时任务,定时从时间服务器同步时间
    echo "*/5 * * * * /usr/sbin/ntpdate 10.137.9.9 >> /home/timedate.log > /dev/null 2>&1" >> /var/spool/cron/root
    ## 编辑后锁定配置文件
    chattr +i /var/spool/cron/root
    

    系统参数调优(需根据实际业务需要进行评估,一般调整参数如下)(可选)

    ## 备份配置文件
    cp -a /etc/sysctl.conf /etc/sysctl.conf.default
    ## 添加以下调优参数到该文件中
    #kernel
        kernel.sysrq = 0
        kernel.core_uses_pid = 1
        kernel.msgmnb = 65536
        kernel.msgmax = 65536
        kernel.shmmax = 68719476736
        kernel.shmall = 4294967296
    #socket
        net.ipv4.ip_local_port_range = 1024 65000
        net.ipv4.ip_forward = 0
        net.ipv4.tcp_timestamps = 0
        net.ipv4.tcp_sack = 1
        net.ipv4.tcp_window_scaling = 1
        net.ipv4.conf.default.rp_filter = 1
        net.ipv4.conf.default.accept_source_route = 0
    #socket mem
        net.ipv4.tcp_mem = 94500000 915000000 927000000
        net.ipv4.tcp_rmem = 4096 87380 4194304
        net.ipv4.tcp_wmem = 4096 16384 4194304   
        net.core.wmem_default = 8388608
        net.core.rmem_default = 8388608
        net.core.rmem_max = 16777216
        net.core.wmem_max = 16777216
    #conn
        net.core.netdev_max_backlog = 262144
        net.core.somaxconn = 262144
        net.ipv4.tcp_max_orphans = 3276800
    #Timewait
        net.ipv4.tcp_max_tw_buckets = 6000
        net.ipv4.tcp_tw_recycle = 1
        net.ipv4.tcp_tw_reuse = 1
    #sync
        net.ipv4.tcp_syn_retries = 1
        net.ipv4.tcp_synack_retries = 1
        net.ipv4.tcp_max_syn_backlog = 262144
        net.ipv4.tcp_syncookies = 1
    #fin
        net.ipv4.tcp_fin_timeout = 1
    #keepalive
        net.ipv4.tcp_keepalive_time = 30
    ## 配置生效
    /sbin/sysctl -p
    

    2.CentOS7系统安全加固

    操作系统密码策略(密码长度与有效期)(推荐)

    ## 备份配置文件:
    cp -a /etc/login.defs /etc/login.defs.default
    ## 编辑配置文件
    vim /etc/login.defs
    # 将相关参数值改成如下:
    PASS_MAX_DAYS    90    # 密码最长使用天数
    PASS_MIN_DAYS    0     # 密码最短使用天数
    PASS_MIN_LEN     8     # 密码最短长度
    PASS_WARN_AGE    7     # 密码到期前多少天提醒
     
    ## 修改系统中当前已存在用户的密码策略
    chage -m 0 -M 90 -I 5 -W 7 <用户名>
    ## 表示将此用户的密码最长使用天数设为90,最短使用天数设为0,密码过期后5天之后账户失效,过期前7天提醒用户。
    

    密码复杂度策略(推荐)

    ## 备份配置文件:
    cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default## 编辑配置文件
    vi /etc/pam.d/system-auth
    # 将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 authtok_type= ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
    

    密码重复使用次数限制(可选)

    设置密码不能重复前3次使用过的。

    ## 修改配置文件
    /etc/pam.d/system-auth
    在password sufficient pam_unix.so xxxxx 一行后添加 remember=3,例如:
    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=3
    

    锁定不必要的系统默认帐号(推荐)

    ## 锁定无用帐号,降低安全风险
    usermod -L gdm
    usermod -L nobody
    ## 如有其他的不必要的系统用户,可以用此方法锁定
    

    特殊帐号检查(推荐)

    检查系统中是否存在空口令帐号和除了root之外的UID为0的帐号

    awk -F: '($2"")' /etc/shadow    ## 查看空口令账号,找到之后,使用passwd命令为其设置密码。
    awk -F: '($30)' /etc/passwd     ## 查看UID为零的账号,保证系统中UID为0的帐号只有root。
    

    设置会话超时时间(推荐)

    ## 备份配置文件:
    cp -a /etc/profile /etc/profile.default
    ## 编辑配置文件:
    vi /etc/profile
    # 在文件的末尾添加参数
    export TMOUT=300
    

    设置历史命令时间戳(可选)

    echo "HISTFILESIZE=2000" >> /etc/bashrc
    echo "HISTFILESIZE=2000" >> /etc/bashrc
    echo "HISTSIZE=2000" >> /etc/bashrc
    echo "HISTTIMEFORMAT='<%F %T> : '" >> /etc/bashrc
    

    SSH 服务安全配置(推荐)

    ## 备份配置文件
    cp /etc/ssh/sshd_config{,.bak}
    ## 编辑配置文件
    vi /etc/ssh/sshd_config
    # 禁止空密码登录,将#PermitEmptyPasswords no参数的注释符号去掉,改成
    PermitEmptyPasswords no
    # 关闭ssh的tcp转发,将#AllowTcpForwarding yes参数改成
    AllowTcpForwarding no
    # 关闭S/KEY(质疑-应答)认证方式,将#ChallengeResponseAuthentication yes参数,改成
    ChallengeResponseAuthentication no
    # 关闭基于GSSAPI 的用户认证,将GSSAPIAuthentication yes参数,改成
    GSSAPIAuthentication no
    # 关闭ssh连接DNS查找
    UseDNS no
    # 修改sshd服务默认端口,推荐改成10000以上的端口,如
    Port 12379
    ## 重启ssh服务
    
    # 重启sshd服务
    systemctl restart sshd
    

    禁止root远程登录(可选)

    ## 备份配置文件
    cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
    ## 编辑配置文件
    vi /etc/ssh/sshd_config
    # 将配置参数#PermitRootLogin yes改成
    PermitRootLogin no
    ## 重启ssh服务
    

    登陆失败锁定(可选)

    ## 配置文件备份
    cp /etc/pam.d/sshd{,.bak}
    cp /etc/pam.d/login{,.bak}
    ## 修改配置文件
    vim /etc/pam.d/sshd
    ## 编辑配置文件,在#%PAM-1.0的下面,即第二行,添加内容
    auth required pam_tally2.so deny=3 unlock_time=600 even_deny_root root_unlock_time=10
     
    vim /etc/pam.d/login
    ## 编辑配置文件,在#%PAM-1.0的下面,即第二行,添加内容
    auth required pam_tally2.so deny=3 lock_time=600 even_deny_root root_unlock_time=10
    

    设置sshd加密算法(推荐)

    ## 备份配置文件
    cp /etc/ssh/sshd_config{,.bak}
    ## 修改配置文件,在配置文件末尾加上如下配置
    Ciphers aes128-ctr,aes192-ctr,aes256-ctr
    

    设置系统umask值(推荐)

    vim /etc/profile
    ## 在文档末尾加上
    umask 027
    

    禁止"Control-Alt-Delete"重启系统快捷键(推荐)

    防止误操作按了"Control-Alt-Delete"组合键导致系统重启。

    mv /usr/lib/systemd/system/ctrl-alt-del.target /tmp
    init q
    

    隐藏系统版本信息(可选)

    mv /etc/issue /etc/issue.bak
    mv /etc/issue.net /etc/issue.net.bak
    

    关闭不必要的系统服务(推荐)

    关闭不必要的服务(如普通服务和xinetd服务),降低风险。

    ## 停止服务
    systemctl stop <服务名>
    ## 设置服务在开机时不自动启动。
    systemctl disable <服务名>
    ## CentOS7最小化安装,推荐停止的系统服务有:postfix,...
    

    删除潜在的危险文件(推荐)

    .rhosts,.netrc,hosts.equiv等文件都具有潜在的危险,如果没有应用,应该删除。

    ## 操作步骤
    find / -name .rhosts 
    find / -name .netrc
    find / -name hosts.equiv
    ## 若存在相关文件,加上.bak后缀
    mv .rhost .rhost.bak 
    mv .netr .netr.bak 
    mv hosts.equiv hosts.equiv.bak
    

    记录所有用户的登录和操作日志(可选)

    vim /etc/profile      # 打开配置文件,在配置文件末尾加入如下脚本
    history
    USER=`whoami`
    USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
    if [ "$USER_IP" = "" ]; then
        USER_IP=`hostname`
    fi
    if [ ! -d /var/log/history ]; then
        mkdir /var/log/history
        chmod 733 /var/log/history
    fi
    if [ ! -d /var/log/history/${LOGNAME} ]; then
        mkdir /var/log/history/${LOGNAME}
        chmod 300 /var/log/history/${LOGNAME}
    fi
    export HISTSIZE=4096
    DT=`date +"%Y%m%d_%H:%M:%S"`
    export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
    chmod 600 /var/log/history/${LOGNAME}/* 2>/dev/null
    ## 执行下面命令使配置生效,如果已经接入了堡垒机,该步骤可省略(堡垒机已经有日志审计功能了)
    source /etc/profile
    

    人们永远没有足够的时间把它做好,但永远有足够的时间重新来过。 可是,因为并不是总有机会重做一遍,你必须做得更好,换句话说, 人们永远没有足够的时间去考虑到底是不是想要它,但永远有足够的时间去为之后悔。 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 浅掘千口井,不如深挖一口井!当知识支撑不了野心时,那就静下心来学习吧!运维技术交流QQ群:618354452

    个人微信公众号,定期发布技术文章和运维感悟。欢迎大家关注交流。

  • 相关阅读:
    临时
    vue数据立刻绑定到dom元素
    java浅拷贝和深拷贝(基础也是很重要的)
    Eclipse快捷键大全
    微信小程序开发之路之组件化
    c++入门笔记
    开发个活动上线是个什么体验
    分布式锁的理解,java自带的锁为什么会失效
    vue页面开发遇到的坑,都是泪!src属性,freemarker取值
    java泛型理解。代码更明了。
  • 原文地址:https://www.cnblogs.com/miaocbin/p/15245810.html
Copyright © 2011-2022 走看看