Docker 怎么加密,防止再次分发?内网不联网
Docker 怎么加密,防止再次分发?内网不联网
-
源码层面保护,防止docker cp 将源码拷贝出来,进行编辑
-
混淆代码将代码转为pyc
-
代码跑起来,把代码删除?
-
用 Nuitka 打包github.com/Nuitka/Nuitka和 Cython 一样,都是先将 py 代码转成 C++,但是 Nuitka 在用来打包方面比 Cython 好用
-
-
镜像层面保护,防止镜像被copy 分发:镜像在启动的时候,启动要校验,启动的时候,使用MAC地址
-
服务层面保护:登陆时候验证,MAC地址
实现方式1: 激活码 不可行
将代码转成pyc,一次性激活码必须是单点。。必须是我们来维护才行。。公网服务, 不能满足内网不联网的需求
实现方式2:绑定Mac地址
写个服务,根据mac地址 生成镜像
代码转化为pyc ,一个mac地址,一个镜像。
代码验证
-
项目启动,启动时候加段逻辑,判断Mac地址是否和Image的Mac地址相同
-
将代码转换为pyc
怎么获取宿主机的mac地址?
将宿主机的/sys/devices 挂载在容器里面,就可以查到宿主机的mac地址。
import uuid
def get_mac_address():
mac = uuid.UUID(int=uuid.getnode()).hex[-12:]
return ":".join([mac[e:e + 2] for e in range(0, 11, 2)])
if __name__ == '__main__':
print(get_mac_address())
Django 方式 pyc 文件生成方式
https://github.com/lishulongVI/free_login/blob/v1/pyc_create.py
编译pyc文件
python pyc_create.py compile ./
将pyc文件移动到py所对应的目录
python pyc_create.py copy ./
移除源码 py
python pyc_create.py remove ./
代码层面MAC验证:
项目启动处:GitHub
项目中间件每个请求都验证MAC地址:GitHub
项目在生产上部署,将setting文件中的debug模式 关闭
具体做法:
1、获取到要部署机器的mac地址
import uuid
":".join([uuid.UUID(int=uuid.getnode()).hex[-12:][e:e + 2] for e in range(0, 11, 2)])
2、把获取的mac地址填充到项目中
-
全局搜索
# TODO 把需要部署到某台机器的MAC地址进行绑定
-
将获取到的要部署的目的机器地址 放到
if get_mac_address() in []:
[] 中,有两个地方
3、docker 镜像修改
# copy 代码之后添加以下命令
WORKDIR /home/work
# 清理缓存
RUN python3 pyc_create.py clean ./
# 转换pyc
RUN python3 pyc_create.py compile ./
# 替换py
RUN python3 pyc_create.py copy ./
# 重命名py
RUN python3 pyc_create.py `cpython` ./
# 移除源码py
RUN python3 pyc_create.py remove ./
4、docker-compose文件修改
# 1、挂载宿主机的目录:/sys/devices
~~volumes: ~~
~~ - /sys/devices:/sys/devices~~
# 方式1不行
需要设置network_model:host
5、服务启动
-
比如我在python 3.7.6版本中转换的pyc 命名 manage.py -> manage.cpython-37.pyc
-
根据python版本去定义启动文件
python manage.py runserver 0.0.0.0:8000
需要这样启动
python manage.cpython-37.pyc runserver 0.0.0.0:8000
为什么不将MAC地址作为环境变量传递进去,和程序获取的MAC地址 做比较
- 不让对方知道是根据MAC地址
- 将MAC地址写死到项目中,可定制化不强,每次需要打包笨重的镜像,每次都需要修改代码,
- 需要实现一个镜像,绑定多个MAC地址。不修改代码。
- 对称加密算法实现的优缺点
- 对MAC地址进行加密,获取授权码
- 程序对Mac地址再加密,然后和授权码对比
- 假设对方破解了代码的加密算法,并且知道加密MAC作为授权码,就坏事了
- 非对称加密算法实现的优缺点
- 曝漏了是根据MAC地址进行授权的,这样的话存在修改mac地址 镜像分发得不到遏制
- 即使对方破解了加密算法代码部分,没有公钥,也无法实现对MAC地址的加密,获得授权文件
- 对称加密算法+非对称加密算法
- 隐藏了MAC地址 加密MAC地址
- 输入MAC加密地址 输出授权文件
标题:Docker 怎么加密,防止再次分发?内网不联网
作者:lishulongVI
地址:https://blog.thinking.mobi/articles/2020/02/12/1581499687258.html
非对称加密算法,实现公钥加密得到授权文件,私钥解密授权文件,实现多个机器多个授权文件
多个授权文件,同一个镜像。
每个mac配置一个镜像?还有更好的方式么