资讯动态

嵌入式Linux安全加固实战:最小化裁剪、权限硬化、日志审计与防火墙

发布时间:2026/9/9 10:12:41 来源:尧图企业网站定制
1. 从一次“看起来很安全”的物联网设备被黑说起先讲一个我亲身经历的事。几年前我接手了一台工业数据采集网关的维护工作那台设备用的是嵌入式Linux内核版本老、根文件系统里塞了一堆用不上的组件SSH用的是弱口令、开在默认端口上系统日志更是从没被人认真看过一眼。结果不出所料——设备上线不到一个月就被植入了一个挖矿木马CPU长时间跑满现场PLC的通信周期被严重拖慢差点酿成生产事故。排查的过程其实并不复杂攻击者通过扫描全网开放端口撞库试出了SSH口令登录后利用系统里一个未清理的SUID提权程序拿到了root权限然后下载木马、写自启动脚本、清空日志、关闭防火墙策略——整套操作行云流水。整个过程中系统没有任何告警因为我当时连日志轮转、监控告警的基本机制都没配置。那次事故之后我花了很长时间复盘对于嵌入式Linux设备来说单纯把功能跑通根本不够系统级安全加固必须在产品出厂前就完成。什么是最小化裁剪、怎么把权限做到“能不给就不给”、日志审计如何真正落地而不是摆设、轻量防火墙在资源受限的板子上怎么选型配置——这些正是这篇博文要解决的问题。文章主要围绕嵌入式Linux系统级安全加固的“最小化裁剪、权限硬化、日志审计、轻量防火墙”四条主线展开同时穿插第16讲的课后思考题解析适合正在做嵌入式产品开发、或者刚开始接触设备安全加固的工程师参考。2. 最小化裁剪从根文件系统到内核把能砍的都砍掉2.1 为什么“装得多”等于“漏洞多”嵌入式Linux的最小化裁剪很多人第一反应是“为了省flash空间”。这种想法在早年间没错但放到安全语境下最小化裁剪更核心的价值在于缩小攻击面。攻击者拿到shell之后第一件事就是找可利用的工具和组件没有wget、curl下载payload就得费一番功夫没有gcc、perl这类解释器或编译器本地提权、反弹shell的难度就会显著上升没有bash的历史记录和readline支持攻击者的操作轨迹就更难被掩盖。我在实际加固中常用的思路是把根文件系统里每一个二进制、每一个库、每一个配置文件都问一遍“这个设备真的需要吗”。用不到的组件无论看起来多方便、多“标准”都直接剔除。举个例子某款数据采集产品里曾经带着完整的tcpdump理由是“方便现场排查网络问题”。但从安全角度看tcpdump对攻击者来说是极好的流量嗅探利器——设备上跑着Modbus TCP协议抓包就能直接还原出控制器地址、寄存器地址和写入值这对工业现场是致命的。最终我们编译了一个只支持本机回环抓包的精简busybox版本把网卡抓包能力彻底禁用。2.2 制作最小根文件系统的具体手法BusyBox 手动挑库以Linux根文件系统为例我的推荐做法是BusyBox静态编译 按需挑选应用层组件。BusyBox本身提供了两百多个精简命令但不要全量启用。我通常会按下面的原则在menuconfig里勾选保留sh用ash而不是bash、ls、cat、mount、umount、ps、kill、ifconfig/ip、ping、cp、mv、rm、mkdir、chmod、chown、vi可换成更小的edit、syslogd/klogd、crond如果需要定时任务。坚决关闭telnetd、ftpd、tftpd、wget除非产品必须支持远程升级、ncnetcat、socat、tcpdump、fdisk/mkfs这类分区格式化工具。有条件保留dropbearSSH服务端替代openssh体积小得多、scp用于安全拷贝。静态编译BusyBox会让体积变大一些但好处是去掉了动态库依赖链库文件可以一并从根文件系统里删掉。对于一些8MB/16MB flash的板子这会省下大量空间而且即使攻击者上传了一个依赖libc版本不匹配的二进制也无法直接运行能进一步抬高恶意载荷落地的门槛。如果产品确实需要一些BusyBox之外的工具比如自研的采集程序、通信组件建议单独编译并静态链接或者只带它明确依赖的那一两个so库文件。判断依赖可以用readelf -d 你的程序 | grep NEEDED把列出来的共享库copy进来即可不要图省事把整个/lib目录都拷进去。2.3 内核裁剪不是只有“关模块”这么简单内核层面的最小化同样重要。安全加固角度内核裁剪远比“省内存”意义重大——以下配置项是重点检查对象关闭不需要的网络协议栈模块对绝大多数物联网网关来说CONFIG_BT蓝牙、CONFIG_WIRELESS无线除非产品用到、CONFIG_NF_CONNTRACK相关的高级状态匹配除非防火墙需要都是攻击面。比如一个纯有线RS485/以太网接入的控制器完全没有必要编译蓝牙协议栈。关闭不必要的文件系统支持CONFIG_VFAT_FS、CONFIG_NTFS_FS这类Windows文件系统支持如果设备不读U盘就关掉CONFIG_FUSE用户态文件系统强烈建议关闭——历史上多个本地提权漏洞都跟FUSE相关。关闭不需要的驱动USB存储、HID、声音、图形相关的驱动按需裁掉。关闭CONFIG_FTRACE、CONFIG_KPROBES、CONFIG_BPF_SYSCALL这类内核调试/动态追踪机制生产环境一律不要开。攻击者一旦拿到root权限这些机制会被用来做内核级的Rootkit安装和系统调用劫持。开启CONFIG_STRICT_KERNEL_RWX、CONFIG_STRICT_MODULE_RWX、CONFIG_SYN_COOKIES、CONFIG_RANDOMIZE_BASE内核地址随机化KASLR。前两项能有效阻止内核代码段被直接改写最后一项显著提高内核漏洞利用的难度。裁剪完之后建议把内核编译成zImage并用mkimage打包为U-Boot格式并在U-Boot侧用环境变量固定启动参数addram、bootargs里面加上quiet loglevel3降低控制台信息泄漏的可能。另外一定要在U-Boot里设置bootdelay0并设置密码保护bootcmd和env防止物理接触者进入U-Boot命令行篡改启动参数或加载恶意内核。3. 权限硬化让即使被攻破也只能在“笼子里”活动3.1 账户、口令与登录策略从源头降低被攻破概率权限硬化第一步是账户和口令策略。很多嵌入式产品出厂默认账户是root/root、admin/admin密码写死在文档里且从不修改这等于给攻击者大开方便之门。我的建议是产品出厂时生成随机口令并强制首次登录修改。随机口令可以用openssl rand -base64 12生成烧录时写进配置文件并同步打印在设备标签上。关闭root直接SSH登录。新建一个普通用户通过sudo或者仅允许某几个指定命令来执行特权操作。如果设备资源极紧张至少禁用密码登录、只保留公钥认证。修改默认SSH端口同时在sshd_config中开启MaxAuthTries 3、LoginGraceTime 30s、PermitRootLogin no、PasswordAuthentication no如果团队内部能接受公钥管理。在/etc/shadow中设置合适的密码哈希算法为SHA-512$6$前缀或yescrypt$y$前缀不要使用老旧的MD5$1$。这里补充一个容易被忽略的细节我遇到过很多工程师明明设了口令策略却在busybox的/etc/inittab里留着ttyS0::askfirst:-/bin/sh之类的串口登录配置导致从调试串口可以直接进入root shell家目录、shadow全部暴露。生产环境正确的做法是串口控制台也要做登录认证且设置单独的登录密码。inittab里的::respawn:-/bin/login加上/etc/securetty控制允许root登录的终端一个都不能少。3.2 SUID/SGID位清理权限提权的“经典入口”检查并清除不必要的SUID/SGID二进制是权限硬化里回报最高、最容易立即执行的一项。SUID允许普通用户以文件属主身份执行程序而过去大量Linux提权漏洞都是因为某个SUID程序存在缓冲区溢出或路径劫持问题。具体操作用一条命令就可以完成初步排查find / -perm -4000 -o -perm -2000 2/dev/null逐条审视列表中的每一个文件是否需要它具备SUID/SGID有没有替代方案以我的经验来看嵌入式设备上常见的合理SUID项只有这几类busybox如果确实需要、ping需要创建原始套接字、su如果需要普通用户切换root、mount/umount如果普通用户需要挂载U盘。其余的SUID程序一律去掉suid、sgid位chmod u-s /usr/bin/程序名 chmod g-s /usr/bin/程序名如果觉得逐条处理太麻烦可以在构建根文件系统时直接写一个脚本统一扫描和去除。另外更彻底的做法是给关键的只读目录挂载为只读见下文让攻击者即使拿到SUID二进制也不能修改其内容从而无法植入恶意代码。3.3 不可变标志、只读挂载与capabilities把权限焊死现代Linux提供了chattr i命令设置文件的不可变标志即便是root也不能随意修改、删除、重命名带i标志的文件除非先清除该标志。在实际加固中常用的组合是将/etc/passwd、/etc/shadow、/etc/sudoers、启动脚本和关键应用二进制全部设置为不可变。这样即使攻击者拿到了root权限也无法轻易篡改认证信息和开机自启动项要想持久化驻留就变得非常困难。但要注意chattr i在一些文件系统上不生效比如FAT、部分JFFS2配置需要确认你的rootfs支持该属性。如果使用overlayfs或tmpfs做可写层要确保不可变标志在正确的位置。另一个核心手段是让根文件系统只读挂载。产品出厂后业务程序几乎不会改动系统目录那就可以把根文件系统做成只读的如squashfs、只读挂载的ext4运行时把需要写的数据重定向到tmpfs或者独立的分区。这样即使攻击者写入了恶意脚本重启后也会被抹掉。有一个相对新但是对嵌入式非常重要的话题是Linux capabilities。capabilities将root的能力拆成了几十个小单元比如CAP_NET_RAW允许创建原始套接字、CAP_SYS_ADMIN挂载/卸载等大量特权操作、CAP_DAC_OVERRIDE绕过文件权限检查。对自研的业务进程可以用setcap精确分配它真正需要的capability而不是让整个系统处在“万能root”状态。例如某业务程序只需要绑定低端口就只给它CAP_NET_BIND_SERVICEsetcap cap_net_bind_serviceep /opt/your_app需要反复强调的完整做法是一个嵌入式Linux的安全模型应当做到“最小权限的进程、最少的可用工具、只读的系统分区、不可变的认证文件、受限的网络能力”而不是指望某一个单一措施力挽狂澜。4. 日志审计不只看有没有日志更看能不能第一时间发现异常4.1 为什么日志审计在嵌入式场景里常常形同虚设日志审计在服务器领域早就不是新鲜事但到了嵌入式Linux场景我见过太多反面教材日志写进了tmpfs重启即丢syslogd没开远程传输功能设备宕机后日志无从查证日志大小不轮转几天就能撑爆flash更常见的是压根没人看日志出了事才找历史记录然后发现早就被覆盖了。日志审计的核心目标不是“有日志文件”而是能追溯到关键事件的完整链路。在嵌入式设备上至少要覆盖以下几类事件登录成功与失败记录特别是SSH、串口、Web管理页面的登录。特权命令的执行记录如su、sudo、mount、reboot及关键系统配置变更。网络连接变化新出现的监听端口、到外网的异常连接、防火墙规则变更。进程、内核关键事件非法调用、segfault、模块加载、系统调用异常。4.2 构建一个适合嵌入式环境的日志落地方案在资源受限的板子上不可能像云端那样部署完整的ELK或者Splunk但至少要做到“日志不丢、日志可查、日志可传”。我的标准配置是本地用syslogdbusybox中自带把日志写到独立可写分区如/var/log或/data/log设置合适的轮转策略。BusyBox syslogd支持-s指定文件大小、-b指定保留缓冲区数量比如每个文件256KB、保留4个。关键日志实时同步到远程日志服务器。在/etc/syslog.conf或busybox syslogd参数中配置-R 远程IP:514把日志通过UDP/TCP发送到中心机房。考虑到很多设备的业务是封闭内网环境远程日志可以走管理网口与业务网段分开。开启内核日志的同步输出klogd -f /var/log/kern.log把内核的消息也落盘。对于极其关键的事件比如登录失败连续多次、防火墙规则被修改、watchdog触发不仅要写日志还要产生告警可以用一个轻量shell守护脚本定期tail日志里的关键词一旦命中就通过SNMP trap、Modbus寄存器置位或者GPIO点亮指示灯来通知现场运维人员。4.3 我在日志审计里踩过的坑这段单独提出来讲是因为确实教训深刻。第一次做日志远程传输的时候只配置了UDP的syslog转发但没考虑设备重启后系统时间不对——RTC电池没接、又没有NTP服务器日志时间戳全部回到1970年。到了中枢服务器上按时间检索数据简直没法看。后来在启动脚本里强制做了一个“先以重启次数为文件名前缀启动成功后同步NTP修改系统时间再输出业务日志”的流程才算可靠。第二个坑是日志文件权限没有收紧。/var/log目录默认是drwxr-xr-x普通用户就能读取导致攻击者可以在入侵后直接cat /var/log/secure看到管理员执行的命令、IP、时间从而判断管理员的运维习惯、绕开监控。正确权限应该是/var/log设为750日志文件设为640属主为root。第三个坑是没有对日志做“防篡改”。攻击者拿到root后第一件事就是 /var/log/messages把日志清空。单纯依赖文件权限并不够因为root可以改权限。我的做法是日志落盘到独立分区后把分区权限设为700且普通用户无写权限并配合rotation机制每天定时把前一天的日志打包加密后传到远程并删除本地副本同时日志文件加上chattr a只追加标志让任何进程只能追加不能覆盖和删除。5. 轻量防火墙低成本、高可用的网络访问管控方案5.1 嵌入式场景下防火墙选型的对比嵌入式设备的CPU和内存资源通常捉襟见肘跑一个完整的iptablesnetfilter管理工具链可能不是最优选择。但是完全不用防火墙也是不行的——实际上Linux内核自带的netfilter本身就非常高效关键是选用合适的前端配置工具或者自写规则生成逻辑。先列一下我常见的几种方案方案优点缺点适用场景iptablesnf_tables后端生态成熟、资料多、匹配能力全面需要libxtables动态库体积大规则多时加载慢资源相对充裕的网关、边缘计算盒子nftables内核统一接口、配置更紧凑、性能好部分旧内核不支持需要较新busybox/工具新内核4.18且对性能有要求的场景直接操作/proc/net/ip_tables_*或使用ip6tables精简版几乎零依赖写规则门槛高、易出错极低资源、追求极致精简的产品应用层白名单tc/ebtables/nft可以按进程或用户控制网络访问配置复杂需配合cgroup安全等级较高的客户定制项目对于大多数物联网设备我推荐用nftables理由有三一是nftables的规则集是原子加载的不会出现iptables那种起了一半规则导致网络中断的问题二是nftables自带集合set可以高效实现IP黑/白名单、端口集合不必一条条匹配三是规则集可以编译成二进制字节码体积小、加载快。5.2 用nftables构建一套“默认拒绝 白名单”的规则集下面给出一个典型的嵌入式Linux防火墙规则。假设设备有两个网口eth0接入业务网络、eth1接本地维护口。我们要达成的安全策略是业务网口只开放必要端口维护口只能由内部指定网段的IP访问所有出站连接默认拒绝只允许特定的工业协议端口比如Modbus TCP 502、自定义采集端口向外发起连接。先安装nftables并加载内核模块如果内核裁剪时没编成模块就不用这一步modprobe nf_tables modprobe nf_conntrack然后编写规则集文件/etc/nftables.conf#!/usr/sbin/nft -f flush ruleset table inet filter { chain input { type filter hook input priority 0; policy drop; # 允许回环和已建立连接 ct state established,related accept # 维护口白名单仅允许管理网段访问SSH(22) iif eth1 ip saddr 192.168.10.0/24 tcp dport 22 accept # 业务口开放Modbus TCP(502)、HTTPS(443) iif eth0 tcp dport { 502, 443 } accept # 允许ICMPping方便排查但限制速率防探测 iif eth0 icmp type echo-request limit rate 5/second accept } chain output { type filter hook output priority 0; policy drop; ct state established,related accept # 允许本机向外部主动发起Modbus TCP和自定义协议 oif eth0 tcp dport { 502, 8080 } accept oif eth0 udp dport { 123 } accept # NTP时间同步 oif eth1 accept # 维护口出站默认放行 } }这里的policy drop是核心——默认丢弃所有数据包只放行明确允许的流量。很多初学防火墙的朋友习惯用policy accept再加拒绝规则这在服务器上可以理解但嵌入式设备对外暴露面本来就窄直接默认拒绝能省去很多后续补洞的麻烦。另外要特别注意ct state established,related accept的作用有了这条被允许的入站连接建立后返回流量才能正常通过出站链否则你会因为出站链policy drop而观察到TCP三次握手能完成但数据包全被丢弃的诡异现象也就是“能ping通但无法收发业务数据”的经典问题。加载规则后立即用nft list ruleset检查当前生效规则同时新开一个SSH会话确认没有被自己锁在外面。在交付客户前强烈建议做个重启持久化把规则集保存到/etc/nftables.conf并在rcS启动脚本里添加nft -f /etc/nftables.conf。5.3 配套的一组实战小技巧设置rp_filter反向路径过滤来缓解IP欺骗攻击在/etc/sysctl.conf中加入net.ipv4.conf.all.rp_filter1 net.ipv4.conf.default.rp_filter1限制SSH连接频率用nftables的limit语句避免暴力破解铺满日志tcp dport 22 limit rate 5/minute accept如果设备有外网访问需求建议用iptables的owner模块或nftables的socket表达式把出站外联限制到特定进程或用户组。比如只允许采集进程联网其他进程一律无法访问外网这样即使设备被植入木马它想外连也需要先伪装成采集进程或者拿到root权限。别忘了IPv6。只配置IPv4的防火墙等于把IPv6侧门户大开。如果设备没有IPv6需求就直接在内核配置中禁用IPv6或通过sysctl的net.ipv6.conf.all.disable_ipv61关闭。有需求则单独配置ip6tables/nft inet链。6. 第16讲课后思考题完整解析这一节解答第16讲里布置的几道思考题。这些题对应的背景是上一讲中关于“嵌入式Linux设备启动流程与固件升级安全”的内容但答题过程同样会大量用到本讲的安全加固思维。6.1 思考题一U-Boot启动参数被篡改如何防范这道题问的是如果攻击者可以物理接触设备比如从调试串口进入U-Boot如何防止他修改bootargs、加载恶意内核答案分三层U-Boot环境变量加密认证U-Boot支持CONFIG_ENV_AES或私有key对bootcmd和bootargs进行签名校验。在构建U-Boot时配置CONFIG_ENV_IS_IN_MMC或CONFIG_ENV_IS_IN_FLASH的同时设置CONFIG_ENV_AES并烧写AES密钥环境变量一旦被非法修改就无法通过校验。完整性的引导链校验在内核启动前用U-Boot验证内核镜像的签名比如使用CONFIG_FIT_SIGNATURE同时验证根文件系统分区的dm-verity hash tree。这样从U-Boot到内核、从内核到根文件系统的信任链是逐级建立的。这个在第16讲中提到过但推出生产环境时真正做的人不多。独立的硬件防篡改如果产品等级要求高可以外接TPM或SE芯片存储密钥并配合安全启动流程读取SE中的指纹决定是否启动。调试UART口在量产时建议通过电阻或软件方式禁用至少不能进入U-Boot命令行。这道题想考察的核心点是安全启动不是某一个组件的事而是从复位向量到用户态进程的链式信任。6.2 思考题二固件中硬编码的私钥泄漏后如何止损场景客户拿到设备后从flash中提取了固件发现rootfs里有一把RSA私钥用来签发远程升级包。此时如何止损我的答案是立即刷新升级密钥对并建立密钥分级和轮换机制。具体动作生成新的升级签名密钥对将公钥打包进下一个固件版本同时旧固件中明确拒绝“仅含旧签名”的升级包强制升级到新版本。在新固件里不再把私钥放在普通分区而是放入TEE可信执行环境或SE安全芯片中系统侧只保留公钥做验签。升级流程中增加中间证书链和版本号回滚防护不能只看签名合法还要校验版本号高于当前运行固件防止攻击者从旧版本固件反推出可用的升级payload后降级设备——降级攻击在嵌入式场景特别常见。6.3 思考题三如何设计一个防回滚的固件升级方案这道题和第16讲的升级安全直接相关扩展点在于“回滚”在U-Boot中记录当前固件的版本号和升级计数存放到OTPone-time programmable区域或备份分区。每次升级时新固件必须携带更高的版本号并且U-Boot校验通过后先擦写OTP中的版本号再写入新固件。即使攻击者备份了旧固件并用编程器烧写回去U-Boot启动时发现版本号低于OTP中记录值拒绝启动进入恢复模式。在实际设计里还要考虑“A/B分区的正常升级流程”与“bootloader回滚保护”的配合A/B分区负责让升级失败时还能自动回退到上一个可用系统而OTP版本号则负责保证攻击者不能把设备降级到有已知漏洞的旧版本。我建议在题目的答案里点明回滚防护和热升级的可用性是需要平衡的安全需求高的产品宁可牺牲“降级到旧版本兼容”的便利也不能给攻击者留降级利用的口子。6.4 思考题四设备信息采集上报的传输安全题目是网关设备采集PLC数据后通过MQTT上报到云端如何保证传输过程的安全这道题考察的是通信层安全设计的完整性传输层用TLS推荐TLS 1.2禁用老旧的SSL v3/TLS 1.0。客户端需要做服务器证书校验不能用--insecure跳过验证。双向认证除了校验服务器证书客户端也要出示设备证书实现mTLS。私钥存放在受保护的存储区域如SE或TEE不要明文落盘。MQTT的应用层安全topic采用设备维度隔离如device/{device_id}/datapayload做签名或轻量MAC校验防止业务数据被中间设备篡改。密钥轮换机制证书有效期不宜设置过长建议一年一换通过管理通道下发新证书并保证换证流程中断电、断网等异常情况下设备仍能正常工作。这道题的隐含考点是不要把安全性寄托在“内网可信”上而是要默认网络链路不可信从连接、身份、内容三个层面做防护。7. 把加固策略固化到产品开发流程中的几点实践安全加固不是发布前“临时抱佛脚”的环节它应该从设计阶段就进入产品开发流程。我这里分享几个我自己团队在用的做法供参考。第一建立一份安全基线清单每个产品都必须逐项对照。清单包括rootfs是否含编译工具链和多余SUID是否关闭所有不需要的服务和端口系统分区是否只读默认口令是否修改日志是否远程备份防火墙是否为默认拒绝策略每一条在release时必须有人签字确认。第二安全测试要常态化。在迭代开发中增加一个环节每轮构建都跑一遍自动化脚本扫描新引入的进程是否监听了意外端口、是否新增了SUID文件、是否多了可执行的wget/curl等危险工具。这些都可以用脚本在构建结束时自动检查并输出JSON报告。第三上线后仍要持续监测。设备出厂只是一个开始攻击者在不停地研究新漏洞所以产品出厂后也要有持续监测机制定期收集设备的异常行为日志、远程日志是否有登录失败重试、设备是否出现异常外联等。我见过太多团队产品交付后就把安全抛在脑后直到被黑才后悔。第四重视供应链安全。裁剪时用了哪个版本的busybox、哪个版本的内核、哪个版本的openssl都要能追溯到具体tag和补丁级别。出漏洞公告后第一时间评估影响并更新组件。很多嵌入式设备长期不更新就是因为开发团队根本说不清自己用了哪些开源组件的哪些版本。使用SBOM软件物料清单管理是现代化的做法能大大降低供应链安全管理的成本。8. 安全加固之后我最后想多叮嘱的几件事写到这里核心的加固框架已经讲完了。但根据我这些年做设备安全加固的实际经验有几件“场外”的事还是想额外多说两句它们不在任何一本安全书籍的系统章节里却往往决定一套加固方案到底能不能落地生根。一是别为了安全把所有运维通道都堵死。我见过某个项目为了让设备“绝对安全”把SSH、远程日志、串口登录全关了结果设备一上线就出现协议栈异常现场工程师只能物理拆机查看运行状态恢复一次故障的成本高得离谱。安全加固和可维护性从来不是对立的正确的做法是保留带外管理通道维护口、独立IPMI/串口采用强认证和审计措施而不是一关了之。二是在做最小化裁剪时千万不要把开发调试信息一股脑带上生产固件。很多人编译内核、busybox时开了CONFIG_DEBUG_INFO或者把/proc/kallsyms、/sys/kernel/debug挂载保留下来。这些调试接口在攻击者手里就是内核符号表和调试后门。生产固件里/proc/sysrq-trigger这样的紧急系统请求接口也要关掉sysct里kernel.sysrq0。三是安全加固要定期回归测试。你加固了一套系统不代表它永远安全。每次更新内核、升级busybox、换防火墙版本都要重新跑一遍加固基线扫描。很多时候我发现团队升级一次组件后之前的chattr i设置被刷掉了、防火墙规则被默认脚本重置了安全状态不知不觉就倒退成了裸奔状态。把安全基线的验证做成CI/CD流水线里的一部可以最大程度避免这种“层层突破”的失效。四是文档和知识传递比任何工具都重要。加固规则、密钥归属、远程日志服务器地址、设备证书轮换周期这些都要有明确的交接文档。否则等你离职、委托公司换一拨人系统加固状态很快就会被“为了便利”的口水淹没。如果看完这篇你对“最小化裁剪、权限硬化、日志审计、轻量防火墙”这四件事有了清晰的操作蓝图那这第17讲的价值就算落袋了。嵌入式Linux的安全加固不是玄学它就藏在每一个具体的配置项、每一条防火墙规则、每一次日志审计的好了。踩过得坑记得多后面项目的路才能走得稳。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价