云主机服务器系统加固

系统版本信息

命令:

lsb_release -a

执行结果:

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

创建影子口令

命令:

ll /etc/shadow
cat /etc/shadow

执行结果:

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

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

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

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

命令:

cat /etc/passwd

执行结果:

结论:系统中只有root、系统用户、伪用户,没有其他用户存在。

删除可能无用的用户组

同上。

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

命令:

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]# 

设置账号口令生存周期

命令:

#$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的账号。

设置账户权限

需根据实际情况,针对性的做账户权限设置。

设置命令:usermod

账号锁定

需根据实际情况,针对指定账户锁定。

命令如下:

#锁定命令
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

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

chmod -R 750 /etc/rc.d/init.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

猜你喜欢

转载自www.cnblogs.com/ccorz/p/yun-zhu-ji-fu-wu-qi-xi-tong-jia-gu.html