安全管理
防病毒软件例行检查
定期进行对集群的防病毒扫描,防病对软件例行检查会帮助集群免受病毒、恶意代码、间谍软件以及恶意程序侵害,减少系统瘫痪、信息泄露等安全风险。可以使用业界主流的防病毒软件进行防病毒检查。
漏洞修复
为了保证生产环境的安全,降低被供给的风险,请定期修复以下漏洞:
- 操作系统漏洞
- DPDK漏洞
安全配置基线
请参见安全检查。
日志管理
日志使用
安装K-NET RPM包后,K-NET日志是通过rsyslog重定向输出到/var/log/knet/knet_comm.log中,由操作系统的rsyslog服务管理。其中K-NET日志重定向配置文件默认在/etc/rsyslog.d/knet_rsyslog/conf。
日志查看方式如下:
-
转储后日志解压方式,在root用户下执行,以日志文件“knet_comm.log.1.gz”为例。
gzip -dv knet_comm.log.1.gz回显如下:
knet_comm.log.1.gz: 98.6% -- replaced with knet_comm.log.1解压后文件名:
-r------- 1 root root 2097381 Mar 14 09:06 knet_comm.log.1 -
日志查看命令:
vim /var/log/knet/knet-comm.log或者
tail -f /var/log/knet/knet-comm.log
日志约束
日志管理
在日志管理中请关注以下两点:
- 检查系统是否可以限制单个日志文件的大小。
- 检查日志空间占满后,需确保由机制进行清理。
日志规格
在/etc/logrotate.d/knet中约束K-NET日志文件达到2MB就会触发knet_rsyslog.conf,进而触发Lograte(转储),转储后的日志为“knet_comm.log-序号.gz”。达到10个日志文件或者365天后,就会删除最旧的日志。
| 项目 | 限制 |
|---|---|
| 单个日志文件大小 | 2MB |
| 保留日志个数 | 10个 |
| 保留最长时间 | 365天 |
日志转储
启用日志转储时,部分设备需检查SELinux。部分环境开启SELinux,rsyslog服务没有足够权限访问logrotate,从而导致日志无法继续转储。
-
请参见SELinux配置。
-
重启rsyslog。
systemctl restart rsyslog
Capability
为消减安全风险,根据最小权限原则,K-NET业务进程使用非root用户运行。但部分需要root用户权限的操作使用了Capability机制,具体使用的Capability如下:
- CAP_DAC_OVERRIDE:忽略文件的DAC访问控制。初始化DPDK、DPDK大页内存申请和释放操作。
- CAP_DAC_READ_SEARCH:忽略文件读权限检查,忽略目录搜索权限,用于绕过文件访问控制权限,访问/proc/self/pagemaps。
- CAP_IPC_LOCK:允许锁定共享内存片段,用于DPDK初始化的内存大页锁定操作。
- CAP_SYS_ADMIN:允许执行系统管理任务,加载或卸载文件系统,设置磁盘等,用于DPDK初始化时读取/proc/self/pagemaps。
- CAP_NET_ADMIN:允许执行网络管理任务,用于创建和配置tap口。
- CAP_SYS_RAWIO:允许进程直接访问硬件端口和内存,DPDK初始化时访问/dev/vfio/noiommu-0所需,VFIO的No-IOMMU模式所需。
- CAP_NET-RAW:允许硬件进行数据通信、通道初始化时,需要CAP_NET_RAW权限。
安装时仅配置了“Permitted”,这些Capability不会随进程启动生效。仅在初始化和管理面操作时,业务进程会自动配置“Effective”,使用完成后会立即删除Effective配置。 K-NET业务进程使用非root用户运行,由于redis-server设置了Capability,需要给libknet_frame.so设置set-user-id权限才能够使LD_PRELOAD生效。
- set-user-id:ld.so要确保只有被系统明确允许、能够提升权限的动态库才能被preload。
当可执行程序被设置了Capability,Linux的安全特性要求,LD_PRELOAD环境变量使用需满足以下三个条件:
- LD_PERLOAD环境变量指定的库文件不能包含斜线“/”。
- 库文件只会从标准路径下加载。
- 库文件必须使能set-user-id位。
SELinux配置
说明
- Linux系统默认开启的SELinux安全机制会显示K-NET部分功能,导致无法正常使用K-NET业务。这是Linux OS本身的行为。如果用户需在自己系统中使用SELinux,则需自行寻找解决方法。
- 针对此限制,提供快速禁用SELinux的方法。
- 禁用SELinux可能会导致安全问题,若用户最终解决方案本身没有规划启用SELinux,建议通过端到端的整体方案弥补SELinux关闭带来的风险,且需自行承担安全风险。若用户有SELinux的需求,建议根据实际的SELinux问题进行细粒度的规则配置,并保证整个系统的安全。
以下操作示例是在虚拟机侧使用root用户执行。
临时关闭SELinux
-
关闭SELinux。
setenforce 0 -
查看SELinux状态。
sestatus回显中的“SELinux Status”为“enabled”,"Current mode"变为“permissive”。
SELinux Status: enabled Current mode: permissive
永久关闭SELinux
永久关闭需重启设置的服务器才能生效。
sed -i "s/SELINUX=enforcing/SELINUX=disabled" /etc/selinux/config