系列文章目录
文章目录
前言
收到集团侧安全团队邮件提示,MinIo verify接口(未授权问题)存在敏感信息泄露漏洞,攻击者通过构造特殊URL地址,读取系统敏感信息,其中包括环境变量,有的服务器还会获取到AK/SK,获取后可直接登录后台。建议升级到安全版本RELEASE.2023-03-20T20-16-18Z及以上,在waf上配置策略,拒绝所有post到/minio/bootstrap/verify的请求。因为还有环境的minio版本是RELEASE.2020-05-08T02-40-49Z。将其升级到RELEASE.2023-05-18T00-05-36Z版本。
本次升级操作主要以单节点作为示例,集群的升级方法和单节点大同小异
一、问题引出
当前版本太老,升级到安全版本无法通过数据挂载方式直接升级,由于RELEASE.2022-10-29T06-21-33Z之后Mino网关和相关文件系统模式代码已删除,使用standalone或filesystem模式的老版本minio升级到RELEASE.2022-10-29T06-21-33Z或更高版本时,会无法启动。要升级到 RELEASE.2022-10-29T06-21-33Z 或更高版本,使用standalone 或 filesystem模式的用户必须先部署一个新的minio实例,然后手动将配置和数据内容迁移到新实例(注意新实例不能和原来老版本minio在相同的目录,如果是以磁盘为单位部署,则需要使用新的磁盘
)。
二、升级与数据迁移步骤
0.资源清单
ip | minio版本 | 数据目录位置 |
---|---|---|
192.168.56.130(旧版本单节点) | RELEASE.2020-05-08T02-40-49Z | /data/minio_data |
192.168.56.130(新版本单节点) | RELEASE.2023-05-18T00-05-36Z | /data/minio_data_2023 |
1.部署及启动新minio单实例
查看顶部引入的文章链接,通过上述文章中记录的ansible-playbook方式部署高版本的minio单节点实例
[root@python1 ~]# ansible-playbook -i hosts minio.yml
[root@python1 ~]# vim /export/server/minio/single_run.sh
#!/bin/sh
export MINIO_ROOT_USER=OpsMinIO
export MINIO_ROOT_PASSWORD=OpsAdmin081524
TIME=`date +%Y-%m-%d_%T`
MINIO_OPTS="--console-address :9001 --address :8021" #指定minio-ui的访问端口和minio服务端口.其他参数的使用参考官网文档即可
#启动新实例,指定的数据目录要与老实例不同。
nohup /export/server/minio/minio server $MINIO_OPTS /data/minio_data_2023 > /export/server/minio/minio_server_"$TIME".log 2>&1 &
echo $! > /export/server/minio/minio.pid
#启动minio单节点
[root@python1 ~]# sh /export/server/minio/single_run.sh
2.设置新旧实例的别名
因演示环境,新旧实例在一个节点上,使用新实例的mc客户端进行别名操作<旧实例mc客户端不支持alias命令>
#查看mc版本
[root@python1 minio]# ./mc --version
mc version RELEASE.2023-05-18T16-59-00Z
#新实例部署路径 /export/server/minio
#设置旧实例的别名
[root@python1 minio]# ./mc alias set minio2021 http://192.168.56.130:9000 MinIO Admin@2020
mc: Successfully migrated /root/.mc/config.json from version `9` to version `10`.
Added `minio2021` successfully.
#设置新实例的别名
[root@python1 minio]# ./mc alias set minio2023 http://192.168.56.130:8021 MinIO Admin@2020
Added `minio2023` successfully.
3.检查旧实例bucket及存储的文件
4.通过mc客户端命令进行数据迁移
#1、查看创建的别名
[root@python1 minio]# ./mc alias ls
#执行迁移命令
[root@python1 minio]# ./mc mirror minio2021 minio2023
知识补充: minio有三种数据迁移方式
第一种:
全量迁移,重名文件不覆盖,如bucket不存在,会自动创建
./mc mirror minio2021 minio2023
第二种:
只迁移某个bucket,以test为例,迁移的目标bucket需要提前创建
./mc mirror minio2021/test minio2023/test
第三种:
加上--overwrite参数,覆盖重名文件
./mc mirror --overwrite minio2021 minio2023
5.迁移结果验证
访问新实例的minio,可以看到旧实例中的数据已在新minio中存在
三、新旧实例minio数据对比
进入minio2021和minio2023的数据目录,可以看到数据文件有很大的区别。
在minio2021的数据目录下,看到的是真正的一个文件,与本地存储的格式一致,并且这些文件可以直接从服务器下载到本地。
这就意味着如果minio的数据目录挂载到服务器本地,则可以直接通过写磁盘的方式将文件写入minio,在minio界面也能正常下载。
但当数据迁移到minio2023后,不管是从minio2021迁移过来的数据,还是新上传的数据,每一个文件,在2023版本的存储目录下都是一个目录,目录下存的是一个.meta元数据文件。
这就意味着在默认情况下,像2021老版本那样直接通过写磁盘的方式将文件写入minio,就已经行不通了。