请教大佬,有什么办法禁止 springboot 服务在 docker 中启动

2019-08-21 13:59:08 +08:00
 NoKey
就是说,springboot 服务启动的时候,能不能检测自己是在物理服务器上启动的
还是在 docker 容器中启动的?
目前有个需求是禁止服务从 docker 中启动
请大佬赐教,谢谢
3337 次点击
所在节点    程序员
34 条回复
abcbuzhiming
2019-08-21 15:58:02 +08:00
这个问题提的方式就是错的,楼主应该问的是,java 怎么检测自己是在物理服务器上还是在 docker 里,肯定是能做到的,jdk11 之前,jvm 一直不能检测 docker 环境,导致申请资源时一直以物理机整体资源为标准申请,jdk11 之后,才能以 docker 环境限制的资源标准来申请资源,因此 java 肯定能检测到自己是不是 docker 里
@qinxi
@chendy
八成是带有授权的程序,禁止用户多开
alamaya
2019-08-21 16:04:22 +08:00
没戏,虚拟机也能改,联网授权,重复 mac 直接不启动就完事儿,不过 java 嘛,分分钟就被破了,人家想破解你,也防不了的
ginozhu
2019-08-21 16:08:12 +08:00
这个思路很有问题啊,讲道理虚拟化容器总能针对性地把自己伪装成目标服务器
调换一下思路,只要在目标服务器的某个目录放个私钥,springboot 启动时检验一下这个私钥,不就可以防止应用在任何 docker 或其他物理机启动吗
liukanshan
2019-08-21 16:11:42 +08:00
加密狗配合 JNI 是比较靠谱的方式 也可以在 docker 上面跑(共享 USB) 但不是完美的 只是增加了破解难度而已 (能过滤掉大部分的已经算很不错的了)。
Rheinmetal
2019-08-21 16:11:58 +08:00
物理机也能改 mac 地址呀
你这授权方式从根上就不合适
arrow8899
2019-08-21 16:12:27 +08:00
物理机的网卡也可以修改 mac 地址啊,如果你要做软件授权的话,这样肯定行不通,可以通过其他方式来限制
NoKey
2019-08-21 16:20:43 +08:00
@abcbuzhiming 谢谢,就是带授权的,目前就是想防止有人把程序拷贝到其他地方运行,相关授权信息都是配置文件的形式存在
NoKey
2019-08-21 16:22:06 +08:00
@ginozhu 谢谢,这个方式考虑过,放私钥,最终还是会形成文件,如果我们自己去部署,倒是没问题,但是如果让第三方部署,必然会出一个部署文档,这个时候私钥的存放位置就暴露了,所有人都知道这个东西了
NoKey
2019-08-21 16:24:05 +08:00
@liukanshan 是的,加密狗是比较好的方式,可是加密狗的价格有点贵,这个还得考虑一下
yqsas
2019-08-21 16:35:14 +08:00
@abcbuzhiming jdk 这个是通过 cgroup 实现的吧,是不是 docker 还是判断不了
arcwarden
2019-08-21 17:25:24 +08:00
有人帮忙投个简历吗,招服务端技术大佬,详情见 https://www.yuque.com/docs/share/9ed147b5-dea4-4a4c-8447-be5ae2983b4a
kkkkkrua
2019-08-21 20:04:16 +08:00
判断 pid 是不是 1 ?
frozenshadow
2019-08-22 00:17:00 +08:00
用 dmicode,综合判断是否实体机器。
wweir
2019-08-22 09:16:18 +08:00
歪个楼
调用系统命令 shutdown -h now,能关机的不是 docker,关不了机的是 docker

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/593826

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX