当前位置: 首页 > Linux

【案例分享】解压QNAPNAS系统镜像,还原降级后丢失的系统组件

时间:2023-04-07 00:06:13 Linux

QNAP在2021年9月发布了全新的QTS5.0系统,我把我的TS-551升级到最新版本,发现流畅度和稳定性都不太行系统的功能与他们宣传的相去甚远,所以我不得不降级到QTS4.5.4。但由于QTS5.0使用FTP作为可选软件包(QuFTP),降级后的系统中既没有QuFTP也没有QTS4应该有的proftpd。本文将与读者分享QNAPNAS的系统镜像解包和还原系统组件的过程。.0x01问题概述如上图,从QTS5降级到QTS4后,笔者发现FTP服务开启后,21端口仍然无法通信。进入SSH查看进程列表后,发现根本没有proftpd进程:0x02笔者首先想到分析问题最重要的是手动启动FTP服务,于是执行如下命令:sudo/etc/init.d/ftp.shstart执行完成后发现并没有出现FTP进程。于是打开上面的启动脚本,希望能手动启动服务,看看有没有报错或者其他信息:/sbin/daemon_mgrproftpdstart"LD_PRELOAD=/usr/local/lib/libtrash.soTZ=/etc/localtime/usr/local/sbin/proftpd-n>/dev/null2>&1&》直接报Segmentationfault:直接执行/usr/local/sbin/proftpd:好像是这个问题,proftpd不存在完全可能是固件在降级时忘记带回被QTS5.0删除的proftpd,从而导致此问题。经过一番查找,笔者发现威联通对proftpd的源码进行了修改,增加了管理功能和一些其他的自定义功能,所以无法直接从网上找到现成的二进制文件或源码包进行安装,必须使用与系统版本匹配的那个。原始二进制文件被恢复。那么二进制文件从何而来?笔者想到了官方系统固件。笔者从QNAP的下载中心下载了与系统版本相同的镜像,得到一个名为TS-XA51_20210923-4.5.4.1800.zip的系统镜像,解压后得到一个同名镜像,后缀为.img。在尝试了各种解压软件和磁盘镜像软件后,发现镜像文件好像不是常规格式,而是QNAP定制的格式。既然是自定义格式,那肯定有解压的地方。由于系统镜像安装在NAS上,解压工具应该也内置在NAS中。0x03镜像解包找到了可行的方向,于是笔者开始寻找系统中固件更新相关的脚本。经过笔者的一番查找,发现位于/etc/init.d/update.sh中的一个脚本非常“可疑”。由于脚本较长,下面摘录一行,也是最关键的一行:/sbin/PC1dQNAPNASVERSION4"$path_name""${_tgz}""${CS_SIGNATURE}";根据脚本,PC1应该是一个解压系统固件包的工具,它将系统固件解压成一个.tar.gz文件。于是笔者按照这个命令的规则解压了上面我们得到的img包:PC1dQNAPNASVERSION4./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的压缩包:接下来尝试解压这个压缩包,得到如下图所示的文件:根据文件名规则,一些files可以猜测是来自boot分区,里面的rootfs2.bz和rootfs_ext.tgz是关注的重点。于是笔者继续解压这两个文件:$bzip2-k-d./rootfs2.bzbzip2:./rootfs2.bzisnotabzip2file.#由于它的格式不是标准格式,所以用file命令看看是什么是Format$file./rootfs2.bzrootfs2.bz:LZMAcompresseddata,streamed#原来是LZMA格式,可以像initrc.img一样解压$xz-dc./rootfs2.bz|cpio-id现在查看当前目录,你会发现有一些目录:如前所述,我们需要的文件在/usr/local/sbin/prosftpd中,那么我们看看./rootfs2.bz文件中是否包含我们需要的文件:答案是~0x04解决问题既然你已经得到了这个文件,接下来要做的事情就很简单了:将它复制到相应的目录下,然后在NAS控制面板中重启FTP服务:$sudocp./usr/local/sbin/proftpd/usr/local/sbin/proftpd再次查看进程列表:使用telnet连接21端口,可以连接,问题成功解决!