2、操作系统安全加固:Linux内核参数优化、最小化安装原则、不必要的服务禁用、账户与权限管理

好,咱们进入第二个大块——操作系统安全加固。说实话,POS终端最容易被忽视的就是操作系统层面。很多人觉得,我应用层做好了加密,网络层有防火墙,系统层随便搞搞就行。嗯,这个想法很危险。我见过太多案例,应用层固若金汤,结果被人从系统层直接提权,整个POS机成了别人的跳板。

操作系统安全加固,说白了就是四个字:瘦身、锁门。瘦身就是砍掉一切不需要的东西,锁门就是把该关的口子全部堵死。下面我一个个拆开讲。

2.1 Linux内核参数优化

内核参数优化,很多人一听就觉得是高端操作。其实没那么玄乎。你想想看,POS终端本质上就是一个专用设备,它不需要像通用服务器那样处理各种复杂网络场景。所以我们要做的,就是把那些不必要的网络功能、资源限制给收紧。

我个人习惯,拿到一台POS终端后,第一件事就是调整 /etc/sysctl.conf。这里我列几个最关键的参数:

参数 推荐值 说明
net.ipv4.tcp_syncookies 1 开启SYN Cookie,防止SYN Flood攻击
net.ipv4.ip_forward 0 禁止IP转发,POS终端不需要做路由器
net.ipv4.conf.all.accept_source_route 0 禁止接受源路由包,防止路由欺骗
net.ipv4.conf.all.rp_filter 1 开启反向路径过滤,防止IP欺骗
kernel.exec-shield 1 开启执行保护,防止缓冲区溢出攻击
kernel.randomize_va_space 2 开启ASLR(地址空间布局随机化)

核心原则:POS终端不是通用服务器,能关的功能全部关掉。你多开一个功能,就多一个被攻击的入口。

我记得有一次,一个客户反馈他们的POS终端经常被扫描到开放了某个高危端口。排查了半天,发现是内核参数 net.ipv4.conf.all.accept_redirects 没关,导致ICMP重定向攻击有机可乘。从那以后,我每次做内核加固都会把这条加进去。

配置完参数后,记得执行 sysctl -p 使其生效。嗯,这里要注意,有些参数修改后需要重启才能完全生效,比如 kernel.exec-shield。建议你在终端上线前统一做一次重启验证。

2.2 最小化安装原则

最小化安装,这个原则听起来简单,做起来其实挺考验功力的。什么叫最小化?就是只装POS业务必须的软件包,多一个都不要。

我见过很多POS终端,出厂时预装了一堆东西:Apache、MySQL、FTP、甚至还有桌面环境。你想想看,一个POS机要Apache干什么?要MySQL干什么?这些东西不仅占用资源,更重要的是它们带来了大量的攻击面。

具体怎么做?我建议从这几个方面入手:

  • 操作系统选择:优先使用专为嵌入式设计的Linux发行版,比如Yocto、Buildroot构建的定制系统。如果必须用通用发行版,选最小化安装选项。
  • 软件包管理:安装完成后,用 rpm -qadpkg -l 列出所有已安装的包,逐项审查。不确定用途的包,一律先查清楚再决定是否保留。
  • 开发工具链:GCC、Make、Perl、Python等开发工具,在POS终端上完全不需要。生产环境必须移除。
  • 文档和示例:系统自带的man手册、示例配置文件、HTML文档等,全部删除。

我的经验:我曾经接手过一个项目,POS终端上居然装了X11图形界面。问原因,说是为了方便调试。结果呢?调试没用到几次,反而被人利用X11的漏洞搞了一次提权。所以,调试工具只在调试阶段存在,上线前必须清理干净。

这里我提供一个简单的检查脚本思路:

#!/bin/bash
# 列出所有非系统核心包,供人工审查
rpm -qa --queryformat '%{NAME}\n' | sort > /tmp/all_packages.txt
# 对比白名单,输出可疑包
comm -23 /tmp/all_packages.txt /etc/security/whitelist_packages.txt

白名单文件需要你自己维护,里面只放POS业务必须的包名。其他的一律视为可疑。

2.3 不必要的服务禁用

服务禁用,是最容易出效果的一步。你想想看,一个POS终端需要哪些服务?基本上就是:网络通信服务(比如SSH用于远程维护)、POS应用服务、日志服务。其他的,比如打印服务(除非是专用票据打印机)、蓝牙服务、NFS、Samba、Telnet、FTP,统统禁用。

我建议用 systemctl list-unit-files --type=service 列出所有服务,然后逐个检查。下面是我常用的禁用清单:

  • 远程管理类:Telnet(明文传输,绝对不能用)、FTP(同上)、rsh/rlogin(老旧协议)
  • 文件共享类:NFS、Samba、NetBIOS
  • 打印类:CUPS(除非POS需要本地打印)
  • 蓝牙/红外:bluetooth、irda
  • 自动挂载:autofs、udisks2
  • 其他:Avahi(mDNS)、NTP(如果POS不需要精确时间同步)

警告:禁用服务前,一定要确认该服务不是POS业务依赖的。我曾经见过有人把SSH禁用了,结果远程维护通道全断,最后只能派人去现场一台台恢复。建议先做影响评估,再动手。

禁用服务的命令很简单:

systemctl stop <service_name>
systemctl disable <service_name>

但这里有个坑——有些服务是其他服务的依赖,你禁用了它,可能导致连锁反应。所以我的习惯是:先 systemctl mask 而不是直接 disable。mask 会创建一个指向 /dev/null 的符号链接,彻底阻止服务启动,但不会影响依赖关系检查。等确认没问题了,再改成 disable。

2.4 账户与权限管理

账户和权限,这是操作系统安全最后一道防线。POS终端上,账户管理要遵循一个原则:最小权限、最小数量

具体来说:

  • 删除不必要的账户:系统安装时默认创建的那些账户,比如games、ftp、nobody(如果不用)、lp等,全部删除或锁定。
  • root账户管理:禁止root直接SSH登录。POS终端日常运维应该使用普通账户,需要提权时用sudo。
  • 密码策略:设置密码复杂度、过期时间、失败锁定。POS终端的密码策略可以比通用服务器更严格,因为它的使用场景更可控。
  • sudo权限控制:只给运维人员必要的sudo权限,不要给ALL。比如,只允许执行特定的维护脚本。

我举个例子,sudo权限配置:

# 在 /etc/sudoers.d/ 下创建专用文件
# 允许 posadmin 用户执行重启和日志查看命令
posadmin ALL=(ALL) /sbin/reboot, /bin/systemctl restart pos-app, /bin/journalctl

权限管理方面,重点检查SUID/SGID文件。这些文件允许普通用户以文件所有者的权限执行,是提权攻击的常见目标。用以下命令扫描:

find / -perm -4000 -o -perm -2000 2>/dev/null

扫描结果中,只保留确实需要SUID的程序(比如 sudopasswd),其他的全部去掉SUID位。

避坑指南:我曾经在一个项目中,发现POS终端上有个 /usr/bin/at 命令居然带着SUID位。这个命令在POS场景下根本用不到,但攻击者可以利用它来定时执行恶意任务。去掉SUID位后,这个风险点就消除了。

最后,别忘了检查umask值。POS终端的umask建议设置为 0027 或更严格,确保新建文件和目录默认不给其他用户读写权限。

操作系统安全加固知识体系 操作系统安全加固 Linux内核参数优化 网络参数(SYN Cookie等) 内存保护(ASLR等) 最小化安装原则 嵌入式发行版优先 移除开发工具/文档 不必要的服务禁用 禁用Telnet/FTP/NFS等 使用mask替代disable 账户与权限管理 删除多余账户/锁定root SUID扫描/umask设置 核心目标:瘦身 + 锁门 = 最小攻击面

好了,操作系统安全加固这块就讲到这里。这四个方面——内核参数、最小化安装、服务禁用、账户权限——是环环相扣的。你只做其中一两个,效果会大打折扣。只有全部做到位,才能说你的POS终端在操作系统层面是安全的。