1、安全计算环境
1)数据库、服务器未配置口令复杂度策略。
OS
系统编辑文件/etc/pam.d/system-auth,是否存在如下配置:
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8
Mysql
show variables like 'plugin_dir';
show plugins;
安装密码插件
install plugin validate_password soname 'validate_password.so';
密码策略参数
mysql>show variables like 'validate%';
#永久生效
[mysqld]
plugin-load-add=validate_password.so
#服务器在启动时加载插件,并防止在服务器运行时删除插件。
validate-password=FORCE_PLUS_PERMANENT
卸载插件
uninstall plugin connection_control_failed_login_attempts
建议强制配置口令的复杂度策略(复杂度包含字母大小写,数字,特殊字符,密码长度八位以上),防止口令被轻易破解。
2)数据库、服务器未配置口令有效期策略。
建议配置数据库口令有效期策略,最短更改时间及最长更改时间(最长建议三个月,最短时间不要是0天)。
OS
查看文件/etc/login.defs( more /etc/login.defs),检查如下参数值是否满足要求:
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数不大于90
PASS_MIN_DAYS 10 #新建用户的密码最短使用天数为10
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数为7
mysql
alter user 'root'@'%' password expire interval 90 day;
3)服务器、数据库未配置登录失败处理及连接超时自动退出策略。
建议配置登录失败处理策略,防止恶意人员暴力破解账户口令。并配置登录连接超时策略,降低设备被非授权访问的风险。
OS
编辑文件/etc/pam.d/system-auth
auth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=180
mysql
#登录错误次数限制插件
install plugin connection_control soname "connection_control.so";
#为了把错误次数记录到表中
install plugin connection_control_failed_login_attempts soname 'connection_control.so';
#设置策略
set global connection_control_failed_connections_threshold = 5;
set global connection_control_max_connection_delay = 1800000;
set global connection_control_min_connection_delay = 1800000;
#永久生效
[mysqld]
plugin-load-add = connection_control.so
connection-control = FORCE
connection-control-failed-login-attempts = FORCE
connection_control_min_connection_delay = 1000
connection_control_max_connection_delay = 86400
connection_control_failed_connections_threshold = 3
4)服务器存在共享账户。
建议为每个管理员分别创建不同账户,保证不同管理员使用不同账户进行管理。
新建账号
5)所有运维人员均通过一个账户登录服务器系统,未对su和sudo命令的使用进行限制。
建议配备专职的安全管理员,由安全管理员配置访问控制策略,并规定主体对客体的访问规则,严格限制su和sudo命令的使用。
#一定要注意测试号加入wheel的用户,能够顺利的登录,否则不能远程su到root了。
usermod -G wheel sysadmin
[root@host ~]# vim /etc/pam.d/su
auth required pam_wheel.so use_uid
6)服务器未关闭80端口。
建议关闭非必要端口。
更改对外端口。
7)服务器仅设置了系统管理员账户,未设置安全管理员、审计管理员等账户,未实现管理用户的权限分离。
建议建立安全员、审计员账户,并根据业务需要设置各账户的权限,实现管理权限最小化。
新建系统管理员
useradd sysadmin
passwd sysadmin
#visudo
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
sysadmin ALL=(root) SOFTWARE,SERVICES
安全管理员
useradd secadmin
passwd secadmin
#visudo
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
secadmin ALL=(root) DELEGATING,PROCESSES,NETWORKING
审计管理员
useradd auditadmin
passwd auditadmin
#visudo
auditadmin ALL=(root) NOPASSWD:/usr/sbin/aureport,NOPASSWD:/usr/sbin/autrace,NOPASSWD:/usr/sbin/ausearch,NOPASSWD:/usr/sbin/audispd,NOPASSWD:/usr/sbin/auditctl
#审计管理员的权限
auditadmin ALL=(root) NOPASSWD:/usr/sbin/aureport,NOPASSWD:/usr/sbin/autrace,NOPASSWD:/usr/sbin/ausearch,NOPASSWD:/usr/sbin/audispd,NOPASSWD:/usr/sbin/auditctl
#系统管理员
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
sysadmin ALL=(root) SOFTWARE,SERVICES,STORAGE
#安全管理员
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
secadmin ALL=(root) DELEGATING,PROCESSES,NETWORKING
8)服务器未保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。(高风险)
建议应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除(history,历史命令建议不能查看之前输入的命令)。
sed -ri "s/HISTSIZE=(.*)/HISTSIZE=0/g" /etc/profile
vim /etc/profile
HISTSIZE=0
source /etc/profile
HISTFILESIZE:定义了.bash_history文件所保存的命令数
HISTSIZE:定义了history命令输出的命令数
root用户在/etc/skel/.bash_logout中添加代码:
rm -f $HOME/.bash_history
9)未通过敏感标记进行强制访问控制。
建议setatus开启为Enforcing模式。
不建议开启
10)未限制服务器root的访问权限。
建议将PermitRootLogin配置为no。
#新加了普通账号后
cp /etc/ssh/sshd_config /etc/ssh/sshd_configbak
sed -i '30 a PermitRootLogin no' /etc/ssh/sshd_config
systemctl restart sshd
11)数据库未开启安全审计行为,不能对行为进行监控。(高风险)
建议数据库开启安全审计,对操作行为进行审计、对日志进行保护,定期进行备份,保存6个月以上。
show variables like 'general%'; -- 查看日志是否开启
show variables like 'log_output'; -- 看看日志输出类型 table或file
set global general_log=on; -- 开启日志功能
set global general_log_file='tmp/general.lg'; -- 设置日志文件保存位置
set global log_output='file'; -- 设置输出类型为file
#永久生效
[mysqld]
general-log=1
#日志切割设置,利用logrote实现一天一个压缩日志。
cp support-files/mysql-log-rotate /etc/logrotate.d/
vim /etc/logrotate.d/mysql-log-rotate
chmod 644 /etc/logrotate.d/mysql-log-rotate
logrotate -f /etc/logrotate.conf
12)数据库未配备网络管理员,安全管理员。
建议配置网络管理员,安全管理员及系统管理员,且分配相应权限。
MySQL可以通过创建不同的用户和角色来配备网络管理员和安全管理员。
1. 创建网络管理员用户
可以使用以下命令创建一个具有网络管理员权限的用户:
```
CREATE USER 'netadmin'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'netadmin'@'localhost';
```
这将创建一个名为“netadmin”的用户,并授予该用户在所有数据库和表上执行任何操作的权限。
2. 创建安全管理员用户
可以使用以下命令创建一个具有安全管理员权限的用户:
```
CREATE USER 'secadmin'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'secadmin'@'localhost';
```
这将创建一个名为“secadmin”的用户,并授予该用户在MySQL系统数据库上执行SELECT、INSERT、UPDATE和DELETE操作的权限。
3. 创建角色
除了创建用户,还可以创建角色来分配权限。可以使用以下命令创建一个名为“netadmin_role”的角色,并将其授予在所有数据库和表上执行任何操作的权限:
```
CREATE ROLE 'netadmin_role';
GRANT ALL PRIVILEGES ON *.* TO 'netadmin_role';
```
然后,可以将“netadmin”用户添加到“netadmin_role”角色中:
```
GRANT 'netadmin_role' TO 'netadmin'@'localhost';
```
这将使“netadmin”用户继承“netadmin_role”的所有权限。
类似地,可以创建一个名为“secadmin_role”的角色,并将其授予在MySQL系统数据库上执行SELECT、INSERT、UPDATE和DELETE操作的权限:
```
CREATE ROLE 'secadmin_role';
GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO 'secadmin_role';
```
然后,可以将“secadmin”用户添加到“secadmin_role”角色中:
```
GRANT 'secadmin_role' TO 'secadmin'@'localhost';
```
这将使“secadmin”用户继承“secadmin_role”的所有权限。
13)抗DDOS未启用
建议启用抗DDOS
DDoS攻击是一种网络攻击,旨在通过向目标服务器发送大量流量来使其无法正常工作。为了保护Linux服务器免受DDoS攻击的影响,可以采取以下措施:
1. 安装DDoS防护软件:例如ModSecurity、Fail2ban、DDoS Deflate等软件可以帮助防止DDoS攻击。
2. 配置防火墙:使用iptables或firewalld等防火墙软件,可以限制来自特定IP地址或端口的流量,从而减少DDoS攻击的影响。
3. 使用CDN:使用CDN(内容分发网络)可以将流量分散到多个服务器上,从而减轻服务器的负载,防止DDoS攻击。
4. 限制连接数:通过限制每个IP地址的连接数,可以减少DDoS攻击的影响。
5. 使用反向代理:使用反向代理可以将流量分散到多个服务器上,从而减轻服务器的负载,防止DDoS攻击。
6. 更新软件和补丁:及时更新服务器上的软件和补丁,可以减少DDoS攻击的风险。
7. 使用云防火墙:使用云防火墙可以在云端对流量进行监控和过滤,从而保护服务器免受DDoS攻击的影响。