就是说,springboot 服务启动的时候,能不能检测自己是在物理服务器上启动的
还是在 docker 容器中启动的?
目前有个需求是禁止服务从 docker 中启动
请大佬赐教,谢谢
还是在 docker 容器中启动的?
目前有个需求是禁止服务从 docker 中启动
请大佬赐教,谢谢
|
qiyueyAug 21, 2019
1
先说一下背景,再评估方案,最后实现
|
|
yinzhiliAug 21, 2019
2
有一个思路:java 中可以执行 shell,然后你就知道当前环境是不是 docker 了
|
|
3
@qiyuey 比如,运行的服务要求在指定的 mac 地址的服务器上运行,docker 可以设置虚拟 mac,通过 java 程序获取到的 mac 地址无法区分是虚拟的还是物理的,所以就需要禁止服务从 docker 里启动
|
|
5
典型的 xy 问题。
|
|
SeneyAug 21, 2019
6
通过获取环境变量或者执行 exec systemd-detect-virt 类似这种方法判断是不是物理机
|
|
8
cat /proc/1/cgroup
|
|
rrfengAug 21, 2019
9
那要不要考虑虚拟机啊? kvm 之类的要禁止吗
|
|
10
@rockyou12 大佬们这么一说,我觉得确实有问题,不知道有没有什么好的办法,限制服务运行的地方,ip 地址的话也麻烦,万一啥时候 ip 地址变了,又得调整
|
|
qinxiAug 21, 2019
12
我更好奇是什么场景需要这种操作
|
|
chendyAug 21, 2019
13
我更好奇是什么场景需要这种操作
|
|
liuhuansirAug 21, 2019
14
我也好奇,前几天才学的 docker,刚上线的小程序的后台就是用 docker+springboot 部署的,你这反其道而行之,我想知道这么做的目的是啥
|
|
xapluxAug 21, 2019
16
一脸懵逼,这是什么操作。
|
|
17
@qinxi 简单的说,就是要限制服务运行的 mac 地址,docker 可以设置 mac 地址,所以不希望服务在 docker 上运行,不过目前看来这个需求有问题,我需要考虑一些其他方式来限制
|
|
qwerthhusnAug 21, 2019
18
简单的方法,检查 PID 是 systemd 还是其他应用(或者就是本应用)
|
|
qwerthhusnAug 21, 2019
19
@qwerthhusn PID 为 1
|
|
xujifAug 21, 2019
20
检查 pid,或者进程数量,docker 内部一般不会有太多进程
|
|
abcbuzhimingAug 21, 2019
21
|
|
alamayaAug 21, 2019
22
没戏,虚拟机也能改,联网授权,重复 mac 直接不启动就完事儿,不过 java 嘛,分分钟就被破了,人家想破解你,也防不了的
|
|
ginozhuAug 21, 2019
23
这个思路很有问题啊,讲道理虚拟化容器总能针对性地把自己伪装成目标服务器
调换一下思路,只要在目标服务器的某个目录放个私钥,springboot 启动时检验一下这个私钥,不就可以防止应用在任何 docker 或其他物理机启动吗 |
|
liukanshanAug 21, 2019
24
加密狗配合 JNI 是比较靠谱的方式 也可以在 docker 上面跑(共享 USB) 但不是完美的 只是增加了破解难度而已 (能过滤掉大部分的已经算很不错的了)。
|
|
RheinmetalAug 21, 2019
25
物理机也能改 mac 地址呀
你这授权方式从根上就不合适 |
|
arrow8899Aug 21, 2019
26
物理机的网卡也可以修改 mac 地址啊,如果你要做软件授权的话,这样肯定行不通,可以通过其他方式来限制
|
|
27
@abcbuzhiming 谢谢,就是带授权的,目前就是想防止有人把程序拷贝到其他地方运行,相关授权信息都是配置文件的形式存在
|
|
28
@ginozhu 谢谢,这个方式考虑过,放私钥,最终还是会形成文件,如果我们自己去部署,倒是没问题,但是如果让第三方部署,必然会出一个部署文档,这个时候私钥的存放位置就暴露了,所有人都知道这个东西了
|
|
29
@liukanshan 是的,加密狗是比较好的方式,可是加密狗的价格有点贵,这个还得考虑一下
|
|
yqsasAug 21, 2019 via iPhone
30
@abcbuzhiming jdk 这个是通过 cgroup 实现的吧,是不是 docker 还是判断不了
|
|
arcwardenAug 21, 2019
31
有人帮忙投个简历吗,招服务端技术大佬,详情见 https://www.yuque.com/docs/share/9ed147b5-dea4-4a4c-8447-be5ae2983b4a
|
|
kkkkkruaAug 21, 2019 via iPhone
32
判断 pid 是不是 1 ?
|
|
frozenshadowAug 22, 2019 via Android
33
用 dmicode,综合判断是否实体机器。
|
|
34
歪个楼
调用系统命令 shutdown -h now,能关机的不是 docker,关不了机的是 docker |