linux安全审计最佳实践
Linux系统的安全是整个IT环境安全中的重要一环,合理的配置和管理Linux服务器,才能最大限度的降低应用系统的安全风险。
本手册旨在指导运维或安全检查人员进行Linux操作系统以及MySQL数据库的安全合规性检查和加固,以满足操作系统以及数据库层面的等保测评、审计合规、年审等。
[TOC]
基本安全原则
建议所有Linux的用户和管理员应遵循以下基本安全原则:
- 最小权限原则:为用户和应用分配最小的权限,例如 禁止非授权的账户拥有Sudo权限、禁止Daemon账号拥有登录权限等
- 最少软件原则:减少系统漏洞最简单的办法就是不安装该软件。在满足系统需求的情况下,以最简的方式部署Linux服务器,不要安装过多的软件
- 健壮性原则:目前Centos自带了许多安全功能,比如 SElinux、Iptalbes,这些功能可以很好的保障Linux的安全,并具有威胁发现的能力
- 合规性原则:应保证所有的操作合规性,包括不使用不安全的服务如ftp、telnet等,禁止滥用root权限,普通账户涉及root权限时使用sudo命令
- 尽可能加密传输:任何网络环境,只要性能和管理上可行,均考虑使用加密的传输协议
操作系统
1. 账号和口令
在类Unix系统中,如果攻击者获取特定的Shell访问权限,会带来很多安全问题,因此需要设定严格的策略来限制账号的使用,特别是保护Root账号权限不被随意获取。本章节提出了账号和访问控制方面的配置规范和策略。
1.1 禁用或删除无用账号
- 减少系统无用账号,降低安全风险。
userdel -r <用户名> #.删除不必要的账号。
passwd -l <用户名> #.锁定不必要的账号。
passwd -u <用户名> #.解锁必要的账号。
1.2. 检查空口令账号
- 检查是否存在空口令的账号,使用
passwd <用户名>
为空口令账号设置密码
awk -F: '($2 == "") {print}' /etc/shadow #.检查空密码的用户
1.3. 检查弱口令账号
- 询问管理员是否存在如下类似的简单用户密码配置,比如:
root/root,test/test,root/root1234
1.4 检查UID为0的账号
- 检查是否存在root权限的账号,UID为0的任何用户都拥有系统的最高特权,保证只有root用户的UID为0
awk -F: '($3 == "0") {print}' /etc/passwd #.确保所有非ROOT账号的UID都不是0
1.5 检查系统服务账号
- 检查UID大于0小于500的系统账号,是否有存在可登陆的情况:
awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd
- 对于已经明确的系统账号可以使用如下命令锁定账号且禁用shell
# usermod --lock <用户名>
# usermod -s /sbin/nologin <用户名>
1.6 设置密码复杂度及过期策略[审计]
- 对于采用静态口令认证技术的设备,口令长度至少8位,并包括数字、小写字母、大写字母和特殊符号4类中至少3类,且口令至少90天更换1次;
- 配置密码策略,避免使用空、弱口令或默认口令,降低密码被暴力破解的可能性。推荐如下策略[审计]:
密码最短长度:8位
密码复杂度:开启
最大失败登录次数:3次
密码有效期:90天
密码历史:3个
空闲时间自动登出系统:15分钟
强制修改初始密码:开启
- 针对新创建的用户,修改 /etc/login.defs 配置文件[审计]
sed -i '/^PASS_MAX_DAYS/c PASS_MAX_DAYS 90' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/c PASS_MIN_DAYS 1' /etc/login.defs
sed -i '/^PASS_MIN_LEN/c PASS_MIN_LEN 8' /etc/login.defs
sed -i '/^PASS_WARN_AGE/c PASS_WARN_AGE 7' /etc/login.defs
cat /etc/login.defs | grep PASS
#.参数解析
PASS_MAX_DAYS 90 #.新建用户的密码最长使用天数,默认99999
PASS_MIN_DAYS 1 #.新建用户的密码最短使用天数,默认0
PASS_MIN_LEN 8 #.新建用户的密码最少字符,默认5
PASS_WARN_AGE 7 #.新建用户的密码到期提前提醒天数,默认7
- 针对已经存在的账号,使用 chage 命令修改用户设置
#.将某用户的密码最短使用天数设为7,最长使用天数设为90,密码2030年1月1日过期,过期前七天警告用户。
chage -m 7 -M 90 -E 2030-01-01 -W 7 <用户名>
1.7 设置连续登录失败锁定
- Centos7.设置用户登录失败3次,锁定用户5分钟(★只是限制了用户从tty登录,而没有限制远程登录)
vim /etc/pam.d/login
#%PAM-1.0(★放到auth行的最上面)
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=300
- Centos7.用户登录失败3次,锁定用户5分钟(★限制远程登录)[审计]
vim /etc/pam.d/sshd
#%PAM-1.0(★放到auth行的最上面)
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root root_unlock_time=300
- 查看用户登录失败次数,以及解锁指定用户
pam_tally2 --user root
pam_tally2 -r -u root
1.8 设置历史密码重用及密码复杂度[审计]
- 建议更新的口令至少3次内不能重复
cat /etc/pam.d/system-auth | grep password
#.推荐
password requisite pam_cracklib.so retry=5 difok=3 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 dictpath=/usr/share/cracklib/pw_dict
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=3
password required pam_deny.so
#.参数解析
retry=3 #.修改密码,可以重试的次数
difok=3 #.新密码与旧密码不同的字符个数
minlen=8 #.新密码最小长度
dcredit=-1 #.数字个数。大于0,最多;小于0,最少
ucredit=-1 #.大写字母个数。大于0,最多;小于0,最少
lcredit=-1 #.小写字母个数。大于0,最多;小于0,最少
ocredit=-1 #.特殊字符个数。大于0,最多;小于0,最少
dictpath=$PATH #.密码字典
remember=3 #.禁止使用最近用过的密码个数
1.9 将非登录用户的Shell设为/sbin/nologin[审计]
usermod -s /sbin/nologin sync
usermod -s /sbin/nologin shutdown
usermod -s /sbin/nologin halt
cat /etc/passwd | egrep "(sync|shutdown|halt)"
1.10 设置Shell超时登录[审计]
- 如果Linux系统没有运行X Windows,仅使用Shell登陆,需要为其设定Shell超时登陆功能。设置空闲时间自动登出系统:15分钟
sed -i "s/#TMOUT/TMOUT/" /etc/profile
if [ `cat /etc/profile | grep TMOUT | wc -l` -gt 0 ];then sed -i '/^TMOUT/c TMOUT=900' /etc/profile; fi
if [ `cat /etc/profile | grep TMOUT | wc -l` -eq 0 ];then echo "TMOUT=900" >> /etc/profile; echo "export TMOUT" >> /etc/profile; fi
cat /etc/profile | grep TMOUT
1.11 设置远程SSH登录超时
- 若使用SecureCRT、putty等SSH客户端连接Linux服务器,应配置ssh登录超时:15分钟
sed -i "s/#ClientAliveInterval/ClientAliveInterval/" /etc/ssh/sshd_config
sed -i '/^ClientAliveInterval/c ClientAliveInterval=60' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep ClientAliveInterval || echo "ClientAliveInterval=60" >> /etc/ssh/sshd_config
sed -i "s/#ClientAliveCountMax/ClientAliveCountMax/" /etc/ssh/sshd_config
sed -i '/^ClientAliveCountMax/c ClientAliveCountMax=15' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep ClientAliveCountMax || echo "ClientAliveCountMax=15" >> /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | egrep "(ClientAliveInterval|ClientAliveCountMax)"
systemctl restart sshd.service
参数解释
ClientAliveInterval=60 #.每隔m秒给SSH客户端发送一次信号,默认0不发送
ClientAliveCountMax=15 #.超过n次超时后断开与SSH客户端连接。两个设置合起来,则代表 m*n 秒后断开ssh连接
1.12 限制用户su
- 修改 /etc/pam.d/su 配置文件,限制能su到root的用户
cat /etc/pam.d/su | grep required
#.推荐
auth required pam_wheel.so group=test #.只允许test组用户su到root
1.13 禁止root用户直接登录
先创建非root管理员账号并配置密码,防止无法远程登录
userdel -r dba_admin useradd dba_admin -g root -d /home/dba_admin echo "Aa@123456" | passwd dba_admin --stdin
设置 PermitRootLogin 为 no(默认注释yes),不允许root用户直接登录,需重启sshd服务生效
cat /etc/ssh/sshd_config | grep PermitRootLogin service sshd restart
1.14 强制用户首次登陆修改密码
chage -d 0 <用户名>
-d 0 user01设置该用户密码是在1970年1月1日更改的,这实际上是让当前密码立即到期,从而让密码在下一次登录时被更改
1.15 检查wheel组账号
- 执行下列命令,确保wheel组名存在,且所列出的账号为已授权的使用su权限的账号
grep ^wheel /etc/group
- 编辑
/etc/pam.d/su
文件,确认、添加或者修改下列内容:
auth required pam_wheel.so use_uid
1.16 设置密码Hash算法为SHA-512
- CentOS的默认密码Hash算法为MD5,版本5.2之后,都支持了SHA-256和SHA-512。为了提高加密的算法安全性,建议新安装的系统均改为SHA-512算法。对于老系统,如果修改了下列配置,则必须修改所有账号的密码才能正常登陆。
#.1.修改PAM模块,编辑/etc/pam.d/system-auth 文件,找到passwod配置,修改为下列内容
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
#.2.编辑/etc/login.defs文件,找到并修改下列配置
MD5_CRYPT_ENAB no
ENCRYPT_METHOD SHA512
#.3.修改/etc/libuser.conf,找到并修改下列配置
crypt_style = sha512
2. 服务加固
2.1 禁用不需要的开机启动服务
- 查看系统默认的启动服务
chkconfig --list | grep ":on"
- 关闭指定的系统启动服务
chkconfig <服务名> off
2.2 卸载不安全的服务
- 对于一些不需要的服务,应该对其进行卸载,以防止其被误操作或者恶意打开。
#.建议卸载:Inetd、Xinetd、Telnet、rsh、ypbind、TFTP、TALK
yum erase -y inetd xinetd
yum erase -y telnet-server telnet
yum erase -y rsh-server rsh
chkconfig ypbind off && yum erase -y ypserv
yum erase -y tftp-server
yum erase -y talk-server talk
2.3 禁止普通用户使用crontab命令
- 配置以白名单的方式限制cron用户,比如只允许www用户使用crontab
rm -f /etc/cron.deny
echo "www" >> /etc/cron.allow
2.4 SSH服务安全[审计]
- 对SSH服务进行安全加固,防止暴力破解成功。比如设置允许密码错误次数为3(默认注释6次):
sed -i '/MaxAuthTries/c MaxAuthTries 3' /etc/ssh/sshd_config
cat /etc/ssh/sshd_config | grep MaxAuthTries
service sshd restart
- 更多 sshd_config 配置可参考如下:
#.禁用root远程登陆
PermitRootLogin no
#.可以允许哪些特定用户登录
#AllowUsers [username]
#.设置协议版本为2
Protocol 2
#.超时退出 900 秒
ClientAliveInterval 60
ClientAliveCountMax 15
#.禁用HOST Base认证
HostbasedAuthentication no
#.禁用空密码
PermitEmptyPasswords no
#.启用警示信息
Banner /etc/issue
#.只允许使用CTR加密模式(计数模式)
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
#.忽略.rhosts配置(因为不需要rsh服务)
IgnoreRhosts yes
#.指定不常见的端口
Port 23245
#.禁用DNS
UseDNS no
#.限制最大连接数
MaxStartups 20
#.限制用户访问来源网段(举例)
AllowUsers *@192.168.*.*
2.5 启用SELinux
- SELinux是美国国家安全局(NSA)对于Linux的增强实现,由于SELinux对Linux安全的作用极大,因此强烈建议所有的Linux开启SELinux服务。
#.启用SELinux
sed -i '/^SELINUX=/c SELINUX=enforcing' /etc/selinux/config
sed -i '/^SELINUXTYPE=/c SELINUXTYPE=targeted' /etc/selinux/config
/usr/sbin/sestatus | grep SELinux
- 禁用不需要的SElinux Daemons。默认的CentOS支持许多默认的SELinux Daemons,有一些Daemon并不是必要的,并且还会增加系统的安全风险。
#.关闭setroubleshoot
chkconfig setroubleshoot off
yum erase -y setroubleshoot
#.关闭MCS Translation服务
chkconfig mcstrans off
- 检查 SElinux Daemons 配置
#.检查没有被SELinux约束的Daemons,按照正常的配置,没有任何输出
ps -eZ | egrep "initrc" | egrep -vw "tr|ps|egrep|bash|awk" | tr ':' ' ' | awk '{ print $NF }'
#.检查没有被SELinux标记的设备文件,按照正常的配置,没有任何输出
ls -Z | grep unlabeled_t
3. 文件系统
3.1 设置默认的umask值
- 通过修改默认的umask为027,即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。
编辑 /etc/profile 文件,修改或添加如下内容:
umask 027
source /etc/profile
3.2 环境变量 PATH 检查
- Path环境变量如果配置不正确,可能导致一些恶意文件的执行。
- 检查PATH环境变量的安全性,不允许出现空路径,“.”开头的路径,“..”开头的路径,不以“/”开头的路径,以及指向未知应用的路径。
echo $PATH
3.3 隐藏系统登陆警示信息
- 配置/etc/issue可以再常见的终端如SSH、TELNET、FTP中展示系统的警示信息。默认情况下,/etc/issue会显示系统的版本、内核以及主机名。
- 修改/etc/issue,修改默认的信息,并加上警示信息和法律申明,不要显示系统的版本、内核信息。
4. 日志和审计
Linux的日志以及自带的审计功能可以记录许多Linux中的事件,这些事件可以用于Linux的故障分析以及用户的操作行为分析,具有很重要的安全价值,是Linux安全取证的重要一环,配置合理的日志和审计策略有助于提高Linux的安全性。CentOS系统的日志系统一般推荐预装的rsyslog。
4.1 配置使用rsyslog
- 通常 CentOS 预装了rsyslog,且建议使用rsyslog作为Linux默认的日志服务。
#.1.关闭syslog服务,并安装rsyslog服务
yum install -y rsyslog
chkconfig syslog off
chkconfig rsyslog on
#.2.打开 /etc/rsyslog.conf 修改或确认如下内容,确保重要的日志被记录
auth.*,user.* /var/log/messages
kern.* /var/log/kern.log
daemon.* /var/log/daemon.log
syslog.* /var/log/syslog
lpr,news,uucp,local0,local1,local2,local3,local4,local5,local6.* /var/log/unused.log
#.3.确保日志文件的所有者为root,权限为0600
# chown root:root <LOGFILE>
# chmod 0600 <LOGFILE>
4.2 配置Logrotate
- Logrotate服务会定期对日志文件进行压缩和存档操作,防止日志过大占用太多的系统空间,且会将过期的日志文件进行删除
#.打开 /etc/logrotate.d/syslog 确保下列日志文件都在 {} 上面:
/var/log/messages
/var/log/cron
/var/log/secure
/var/log/maillog
/var/log/spooler
/var/log/boot.log
- 如果Linux系统中,还存在其他日志,应尽可能加入到logrotate的服务中,保证其能定期存档
4.3 记录所有用户的登录和操作日志[推荐]
- 修改 /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 777 /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=10000
DT=`date +"%Y%m%d_%H%M%S"`
export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT"
chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
- 加载配置生效
source /etc/profile
通过上述步骤,可以在 /var/log/history 目录下以每个用户为名新建一个文件夹,每次用户退出后都会产生以用户名、登录IP、时间的日志文件,包含此用户本次的所有操作,最多10000条命令。
4.4 配置auditd系统审计
- Auditd 服务用于Linux的系统审计。默认情况下,该服务审计SELinux AVC信息和系统安全相关的信息,如系统登录、账号修改、认证事件等。其中包括su和sudo事件。在auditd默认的配置下,该项服务占用极少和空间和性能,对Linux几乎没有任何影响。强烈建议所有的Linux服务器都开启Audit服务,即使该服务器未启用SELinux。
- 启用auditd服务,并配置auditd服务
chkconfig auditd on
chkconfig --list auditd
sed -i '/^max_log_file /c max_log_file = 10' /etc/audit/auditd.conf
sed -i '/^num_logs /c num_logs = 10' /etc/audit/auditd.conf
sed -i '/^max_log_file_action /c max_log_file_action = rotate' /etc/audit/auditd.conf
sed -i '/^space_left /c space_left = 75' /etc/audit/auditd.conf
sed -i '/^space_left_action /c space_left_action = SYSLOG' /etc/audit/auditd.conf
sed -i '/^admin_space_left /c admin_space_left = 50' /etc/audit/auditd.conf
sed -i '/^admin_space_left_action /c admin_space_left_action = SYSLOG' /etc/audit/auditd.conf
sed -i '/^disk_full_action /c disk_full_action = SUSPEND' /etc/audit/auditd.conf
sed -i '/^disk_error_action /c disk_error_action = SUSPEND' /etc/audit/auditd.conf
cat /etc/audit/auditd.conf
service auditd restart
5. 访问控制
5.1 可信IP地址访问控制
- 在防火墙上开启对数据库访问的ip限制,只允许应用服务器的指定的 IP 地址建立3306的通讯
iptables -nL
6.网络安全及防火墙加固
6.1 Linux内核网络安全加固
- 如果该Linux主机不是扮演Gateway或者Firewall的角色,仅用作普通的应用服务器,应对内核做如下配置加固。
- 编辑 /etc/sysctl.conf 添加或者修改如下内容:
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_messages = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
6.2 禁用不常见的网络协议
- 一些不常见的网络协议如DCCP、SCTP、RDS、TIPC,如果不使用,则应当禁用这些协议。
- 修改
/etc/modprobe.conf
编辑或添加如下内容:
install dccp /bin/true
install sctp /bin/true
install rds /bin/true
install tipc /bin/true
6.3 iptables策略
- 查看当前的iptables设置:
#iptables –L
- 清除所有策略:
#iptables –F && iptables -X && iptables –Z
- 先按照下列策略重新规划iptables,然后再根据服务器的用途开启各种类型的端口。
#.默认拒绝任何输入
iptables -p INPUT DROP
#.默认接受任何输出
iptables -p OUTPUT ACCEPT
#.默认决绝任何转发
iptables -p FORWARD DROP
#.对包进行状态检测,对于TCP连接状态为ESTABLISHED的输入接受
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
#.允许接受LOOP 包
iptables -A INPUT -i lo -j ACCEPT
#.SSH服务,假设ssh端口为22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#.限制ICMP返回包类型
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
#.允许接受ICMP请求
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
6.4 OpenSSL加固
- 较老的OpenSSL存在HeartBleed漏洞,应升级OpenSSL至较新的版本。
#.1.检查OpenSSL版本,如果build on的日期小于2014年6月,则说明存在HeartBleed漏洞。
openssl version –a
#.2.确保yum源服务器更新了最近的软件源,执行下列命令更新,再次检查build ON时间,确保修复该漏洞
#yum –y install openssl
openssl version –a
6.5 禁用DHCP
- 在生产环境,应该禁用HDCP服务而改用静态的方式配置服务器IP。
- 以 eth0 为例,修改
vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置静态ip
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.1.12
GATEWAY=192.168.1.1
- 删除DHCP服务(如果系统不是用于DHCP服务)
yum erase dhcp
数据库
7. 备份与恢复
7.1 完整备份及日志备份的设置与记录[审计]
- [x] 数据备份:开启
- [x] 数据备份保留天数:180天
注:根据《网络安全法》第二十一条(三)项:采取监测、记录网络运行状态、网络安全事件的技术措施,并按照规定留存相关的网络日志不少于六个月;
- [x] 数据备份保留天数:180天
- [x] 日志备份:开启
- [x] 日志备份保留天数:180天
- [x] 本地日志保留时长:24小时
- 截图:一个完整备份周期的数据备份记录
7.2 异地备份的设置与记录[审计]
- [ ] 跨地域备份:开启
- [x] 跨地域备份保留:180天,下载到本地保存亦可
- [ ] 跨地域日志备份:开启
7.3 数据库恢复性测试[审计]
7.4 定时任务的执行记录及异常处理记录
- 数据库定时任务的检查结果列表(excel打印后由DBA及领导签字)
8. 数据库的安全配置基线
8.1 数据库密码策略[审计]
- 配置密码策略,避免使用空、弱口令或默认口令,降低密码被暴力破解的可能性。操作系统和数据库的账户口令策略应符合相关管理规定,建议:
1. 口令应符合以下条件:数字、大写字母、小写字母、特殊符号4类中至少3类,并且混排无规律的方式;
2. 口令的长度至少为8位;
3. 口令至少90天更换1次,更新的口令至少3次内不能重复。
- [ ] 设置密码复杂度,临时生效请参考
注:账号策略是由系统层面相应的策略控制,所以阿里云RDS不支持安装validate_password对应的插件,也不提供参数修改。
- [ ] 设置密码复杂度,临时生效请参考
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
set global validate_password_policy=1;
set global validate_password_length=8;
set global validate_password_mixed_case_count=1;
set global validate_password_number_count=1;
set global validate_password_special_char_count=1;
SHOW VARIABLES LIKE 'validate_password%';
- [ ] 设置密码复杂度,永久生效请修改 /etc/my.cnf
# 密码复杂度审计
plugin-load=validate_password.so
validate-password=ON # ON/OFF/FORCE/FORCE_PLUS_PERMANENT: 是否使用及强制/永久强制使用插件
validate_password_policy = 1 # 0(LOW,只验证长度), 1(默认MEDIUM,验证长度/数字/大小写/特殊字符), 2(STRONG,额外验证字典文件)
validate_password_length = 8 # 密码最小长度
validate_password_mixed_case_count = 1 # 至少包含大/小写字母的总个数
validate_password_number_count = 1 # 至少包含的数字个数
validate_password_special_char_count = 1 # 至少包含的特殊字符数
8.2 运行账号安全[审计]
- 禁止以root账号运行mysqld,在/etc/my.cnf中设置
[mysqld]
user = mysql
- 检查进程属主和运行参数是否包含--user=mysql类似语句
ps -ef | grep mysqld
grep -i user /etc/my.cnf
8.3 安全日志完备性[审计]
- mysql安全日志完备性要求:打开/etc/my.cnf,配置日志记录文件(binlog日志、错误日志、慢查询日志),保存后重启mysql服务
show variables where variable_name in ('log_bin','log_error','slow_query_log_file');
8.4 敏感数据的脱敏设置
- 对敏感数据的拉取流程,必须配置脱敏规则,比如手机号码中间4位做**遮掩
8.5 可信IP地址访问控制
- 数据库访问控制,只有通过指定IP地址段的用户才可以登录
mysql> GRANT ALL PRIVILEGES ON db.* TO 用户名@'IP子网/掩码';
9. 参数设置
9.1 连接数设置[审计]
- [ ] 根据机器性能和业务需求,在/etc/my.cnf中设置最大连接数
注:阿里云rds的max_connections是实例规格绑定的,不提供参数修改。
- [ ] 根据机器性能和业务需求,在/etc/my.cnf中设置最大连接数
[mysqld]
max_connections=2500
9.2 超时参数设置[审计]
- [ ] 超时设置:
连接超时不超过30s,wait_timeout不超过30分钟,待讨论。
- [ ] 超时设置:
connect_timeout=10
wait_timeout=86400
云端审计
10. 阿里云安全
10.1 漏洞扫描服务
- 通过漏洞扫描器对指定的远程或者本地计算机系统进行安全脆弱性检测,提供专业漏洞扫描报告,漏洞扫描结果由专家提供解读及指导服务。
#.1.对企业内部网络、主机等进行专业漏洞扫描
企业内部网络、主机、系统、中间件、应用等进行专业漏洞扫描
#.2.提供专业的漏洞扫描报告
针对扫描的的结果形成专业的漏洞扫描报告。
#.3.对漏洞进行归类,并提出修复建议
对扫出来的安全漏洞进行归类,并提出修复建议。
#.4.提供解读咨询及服务
提供安全专家漏洞扫描报告解读咨询及服务。
#.5.服务交付
提供专业的漏洞扫描服务报告。
10.2 sql洞察[审计]
- [x] SQL洞察:开启(原SQL审计)
- [x] SQL洞察存储时长:180天
10.3 dms工单流程合理性
- dms工单的审批流程及合理性
- 拉取一段时间内已完成的dms工单清单,并随机抽取验收审批流程(是否遵守既定流程)
10.4 访问控制 RAM 账号与口令[审计]
- 集中授权、集中审计提供可靠的原始数据
- [x] 账号管理:高权限账号与普通账号分离
- [x] 限制拥有admin权限的RAM子账号
10.5 操作审计
- 分析操作记录整体安全运行态势、实现全生命周期的日志管理
11 青藤云安全
青藤云安全以服务器安全为核心,采用自适应安全架构,将预测、防御、监控和响应能力融为一体,构建基于主机端的安全态势感知平台,为用户提供持续的安全监控、分析和快速响应能力,帮助用户在公有云、私有云、混合云、物理机、虚拟机等多样化的业务环境下,实现安全的统一策略管理,有效预测风险,精准感知威胁,提升响应效率,全方位保护企业数字资产的安全与业务的高效开展。
- 主机安全运营服务,基于主机安全产品
- XDR深度检测分析服务
- 威胁狩猎分析服务
- 红队评估服务
- 渗透测试服务
附录
- 此文档更新于 2023-02-22
- 参考[1]:阿里云 - Linux操作系统加固