系统版本信息
命令:
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