威联通 (QNAP) 在 2021 年 9 月公布了全新的 QTS 5.0 零碎,笔者最近收到了官网更新告诉,于是将本人的 TS-551 降级到最新版,却发现无论是零碎晦涩度还是稳定性都与他们宣传的差距甚远,不得不降级到 QTS 4.5.4。然而因为 QTS 5.0 将 FTP 作为可选软件包(QuFTP),降级后零碎里既没有 QuFTP,也没有 QTS 4 应该有的
proftpd
,本文将为读者分享威联通 NAS 解包零碎镜像,复原零碎组件的过程。
0x01 问题概述
如上文所示,笔者在从 QTS 5 降级到 QTS 4 后,发现 FTP 服务关上后,21 端口仍旧无奈联通,进入 SSH 查看过程列表,却发现基本没有 proftpd
过程:
0x02 剖析问题
笔者首先想到的是手动启动 FTP 服务,于是执行了如下命令:
sudo /etc/init.d/ftp.sh start
执行结束后,却发现 FTP 过程并没有呈现。
于是笔者关上上述启动脚本,心愿能手动启动服务,查看是否有报错或其余信息:
/sbin/daemon_mgr proftpd start "LD_PRELOAD=/usr/local/lib/libtrash.so TZ=/etc/localtime /usr/local/sbin/proftpd -n > /dev/null 2>&1 &"
间接报错segmentation fault
:
间接执行/usr/local/sbin/proftpd
:
看来这就是问题所在,proftpd 基本不存在,兴许是降级时固件遗记将 QTS 5.0 删除的 proftpd 复原回来,导致此问题。
在通过一番搜寻后,笔者发现威联通批改过 proftpd 的源码,退出了治理性能和一些其余的定制性能,因而无奈间接从网上找现成的二进制文件或源码包装置,必须应用和零碎版本匹配的原版二进制文件复原回去。那么哪里来二进制文件呢?笔者想到了官网的零碎固件。
笔者从威联通的下载核心下载和零碎版本统一的镜像,取得名为 TS-XA51_20210923-4.5.4.1800.zip
的零碎镜像,解压之,取得了后缀名为 .img
的同名镜像。在尝试应用多款解压缩软件和磁盘镜像软件后,笔者意识到,仿佛该镜像文件并不是惯例的格局,而是威联通定制的格局。
既然是定制的格局,那么肯定有中央能够解压,而零碎镜像是装置到 NAS 里的,解压工具也应该在 NAS 里有内置才对。
0x03 解包镜像
找到了一个可行的方向,于是笔者开始在零碎里寻找与固件更新相干的脚本。在笔者的一番寻找下,发现一个位于 /etc/init.d/update.sh
的脚本十分『可疑』,因为脚本较长,下文摘录其中一行,也是最要害的一行:
/sbin/PC1 d QNAPNASVERSION4 "$path_name" "${_tgz}" "${CS_SIGNATURE}";
依照脚本所示,PC1 应该是解压零碎固件包的工具,该工具将零碎固件解压到一个 .tar.gz
文件。于是笔者依照这个命令的规定,对上文咱们取得的 img 包进行解压:
PC1 d QNAPNASVERSION4 ./TS-XA51_20210923-4.5.4.1800.img ./TS-XA51_20210923-4.5.4.1800.tar.gz
后果令人振奋,果然拿到了一个名为 TS-XA51_20210923-4.5.4.1800.tar.gz
的压缩包:
接下来笔者尝试解压该压缩包,取得了下图所示的文件:
依据文件名规定,能够猜测出局部文件来自 boot 分区,而外面的 rootfs2.bz
和rootfs_ext.tgz
则是须要关注的重点。于是笔者持续解压这两个文件:
$ bzip2 -k -d ./rootfs2.bz
bzip2: ./rootfs2.bz is not a bzip2 file.
# 既然其格局不是规范格局,那么应用 file 命令来看看到底是什么格局
$ file ./rootfs2.bz
rootfs2.bz: LZMA compressed data, streamed
# 原来是 LZMA 格局,和 initrc.img 一样解压即可
$ xz -dc ./rootfs2.bz | cpio -id
此时再查看当前目录,会发现呈现了一些目录:
上文提到,咱们须要的文件在 /usr/local/sbin/prosftpd
,那么来看看./rootfs2.bz
文件里是否蕴含咱们所须要的文件呢:
答案是必定的~
0x04 解决问题
既然取得了这个文件,接下来要做的事件就非常简单了:将其复制到对应目录,而后在 NAS 的控制面板里从新关上 FTP 服务:
$ sudo cp ./usr/local/sbin/proftpd /usr/local/sbin/proftpd
再查看过程列表:
应用 telnet 连贯 21 端口,能够连通,问题胜利解决!