十五、网络、归档与远程工具
本章把归档、校验和、HTTP 下载、SSH 与增量同步串成“先获取、再验证、后使用”的安全链路。所有生产示例 默认只读/试运行优先,设置连接和总超时,限制重试,并保留主机密钥校验。
本章目录
学习目标
- 使用
tar/gzip/zip并识别路径穿越、覆盖与压缩炸弹风险。 - 使用 SHA-256 校验下载内容,区分完整性校验与真实性验证。
- 为
curl设置 TLS 验证、超时、有限重试和临时文件。 - 不关闭 SSH 主机密钥校验,避免远程命令二次解析与凭据泄漏。
非标准工具依赖
POSIX 只规定部分命令的基础接口;TLS、SSH 和增量同步依赖独立项目。脚本必须探测实际实现及版本,不能只根据 命令名推断选项可用。许可证也以部署环境内实际安装的软件包为准。
| 工具 | 本机核验实现 | 许可证与维护 | 安装方式 | 可选替代 | 缺失时的行为 |
|---|---|---|---|---|---|
curl | curl 8.7.1 | curl License;curl 项目持续维护 | brew install curl / apt-get install curl | wget 或应用语言的 HTTP 客户端;选项和状态语义不同 | 写 stderr 并退出 127;不得退化为跳过 TLS 校验 |
ssh / scp | OpenSSH 10.3p1 | BSD-style licenses;OpenSSH 项目持续维护 | macOS 自带,或 brew install openssh / apt-get install openssh-client | sftp 仍属于 OpenSSH;专用 SDK 适合复杂协议流程 | 写 stderr 并退出 127;不得关闭主机密钥校验绕过依赖问题 |
rsync | openrsync protocol 29,兼容 rsync 2.6.9 | 实现相关:openrsync 使用 ISC License,上游 rsync 使用 GPL-3.0-or-later | macOS 自带,或 brew install rsync / apt-get install rsync | scp/sftp 不具备完全相同的增量和删除语义 | 写 stderr 并退出 127;不得把 cp 当作透明替代 |
tar | bsdtar 3.5.3 / libarchive 3.7.4 | 实现相关:libarchive 使用 BSD-style license,GNU tar 使用 GPL-3.0-or-later | 系统通常自带;GNU 实现可用 brew install gnu-tar / apt-get install tar | zip/unzip 的元数据和路径语义不同 | 写 stderr 并退出 127;不得继续处理未审查的归档内容 |
生产脚本应在入口统一调用 require_cmd,并在支持矩阵中记录 curl --version、ssh -V、 rsync --version 和 tar --version。Linux 发行版与 macOS 可能提供同名但不同实现的命令。
