1、Linux系统安装完后的优化操作
作为给数据库使用的操作系统,需要对相关的功能进行配置后,才能达到数据库的性能要求。现在国产数据库底层的OS大多都是麒麟V10,后面就以这个操作系统来说明。
一、服务管理(停止并禁用非必要服务)
临时停止服务
systemctl stop cups # 停止CUPS打印服务(无需打印功能时释放资源)
systemctl stop postfix # 停止Postfix邮件服务(无邮件需求时关闭)
systemctl stop pcscd # 停止智能卡服务(无智能卡设备时禁用)
systemctl stop smartd # 停止硬盘健康监控服务(简化环境可关闭)
systemctl stop alsasound # 停止音频服务(服务器环境无需声音功能)
systemctl stop iscsitarget # 停止iSCSI目标服务(不提供iSCSI存储时关闭)
systemctl stop smb # 停止Samba文件共享服务(无Windows文件共享需求时关闭)
systemctl stop acpid # 停止电源管理服务(固定电源设备可禁用)
systemctl stop iptables # 停止IPv4防火墙(若使用firewalld则需关闭)
systemctl stop ip6tables # 停止IPv6防火墙(不使用IPv6时关闭)
systemctl stop firewalld # 停止firewalld防火墙(若使用其他防火墙策略则关闭)
作用:临时关闭当前环境中不需要的服务,减少内存、CPU 占用,降低潜在攻击面(如关闭未使用的共享服务可避免漏洞利用)。
永久禁用服务(禁止开机自启)
systemctl disable cups # 禁止CUPS服务开机自启
systemctl disable postfix # 禁止Postfix服务开机自启
systemctl disable pcscd # 禁止智能卡服务开机自启
systemctl disable smartd # 禁止硬盘监控服务开机自启
systemctl disable alsasound # 禁止音频服务开机自启
systemctl disable iscsitarget# 禁止iSCSI目标服务开机自启
systemctl disable smb # 禁止Samba服务开机自启
systemctl disable acpid # 禁止电源管理服务开机自启
systemctl disable iptables # 禁止IPv4防火墙开机自启
systemctl disable ip6tables # 禁止IPv6防火墙开机自启
systemctl disable firewalld # 禁止firewalld防火墙开机自启
作用:防止无用服务占用开机时间和系统资源,避免服务默认配置带来的安全风险(如默认启动的服务可能存在未配置的访问权限)。
二、安全加固
禁用 SELinux
sed -i 's/^\(SELINUX=\).*/\1disabled/g' /etc/selinux/config # 永久禁用SELinux(重启后生效)
setenforce 0 # 临时禁用SELinux(立即关闭强制访问控制)
作用:关闭 SELinux 的严格访问控制机制(通常用于避免其对特定应用的兼容性问题,但生产环境建议保持启用并正确配置策略)。
配置系统审计规则
# 开启内核审计功能并启动服务
sed -i 's/audit=0/audit=1/g' /boot/grub2/grub.cfg # 从内核启动参数开启审计功能
systemctl start auditd.service # 启动auditd审计服务
systemctl enable auditd.service # 设置auditd开机自启(确保重启后仍运行)
# 添加核心审计规则(监控关键操作)
echo "-a exit,always -F arch=b64 -S execve -k exec" >>/etc/audit/rules.d/audit.rules # 监控 64 位程序执行(记录所有命令运行)
echo "-a exit,always -F arch=b32 -S execve -k exec" >>/etc/audit/rules.d/audit.rules # 监控 32 位程序执行
echo "-w /etc/crontab -p wa -k crontab" >>/etc/audit/rules.d/audit.rules # 监控定时任务配置文件的写入 / 修改
echo "-w /etc/hosts -p wa -k hosts" >>/etc/audit/rules.d/audit.rules # 监控主机映射文件修改
echo "-w /etc/hosts.allow -p wa -k hosts-allow" >>/etc/audit/rules.d/audit.rules # 监控 TCP 允许列表配置文件修改
echo "-w /etc/hosts.deny -p wa -k hosts-deny" >>/etc/audit/rules.d/audit.rules # 监控 TCP 拒绝列表配置文件修改
echo "-w /etc/fstab -p wa -k fstab" >>/etc/audit/rules.d/audit.rules # 监控文件系统挂载配置文件修改
echo "-w /etc/passwd -p wa -k passwd" >>/etc/audit/rules.d/audit.rules # 监控用户账号文件修改
echo "-w /etc/shadow -p wa -k shadow" >>/etc/audit/rules.d/audit.rules # 监控密码哈希文件修改
echo "-w /etc/group -p wa -k group" >>/etc/audit/rules.d/audit.rules # 监控用户组配置文件修改
echo "-w /etc/gshadow -p wa -k gshadow" >>/etc/audit/rules.d/audit.rules # 监控用户组密码文件修改
echo "-w /etc/ntp.conf -p wa -k ntp" >>/etc/audit/rules.d/audit.rules # 监控 NTP 时间同步配置文件修改
echo "-w /etc/sysctl.conf -p wa -k sysctl" >>/etc/audit/rules.d/audit.rules # 监控内核参数配置文件修改
echo "-w /etc/security/limits.conf -p wa -k limits" >>/etc/audit/rules.d/audit.rules # 监控系统资源限制配置文件修改
echo "-w /boot/grub2/grub.cfg -p wa -k grub" >>/etc/audit/rules.d/audit.rules # 监控 GRUB 启动配置文件修改
echo "-w /etc/ssh/sshd_config -p wa -k ssh" >>/etc/audit/rules.d/audit.rules # 监控 SSH 服务配置文件修改
echo "-w /etc/udev/rules.d/-p wa -k udev" >>/etc/audit/rules.d/audit.rules # 监控 udev 设备规则目录下文件修改
echo "-w /etc/profile -p wa -k profile" >>/etc/audit/rules.d/audit.rules # 监控全局环境变量配置文件修改
echo "-w /etc/kdump.conf -p wa -k kdump" >>/etc/audit/rules.d/audit.rules # 监控内核崩溃转储配置文件修改
echo "-w /etc/lvm/lvm.conf -p wa -k lvm" >>/etc/audit/rules.d/audit.rules # 监控 LVM 逻辑卷配置文件修改
echo "-w /etc/login.defs -p wa -k login-defs" >>/etc/audit/rules.d/audit.rules # 监控登录策略配置文件修改
echo "-w /etc/rsyslog.conf -p wa -k rsyslog" >>/etc/audit/rules.d/audit.rules # 监控系统日志配置文件修改
echo "-w /etc/sysconfig/i18n -p wa -k i18n" >>/etc/audit/rules.d/audit.rules # 监控系统语言配置文件修改
echo "-w /etc/sysconfig/network -p wa -k network" >>/etc/audit/rules.d/audit.rules # 监控网络全局配置文件修改
echo "-w /etc/multipath.conf -p wa -k multipath" >>/etc/audit/rules.d/audit.rules # 监控多路径存储配置文件修改
#仅修改了审计规则(如/etc/audit/rules.d/audit.rules),无需重启服务,直接用auditctl加载新规则即可,这种方式不会中断审计服务运行,也不会丢失审计日志,是最安全的操作:
auditctl -R /etc/audit/rules.d/audit.rules # 重新加载规则文件
auditctl -l # 验证规则是否生效(列出当前加载的规则)
# 调整审计日志参数
sed -i 's/max_log_file = 8/max_log_file = 50/g' /etc/audit/auditd.conf # 单个审计日志最大50MB(默认8MB)
sed -i 's/num_logs = 5/num_logs = 4/g' /etc/audit/auditd.conf # 保留4个日志文件(默认5个)
sed -i 's/flush = INCREMENTAL_ASYNC/flush = NONE/g' /etc/audit/auditd.conf # 关闭异步刷新(提高日志完整性)
# 编辑服务配置文件,注释或修改限制项
vi /usr/lib/systemd/system/auditd.service
# 找到并注释以下两行(或改为no):
RefuseManualStop=no
RefuseManualRestart=no
# 重新加载systemd配置
systemctl daemon-reload
systemctl restart auditd.service # 重启审计服务使配置生效
systemctl restart rsyslog.service # 重启日志服务确保审计日志正确转发
作用:通过记录程序执行、文件修改等关键操作,实现系统行为的可追溯性,便于事后安全审计和入侵排查。
强化密码策略
# 强制密码复杂度(必须包含4类字符)
sed -i 's/dcredit = 0/dcredit = -1/g' /etc/security/pwquality.conf # 密码必须包含数字(dcredit=-1:至少1个数字)
sed -i 's/ucredit = 0/ucredit = -1/g' /etc/security/pwquality.conf # 必须包含大写字母
sed -i 's/lcredit = 0/lcredit = -1/g' /etc/security/pwquality.conf # 必须包含小写字母
sed -i 's/ocredit = 0/ocredit = -1/g' /etc/security/pwquality.conf # 必须包含特殊字符(如!@#等)
sed -i 's/minclass= 3/minclass= 4/g' /etc/security/pwquality.conf # 密码必须覆盖4类字符(数字、大小写、特殊字符)
# 密码加密与历史限制
echo "password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=10" >>/etc/pam.d/system-auth # 使用SHA512加密,禁止重复使用最近10次密码
# 密码有效期与长度限制
sed -i 's/PASS_MAX_DAYS 99999/PASS_MAX_DAYS 365/g' /etc/login.defs # 密码最长有效期365天(原默认无限期)
sed -i 's/PASS_MIN_DAYS 0/PASS_MIN_DAYS 1/g' /etc/login.defs # 密码修改间隔至少1天(防止频繁更换)
sed -i 's/PASS_MIN_LEN 5/PASS_MIN_LEN 8/g' /etc/login.defs # 密码最小长度8位(原默认5位)
chage -M 365 root # 单独设置root用户密码有效期365天(覆盖默认配置)
# 登录失败锁定机制
echo "auth required pam_faillock.so preauth audit deny=6 even_deny_root unlock_time=300" >>/etc/pam.d/system-auth # 连续6次登录失败锁定300秒(包括root用户)
作用:通过强制复杂密码、限制有效期和失败次数,大幅降低暴力破解和弱密码带来的风险。
敏感文件权限控制
chmod 600 /var/log/btmp # 限制失败登录日志权限(仅root可读写,防止未授权用户获取登录尝试信息)
作用:保护/var/log/btmp(记录失败登录)的敏感信息,避免攻击者通过该文件分析登录策略。
SSH 服务安全优化
sed -i 's/#UseDNS no/UseDNS no/g' /etc/ssh/sshd_config # 关闭DNS反向解析(加速SSH登录,避免延迟)
sed -i 's/#PrintLastLog yes/PrintLastLog yes/g' /etc/ssh/sshd_config # 启用最后登录信息显示(便于用户察觉异常登录)
sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config # 最大认证尝试次数3次(减少暴力破解机会)
sed -i 's/#IgnoreUserKnownHosts no/IgnoreUserKnownHosts yes/' /etc/ssh/sshd_config # 忽略用户级known_hosts(增强服务器端控制)
# SSH日志配置
mkdir -p /var/log/sftp/
touch /var/log/sftp/sftp.log
sed -i 's/INFO -f AUTH/INFO -f local5/' /etc/ssh/sshd_config # 调整日志设施为local5
echo "LogLevel INFO" >>/etc/ssh/sshd_config # 明确日志级别
echo "auth,authpriv.*,local5.* /var/log/sftp/sftp.log" >>/etc/rsyslog.conf # 定向SSH日志到专用文件
systemctl restart sshd.service # 重启SSH服务使配置生效
作用:减少 SSH 攻击面(如限制尝试次数),增强可审计性(专用日志文件),提升登录效率。
禁用 Ctrl+Alt+Del 强制重启
cp /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.bak # 备份默认配置
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target # 删除触发文件(禁用快捷键重启)
init q # 重新加载systemd配置(立即生效)
作用:防止物理接触服务器的人员通过键盘快捷键恶意重启系统。
禁用 USB 存储设备
echo -e "blacklist usb-storage" >> /etc/modprobe.d/blacklist.conf # 将USB存储模块加入黑名单
modprobe usb-storage # 强制重新加载模块(使其立即失效)
作用:禁止 USB 闪存等存储设备挂载,防止通过物理设备传入恶意软件或窃取数据。
三、系统环境配置
命令行环境优化
# 命令历史记录增强
echo "HISTTIMEFORMAT='%F %T `whoami` '" >> /etc/bashrc # 记录命令执行时间和用户
source /etc/bashrc # 立即生效(无需重启shell)
# 定制命令提示符
touch /etc/profile.d/lycmd.sh
echo "export PS1='[\t][\u@\h:\w]\$'" >> /etc/profile.d/lycmd.sh # 显示时间(\t)、用户(\u)、主机(\h)、路径(\w)
source /etc/profile.d/lycmd.sh # 立即生效
作用:增强命令行可追溯性(历史记录带时间)和易用性(提示符显示关键信息)。
系统资源限制
# 配置limits.conf(用户级资源限制)
echo "* soft core 102400" >>/etc/security/limits.conf # 核心文件软限制102400块
echo "* hard core 102400" >>/etc/security/limits.conf # 核心文件硬限制102400块(限制崩溃日志大小)
echo "* soft nofile 65535" >>/etc/security/limits.conf # 文件描述符软限制65535(进程可打开的文件数)
echo "* hard nofile 65535" >>/etc/security/limits.conf # 文件描述符硬限制65535
echo "* soft nproc 1024" >>/etc/security/limits.conf # 进程数软限制1024(单个用户最大进程数)
echo "* hard nproc 1024" >>/etc/security/limits.conf # 进程数硬限制1024
作用:防止单个用户或进程过度占用系统资源(如文件句柄耗尽、进程数过多导致系统崩溃)。
内核参数优化
# 调整sysctl内核参数
echo "vm.min_free_kbytes = 67584" >>/etc/sysctl.conf # 保留最小空闲内存67584KB(避免内存耗尽)
echo "vm.vfs_cache_pressure = 100" >>/etc/sysctl.conf # VFS缓存回收压力(100为默认,平衡缓存与进程内存)
echo "vm.dirty_ratio = 40" >>/etc/sysctl.conf # 脏页占总内存40%时强制同步(避免大量脏页拖慢系统)
echo "vm.dirty_background_ratio = 10" >>/etc/sysctl.conf # 后台异步写入脏页触发比例(达到此值时启动后台进程写入,不阻塞应用)
echo "vm.overcommit_memory = 1" >>/etc/sysctl.conf # 内存过度分配策略(允许进程超额申请内存,适合内存密集型应用)
echo "vm.page-cluster = 3" >>/etc/sysctl.conf # 内存页集群大小(影响内存分配效率)
echo "fs.file-max = 838860" >>/etc/sysctl.conf # 系统级最大文件句柄数(支持高并发场景)
echo "net.core.somaxconn = 8192" >>/etc/sysctl.conf # TCP监听队列最大长度(提升并发连接请求处理能力)
echo "net.ipv4.tcp_max_syn_backlog = 8192" >>/etc/sysctl.conf # TCP半连接队列长度(应对高并发连接和SYN Flood攻击)
echo "net.core.netdev_max_backlog = 400000" >>/etc/sysctl.conf # 网络设备接收队列长度(减少高流量下的数据包丢失)
echo "net.ipv4.tcp_tw_reuse = 1" >>/etc/sysctl.conf # 允许重用TIME_WAIT状态的TCP连接(减少端口耗尽问题,适合短连接场景)
echo "kernel.shmmni = 4096" >>/etc/sysctl.conf # 共享内存段最大数量(优化IPC通信)
echo "kernel.sysrq = 1" >>/etc/sysctl.conf # 启用sysrq功能(紧急情况下可通过按键组合调试)
sysctl -p # 立即加载新配置(无需重启)
作用:优化内存管理、文件系统性能和进程调度,提升系统稳定性和响应速度。
禁用透明大页
echo "never" >/sys/kernel/mm/transparent_hugepage/enabled #禁用透明大页,系统仅使用传统 4KB 小页内存。
#永久禁用
cat <<EOF>>/etc/rc.local
if [ -f /sys/kernel/mm/transparent_hugepage/enabled ]; then
echo never>/sys/kernel/mm/transparent_hugepage/enabled
fi
if [ -f /sys/kernel/mm/transparent_hugepage/defrag ]; then
echo never>/sys/kernel/mm/transparent_hugepage/defrag
fi
EOF
作用:数据库缓存(如 InnoDB 缓冲池)、索引查询等操作对内存的访问是随机的,且内存使用频繁(分配 / 释放频繁),容易导致 THP 的大页整理操作阻塞进程,引发查询延迟突增,MySQL、PostgreSQL 等主流数据库的官方文档均明确建议禁用 THP,以避免不可控的性能波动(例如,MySQL 文档指出 THP 可能导致 InnoDB 缓冲池锁等待时间延长)。
定时任务配置调整
sed -i 's/MAILTO=root/MAILTO=""/g' /etc/crontab # 禁用定时任务结果邮件通知(原默认发送给root)
作用:避免大量定时任务(如每分钟执行的脚本)发送邮件占用磁盘空间和邮件服务资源。
会话超时与权限掩码
# 自动断开闲置会话
echo "TMOUT=300" >>/etc/profile # 5分钟(300秒)无操作自动退出shell(减少未授权访问风险)
# 统一权限掩码(umask)
sed -i 's/umask 002/umask 022/' /etc/profile # 全局profile设置umask 022
sed -i 's/umask 002/umask 022/' /etc/bashrc # bash shell配置
echo "umask 022" >> /etc/csh.login # csh登录配置
sed -i 's/umask 002/umask 022/' /etc/csh.cshrc # csh交互配置
作用:TMOUT防止无人值守的会话被滥用;umask 022确保新文件默认权限为644(仅所有者可写)、目录为755(仅所有者可改),增强安全性。
四、时间同步配置
# 配置chrony时间服务器(企业内网同步)
echo "server 11.80.21.11 prefer" >>/etc/chrony.conf # 首选时间服务器(11.80.21.11)
echo "server 11.80.21.12" >>/etc/chrony.conf # 备用时间服务器(11.80.21.12)
echo "maxchange 500 0 -1" >>/etc/chrony.conf # 单次最大时间调整500秒(避免大幅跳变)
echo "maxslewrate 500" >>/etc/chrony.conf # 最大 slew 速率(调整时间的速度限制)
作用:确保系统时间与内网权威服务器同步,保证日志时间、定时任务执行时间的准确性(尤其分布式系统中时间一致性至关重要)。