原来正常使用的nexus版本是2.5.1,结果被扫描出来有漏洞,具体描述是这样:“Sonatype Nexus Repository Manager Java 对象反序列化 远程代码执行漏洞”,给出的解决办法是“升级到 Sonatype Nexus Repository Manager 版本 2.11.2-01 版或更高版本。”
开始我是拒绝的,因为现在的库中有几十个正在使用的项目库,升级稍有不慎就会造成全部项目使用不了,但由于是高等缺陷又不得不改,所以只能试图升级一下。
这里参考了一位大佬的博客:https://blog.csdn.net/u010316188/article/details/106908363
升级过程大概这样:
- 去nexus官网下载安装包:nexus官网下载页 linux服务器下载bundle.tar.gz,windows下载zip。然后发现国外网站总是下载失败,费气巴力找到一个还算新点的2.14.9版本凑合用,上一个下载地址:nexus-2.14.9-01-bundle.tar.gz
- 将压缩包上传到服务器上,找个目录解压(最好不要和原来老版本的放在一起,因为目录可能会覆盖),我们原来的在/data目录下,有两个文件夹:/data/nexus-2.5.1-01 和 /data/sonatype-work,所以新版本我解压在了/home下,现在是/home/nexus-2.14.9-01 和 /home/sonatype-work
- 由于原来2.5.1的环境,端口8081还正在使用,所以不能盲目停止,方案是更改新版本端口,迁移成功后再停止旧8081,启动新的8081。
- 更改新版本的端口,/home/nexus-2.14.9-01/conf/nexus.properties
# Jetty section application-port=8083 application-host=0.0.0.0 nexus-webapp=${bundleBasedir}/nexus nexus-webapp-context-path=/nexus
- 启动新服务,进入/home/nexus-2.14.9-01/bin目录,命令行 ./nexus start
至此升级(废话)完成,不过重点是在下面的私库迁移上:
- 原本计划将就nexus库中的资源(存放路径为/data/sonatype-work/nexus/storage)拷贝到新库中(/home/sonatype-work/nexus/storage),然而发现旧库所有资源竟然有40个G!!!拷贝不现实。后来另辟蹊径,找到一个更快的方法:直接将新库的资源路径指向旧库。配置文件仍然是 /home/nexus-2.14.9-01/conf/nexus.properties
# 默认资源路径 注释掉 #nexus-work=${bundleBasedir}/../sonatype-work/nexus # 指向为旧库资源路径 nexus-work=/data/sonatype-work/nexus runtime=${bundleBasedir}/nexus/WEB-INF
- 指过去之后,重启,访问nexus,刷新,没出来。。。。
- 更换几个配置文件如下图,后缀为214的是新库的备份,将同名文件从旧库拷贝过来
- 顺便解释下这几个文件:
- lvo-plugin.xml:包含版本插件的配置。该xml文件存储了仓库管理用于查询检查更新版本的属性文件的位置。
- nexus.xml:最重要的文件之一,该文件维护着仓库的列表以及所有服务器层面的配置,例如STMP配置、安全方面的、仓库组、targets、路径映射等等。
- security-configuration.xml:总体的安全配置
- security.xml:用户及权限的安全配置,每个私库的账号密码会存储在此文件中
- 上述几个文件替换之后,再重启一下新的nexus,看下资源有没有刷新出来~正常的话已经有了。
- 后面就是停掉旧nexus,把新的私库端口改回默认的8081,重启。这样,原来其他项目的配置不需要更改,无缝升级~
纯手打,如果解决了你的问题,请点个赞咯谢谢~