zoukankan      html  css  js  c++  java
  • 云主机服务器系统加固

    系统版本信息

    命令:

    lsb_release -a
    

    执行结果:

    结论:系统版本为CentOS 7.3 64位。

    创建影子口令

    命令:

    ll /etc/shadow
    cat /etc/shadow
    

    执行结果:

    结论:已存在影子口令文件。

    建立多帐户组,将用户账号分配到相应的帐户组

    此步骤需要对应应用名称才可创建。

    删除或锁定可能无用的帐户

    命令:

    cat /etc/passwd
    

    执行结果:

    结论:系统中只有root、系统用户、伪用户,没有其他用户存在,后续大数据平台应用使用账号名为cbdp,拥有sudo权限。

    删除可能无用的用户组

    同上。

    检查是否存在空密码的账户

    命令:

    awk -F: '($2 == "") { print $1 }' /etc/shadow
    

    执行结果:

    结论:无空口令用户存在。

    设置口令策略满足复杂度要求

    执行历史:

    #最小密码长度为8位
    [root@Server-i-fzbwivul78 pam.d]# authconfig --passminlen=8 --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^minlen" /etc/security/pwquality.conf
    minlen = 8
    #在新密码中设置同一类的允许连续字符的最大数目4位
    [root@Server-i-fzbwivul78 pam.d]# authconfig --passmaxclassrepeat=4 --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^maxclassrepeat" /etc/security/pwquality.conf
    maxclassrepeat = 4
    #在新密码中至少需要一个小写字符。
    [root@Server-i-fzbwivul78 pam.d]# authconfig --enablereqlower --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^lcredit" /etc/security/pwquality.conf
    lcredit   = -1
    #在新密码中至少需要一个大写字符
    [root@Server-i-fzbwivul78 pam.d]# authconfig --enablerequpper --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^ucredit" /etc/security/pwquality.conf
    ucredit    = -1
    #在新密码中至少需要一个数字
    [root@Server-i-fzbwivul78 pam.d]#  authconfig --enablereqdigit --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^dcredit" /etc/security/pwquality.conf
    dcredit     = -1
    #密码包括至少一个特殊字符
    [root@Server-i-fzbwivul78 pam.d]# authconfig --enablereqother --update
    [root@Server-i-fzbwivul78 pam.d]# grep "^ocredit" /etc/security/pwquality.conf
    ocredit      = -1
    [root@Server-i-fzbwivul78 pam.d]# 
    

    设置默认用户密码使用天数,编辑配置文件/etc/login.defs:

    vi /etc/login.defs
    

    修改PASS_MAX_DAYS为90天数,PASS_MIN_LEN修改为8位数。

    修改如下:

    设置账号口令生存周期

    命令:

    #$DAYS为过期时间
    chage -M $DAYS root
    

    执行结果:

    注意:修改密码过期时间需要慎重。

    设定密码历史,不能重复使用最近5次口令

    编辑/etc/pam.d/system-auth,找到下面一行

    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
    

    修改为:

    password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
    

    限制ROOT用户远程登陆

    vi /etc/ssh/sshd_config 
    

    修改PermitRootLogin选项为:

    PermitRootLogin no
    

    检查passwd、group文件权限设置

    执行如下命令:

    结论:符合安全标准。

    删除帐户目录下的.netrc/.rhosts/.shosts文件

    命令:

    rm ~/.netrc ~/.rhosts ~/.shosts
    

    执行结果:

    检查是否存在除root之外UID为0的用户

    检查命令:

    awk -F: '($3 == 0) { print $1 }' /etc/passwd
    

    执行结果:

    结论:系统中无root以外的UID为0的账号。

    设置账户权限

    需根据实际情况,针对性的做账户权限设置。后续大数据平台应用使用账号名为cbdp,拥有sudo权限。

    设置命令:usermod

    账号锁定

    需根据实际情况,针对指定账户锁定。后续大数据平台应用使用账号名为cbdp,拥有sudo权限

    命令如下:

    #锁定命令
    passwd -l $account
    #解锁账号命令
    passwd -u $account
    #禁止所有非root用户登录
    touch /etc/nologin
    

    root用户环境变量的安全性

    命令:

    #检查变量中是否含有父目录
    echo $PATH | egrep '(^|:)(.|:|$)'
    #检查变量中的是否包含组目录权限为777的目录
    find `echo $PATH | tr ':' ' '` -type d ( -perm -002 -o -perm -020 ) -ls
    

    执行结果:

    远程连接的安全性配置

    远程登录取消telnet采用ssh

    检查/etc/securetty中是否包含pts/0字样:

    grep "pts/0" /etc/securetty
    

    执行结果:

    结论:系统已禁用telnet登录。

    限制ssh连接的IP配置

    需要根据实际情况配置,配置文件为:/etc/hosts.allow/etc/hosts.deny

    限制系统帐户FTP登录

    命令:

    cat /etc/passwd|grep ftp
    

    执行结果:

    如果含有ftp字段的用户,并且登陆shell为/sbin/nologin或者/usr/sbin/nologin,说明FTP用户无法登陆。如果登陆shell为非nologin,执行如下命令:

    #$account 为要修改的ftp用户名称
    usermod -s $account
    

    结论:此镜像中,已禁用ftp账号登录。

    配置允许访问inetd服务的IP范围或主机名

    此基础镜像系统中无inetd服务:

    设定连续认证失败次数超过6次锁定该账号

    编辑文件/etc/pam.d/sshd,在#%PAM-1.0的下面,即第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!,添加内容如下:

    auth       required     pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=10
    

    执行结果如下:

    参数详解如下:

    even_deny_root 也限制root用户;
    deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
    unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
    root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
    

    此处使用的是 pam_tally2 模块,如果不支持 pam_tally2 可以使用 pam_tally 模块。另外,不同的pam版本,设置可能有所不同,具体使用方法,可以参照相关模块的使用规则。

    查看用户登录失败次数:

    pam_tally2 --user root
    

    解锁指定用户:

    # $account为被锁定的账号账号
    pam_tally2 -r -u $account
    

    用户的umask安全配置

    查看当年状态的umask,执行命令:

    umask
    

    执行结果:

    需要将其修改为077,并永久生效,修改/etc/profile文件,将umask修改为077:

    vi /etc/profile
    

    修改如下:

    测试结果:

    查找并删除未授权的SUID/SGID文件

    命令:

    for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do find $PART ( -perm -04000 -o -perm -02000 ) -type f -xdev -print ; done
    

    若存在未授权的文件,则低于安全要求,需要将其删除。建议经常性的对比suid/sgid文件列表,以便能够及时发现可疑的后门程序

    执行结果:

    结论:此基础镜像中无未授权的SUID/SGID文件。

    检查是否任何人都有写权限的文件

    命令:

    for PART in `awk '($3 == "ext2" || $3 == "ext3") 
    { print $2 }' /etc/fstab`; do find $PART -xdev -type d ( -perm -0002 -a ! -perm -1000 ) -print; done
    

    若返回值非空,则低于安全要求。

    执行结果:

    结论:结果为空,此基础镜像不存在任何人都有写权限的文件。

    检查异常隐含文件

    命令:

    find  /  -xdev -name "..*"  -print
    find  /  -xdev -name "...*"  -print |cat -v 
    

    执行结果:

    结论:镜像中不存在异常隐含文件。

    重要目录和文件的权限设置

    命令:

    ls  -l  /etc/ls  -l  /etc/rc.d/init.d/ls  -l  /tmpls  -l  /etc/inetd.confls  -l  /etc/passwdls  -l  /etc/shadowls  -l  /etc/groupls  -l  /etc/securityls  -l  /etc/servicesls  -l  /etc/rc*.d
    

    若权限过低,则低于安全要求。
    对于重要目录,建议执行如下类似操作:

    这样只有root可以读、写和执行这个目录下的脚本。

    检查没有所有者的文件或目录

    定位系统中没有属主的文件用下面的命令:

    for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`; do find $PART -nouser -o -nogroup -print; done
    

    执行结果:

    发现没有属主的文件往往就意味着有黑客入侵你的系统了。不能允许没有属主的文件存在。如果在系统中发现了没有主人的文件或目录,先查看它的完整性,如果一切正常,给它一个属主。有时候卸载程序可能会出现一些没有主人的文件或目录,在这种情况下可以把这些文件和目录删除掉。

    禁用不必要的服务

    查看自动启动服务的命令:

    systemctl list-unit-files  |grep enabled
    

    需要根据实际情况进行调整。禁用命令:

    #$service为服务名称
    systemctl disable $service
    

    禁用不必要的inetd服务

    基础镜像中不存在inetd服务。

    关闭IP转发

    编辑文件/etc/sysctl.conf,添加如下内容:

    net.ipv4.ip_forward=0
    

    然后执行:

    sysctl -p
    

    关闭转发源路由包

    同上步操作。

    增大最大半连接数防范SYN攻击

    编辑文件/etc/sysctl.conf,添加如下内容:

    net.ipv4.tcp_max_syn_backlog = 2048
    

    然后执行:

    sysctl -p
    

    关闭ICMP重定向

    编辑文件/etc/sysctl.conf,添加如下内容:

    net.ipv4.conf.eth0.accept_redirects = 0
    net.ipv4.conf.lo.accept_redirects = 0
    net.ipv4.conf.default.accept_redirects = 0
    net.ipv4.conf.all.accept_redirects = 0
    

    然后执行:

    sysctl -p
    

    关闭响应echo广播

    命令:

    sysctl -a |grep echo_ignore_broadcasts
    

    执行结果:

    已经关闭echo广播相应,如果未关闭,修改/etc/sysctl.conf文件,添加如下内容:

    net.ipv4.icmp_echo_ignore_broadcasts = 1
    

    关闭响应地址掩码和时间戳广播

    CentOS系统中不存在,只有少数操作系统会进行响应的回应,这些系统包括ULTRIX OpenVMS, Windows 95/98/98 SE/ME, NT below SP 4, 和 SUN Solaris机器。

    启用inetd日志记录

    此基础镜像中无inetd服务。

    syslog登录事件记录

    命令:

    cat /etc/rsyslog.conf |grep "authpriv.*"
    

    执行结果:

    结论:基础镜像已存在登陆日志审核记录规则。

    Linux日志增强配置以及syslog系统事件审计

    基础镜像已存在,执行cat /etc/rsyslog.conf,基础镜像配置如下:

    # rsyslog configuration file
    
    # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
    # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
    
    #### MODULES ####
    
    # The imjournal module bellow is now used as a message source instead of imuxsock.
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imjournal # provides access to the systemd journal
    #$ModLoad imklog # reads kernel messages (the same are read from journald)
    #$ModLoad immark  # provides --MARK-- message capability
    
    # Provides UDP syslog reception
    #$ModLoad imudp
    #$UDPServerRun 514
    
    # Provides TCP syslog reception
    #$ModLoad imtcp
    #$InputTCPServerRun 514
    
    
    #### GLOBAL DIRECTIVES ####
    
    # Where to place auxiliary files
    $WorkDirectory /var/lib/rsyslog
    
    # Use default timestamp format
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    
    # File syncing capability is disabled by default. This feature is usually not required,
    # not useful and an extreme performance hit
    #$ActionFileEnableSync on
    
    # Include all config files in /etc/rsyslog.d/
    $IncludeConfig /etc/rsyslog.d/*.conf
    
    # Turn off message reception via local log socket;
    # local messages are retrieved through imjournal now.
    $OmitLocalLogging on
    
    # File to store the position in the journal
    $IMJournalStateFile imjournal.state
    
    
    #### RULES ####
    
    # Log all kernel messages to the console.
    # Logging much else clutters up the screen.
    #kern.*                                                 /dev/console
    
    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    
    # The authpriv file has restricted access.
    authpriv.*                                              /var/log/secure
    
    # Log all the mail messages in one place.
    mail.*                                                  -/var/log/maillog
    
    
    # Log cron stuff
    cron.*                                                  /var/log/cron
    
    # Everybody gets emergency messages
    *.emerg                                                 :omusrmsg:*
    
    # Save news errors of level crit and higher in a special file.
    uucp,news.crit                                          /var/log/spooler
    
    # Save boot messages also to boot.log
    local7.*                                                /var/log/boot.log
    
    
    # ### begin forwarding rule ###
    # The statement between the begin ... end define a SINGLE forwarding
    # rule. They belong together, do NOT split them. If you create multiple
    # forwarding rules, duplicate the whole block!
    # Remote Logging (we use TCP for reliable delivery)
    #
    # An on-disk queue is created for this action. If the remote host is
    # down, messages are spooled to disk and sent when it is up again.
    #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
    #$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
    #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
    #$ActionQueueType LinkedList   # run asynchronously
    #$ActionResumeRetryCount -1    # infinite retries if host is down
    # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
    #*.* @@remote-host:514
    

    记录FTP日志

    基础镜像中没有FTP应用服务。

    设置远程日志服务器

    根据实际情况部署,修改文件为/etc/rsyslog.conf

    检查系统日志文件权限

    命令:

    cd /var/log && ll messages secure maillog cron spooler boot.log
    

    执行结果:

    禁用图形界面登录

    云主机中默认已禁用图形界面。客户服务器安装系统时请取消安装图形界面。

    字符交互界面帐户超时自动退出及系统超时注销

    编辑/etc/profile文件,追加如下内容:

    export TMOUT=180
    

    设置自动锁定时间为180秒。

    系统漏洞补丁

    根据公有云主机安全漏洞扫描的结果,对漏洞进行补丁升级:

    升级历史命令如下:

    yum update libnl3 sudo wget dnsmasq gnutls  libtasn1  openssh kernel curl bash -y
    
  • 相关阅读:
    Python爬虫一
    Python爬虫二
    DRF框架中的演变View
    计算时间复杂度例题
    vue2.x webpack打包资源路径问题
    vs code运行c语言 控制台乱码 问题
    解决视频的声音和画面不同步问题
    c语言数据结构,静态链表,结构体数组
    swagger @ApiModel添加实体类不生效
    计算及校验海明码的3个举例
  • 原文地址:https://www.cnblogs.com/ccorz/p/yun-zhu-ji-fu-wu-qi-xi-tong-jia-gu.html
Copyright © 2011-2022 走看看