1、操作系统和数据库系统管理用户身份鉴别信息令应有复杂度要求并定期更换。
配置# vi /etc/login.defs
系统默认配置:
PASS_MIN_LEN=5 #密码最小长度 PASS_MAX_DAYS=99999 #密码最大有效期 PASS_MIN_DAYS=0 #两次修改密码的最小间隔时间
优化配置:
PASS_MIN_LEN=8 PASS_MAX_DAYS=90 PASS_MIN_DAYS=2
2、启用登录失败处理功能
vi /etc/pam.d/system-auth 在文件中加入以下语句: password requisite pam_cracklib.so retry=3 difok=2 minlen=8 lcredit=-1 dcredit=-1 difok:本次密码与上次密码至少不同字符数 minlen:密码最小长度,此配置优先于login.defs中的PASS_MAX_DAYS ucredit:最少大写字母 lcredit:最少小写字母 dcredit:最少数字 retry:重试多少次后返回密码修改错误 #帐户登录连续 3 次失败,就统一锁定 60 秒, 60 秒后可以解锁 auth required pam_tally2.so onerr=fail deny=3 unlock_time=60 even_deny_root root_unlock_time=60 root_unlock_time 表示 root 帐户的 锁定时间 onerr=fail 表示连续失败 deny=3,表示 超过3 次登录失败即锁定 vim /etc/pam.d/sshd #%PAM-1.0 auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60 vim /etc/pam.d/login #%PAM-1.0 auth required pam_tally2.so deny=3 unlock_time=60 even_deny_root root_unlock_time=60
3、设置登录终端的操作超时锁定
vi /etc/profile 在“HISTFILESIZE=”后面加入下面这行: TMOUT=900 # 设置900秒内用户无操作就字段断开终端
4、ulimit 限制资源和文件打开数量优化
[root@localhost ~]# egrep -v "^#|^$" /etc/security/limits.conf root soft nofile 65535 root hard nofile 65535 * soft nofile 65535 * hard nofile 65535 * soft nproc 65535 * hard nproc 65535
5.对重要信息资源设置敏感标记的功能(SElinux)。
如果对安全要求较高的话就开启SElinux
建议这个选项为SELINUXTYPE=targeted (默认选项)
selinux资料参考:http://cn.linux.vbird.org/linux_basic/0440processcontrol.php
6、ssh服务配置
vim /etc/ssh/sshd_config #确保SSH LogLevel设置为INFO,记录登录和注销活动(取消注释) LogLevel INFO #设置SSH空闲超时退出时间 ClientAliveInterval 900 ClientAliveCountMax 0 #SSHD强制使用V2安全协议 Protocol 2 #禁止SSH空密码用户登录 PermitEmptyPasswords no #设置最大密码尝试失败次数 MaxAuthTries 4
7.设置用户权限配置文件的权限
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow chmod 0644 /etc/group chmod 0644 /etc/passwd chmod 0400 /etc/shadow chmod 0400 /etc/gshadow
8.开启地址空间布局随机化
sysctl -w kernel.randomize_va_space=2
9.强制用户不重用最近使用的密码,降低密码猜测攻击风险
#在/etc/pam.d/password-auth和/etc/pam.d/system-auth中password sufficient pam_unix.so 这行的末尾配置remember参数为5-24之间,原来的内容不用更改。如下面只在末尾加了remember=5,即可限制不能重用最近5个密码。 [root@localhost ~]# egrep "password sufficient" /etc/pam.d/password-auth password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5 #只添加remember=5 ...... [root@localhost ~]# egrep "password sufficient" /etc/pam.d/system-auth password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5 ......
10.检查密码长度和密码是否使用多种字符类型
编辑/etc/security/pwquality.conf,把minlen(密码最小长度)设置为9-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4。
[root@localhost ~]# egrep -v "^#|^$" /etc/security/pwquality.conf minlen = 10 minclass = 3
11、history安全优化
vim /etc/profile export HISTTIMEFORMAT="%F %T `who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` `whoami` " ##将所有命令记录到messages日志中(最好如下) export PROMPT_COMMAND='{ msg=$(history 1 | { read x y ; echo $y ;}); logger "[euid=$(whoami)]":$(who am i):[`pwd`]" $msg";}'
12.服务器开启审计服务auditd和日志服务rsyslog(默认开启)(或者搭建日志服务器【推荐】)
13.安装完整性验证工具tripwire(可以自己写md5的脚本验证)
#验证脚本 [root@localhost ~]# cat /usr/local/scripts/md5_file_check.sh #!/bin/bash check_file=/etc/command.md5 md5_status=`/usr/bin/md5sum -c ${check_file}|egrep -v "OK"|wc -l` if [ ${md5_status} -eq 0 ];then echo 0 else echo 1 fi #例子 [root@localhost ~]# md5sum /usr/bin/ls >> /etc/command.md5 [root@localhost ~]# cat /etc/command.md5 1e71cac86984ea97fe648a9fe66bc223 /bin/ls #zabbix监控脚本 [root@localhost ~]# egrep "md5" /etc/zabbix/zabbix_agentd.d/scripts.conf UserParameter=md5_check,/usr/local/scripts/md5_file_check.sh 2>/dev/null #重启zabbix-agent [root@168web3 ~]# systemctl restart zabbix-agent.service
zabbix监控模板
监控项
触发器
14.服务器安装clamav杀毒软件
#安装 [root@localhost ~]# yum install clamav -y #定时更新病毒库 [root@localhost ~]# crontab -l ##每天更新病毒库 00 02 * * * /usr/bin/freshclam 2>&1 >/dev/null #扫描目录(可以写入定时任务中) [root@localhost ~]# clamscan -r /sbin/
15.设置tcp连接超时以及tcp断开后释放连接的优化。
[root@localhost ~]#vim /etc/sysctl.conf #网卡设备将请求放入队列的长度。 net.core.netdev_max_backlog = 8192 #开启TCP连接中TIME-WAIT sockets的快速回收 net.ipv4.tcp_tw_recycle = 1 #开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接 net.ipv4.tcp_tw_reuse = 1 #这个参数决定了它保持在FIN-WAIT-2状态的时间 net.ipv4.tcp_fin_timeout = 30 #当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时 net.ipv4.tcp_keepalive_time = 600 #生效 [root@localhost ~]# sysctl -p
16、防火墙安全组规则设置好(ip白名单、控制好每条规则)
systemctl start firewalld.service #开发ip(白名单)(重启生效) firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="1.1.1.1" port protocol="tcp" port="1-65535" accept" #封ip(临时)直接生效(重启就没) firewall-cmd --add-rich-rule="rule family='ipv4' source address='2.2.2.2' reject" #开发端口 firewall-cmd --add-port=80/tcp --permanent firewall-cmd --add-port=80/tcp
17、关闭不用的服务与开机自启服务
#查看开机自启 systemctl list-unit-files|grep enabled #关闭开机自启与服务 systemctl disable atd.service systemctl stop atd.service
18、能不对外的服务或端口就不要对外(如ssh端口或gitlab等)
19、重要服务器或数据定时做好备份与快照