V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DinoStray
V2EX  ›  程序员

给客户 docker 镜像, 会导致源码泄露么?

  •  
  •   DinoStray · 2020-12-24 14:54:48 +08:00 · 6102 次点击
    这是一个创建于 1431 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 使用 docker 会导致源码泄露么? 比如把 docker 镜像直接给客户
    2. 如果默认会, 那我使用二阶构建, 也还是会泄露么?
    25 条回复    2020-12-25 11:29:18 +08:00
    wfhtqp
        1
    wfhtqp  
       2020-12-24 14:56:00 +08:00
    就看你的镜像里包不包含源码
    manami
        2
    manami  
       2020-12-24 14:57:42 +08:00
    给了别人的东西安全都是没保证的,看你的代码值不值钱了
    jones2000
        3
    jones2000  
       2020-12-24 15:02:34 +08:00
    编程成 2 进制执行文件发布。
    DinoStray
        4
    DinoStray  
    OP
       2020-12-24 15:03:43 +08:00
    @wfhtqp 包含的, 源码在 DockerFIle 中构建
    eslizn
        5
    eslizn  
       2020-12-24 15:05:22 +08:00
    @DinoStray 直接 exec 进去就能捞出来
    DinoStray
        6
    DinoStray  
    OP
       2020-12-24 15:06:04 +08:00
    @eslizn 如果二阶构建呢
    x66
        7
    x66  
       2020-12-24 15:10:45 +08:00
    如果你在外面 build 好了之后,Dockerfile 里面只做 ADD 制成品的话是不会泄露的。
    当然 artifact 可以反编译这又是另一回事了。
    ixx
        8
    ixx  
       2020-12-24 15:11:50 +08:00
    dockerfile 构建没问题 近一点看你的 dockerfile 里管理写的 有没有将源码 copy 到镜像里 比如 go 项目你只把编译后的产出复制到镜像里 那镜像中是不会有源码的
    ixx
        9
    ixx  
       2020-12-24 15:13:10 +08:00
    @ixx #8 dockerfile 构建没问题 重点看你的 dockerfile 里怎么写的 有没有将源码 copy 到镜像里 比如 go 项目你只把编译后的产出复制到镜像里 那镜像中是不会有源码的 如果直接复制源码到镜像进执行 那就不行了 几层构建都不行
    xuanbg
        10
    xuanbg  
       2020-12-24 15:19:52 +08:00
    2 进制也能反汇编。总之,东西到了人家手里,就不受你的控制啦。安全?保密?不存在的!
    zoharSoul
        11
    zoharSoul  
       2020-12-24 15:58:22 +08:00
    这个问题与 docker 无关
    RudyS
        12
    RudyS  
       2020-12-24 16:11:49 +08:00
    只有 2 进制泄漏难度大些,但也不是不可能。
    index90
        13
    index90  
       2020-12-24 16:34:27 +08:00
    二阶段构建不会
    namelosw
        14
    namelosw  
       2020-12-24 16:38:57 +08:00 via iPad
    你没说你的技术栈和你具体怎么做的。脚本一般明文,字节码一般比较好反编译,二进制比较难。还有就是 ignore 掉该 ignore 的
    index90
        15
    index90  
       2020-12-24 16:41:46 +08:00
    话说个人觉得多阶段构建,按照 docker 目前给出的功能非常鸡肋。
    1. 没有编译缓存( layer 缓存不算)
    2. 多阶段构建的中间产物不好清理,经常导致构建机爆磁盘
    3. dockerfile 中构建说是为了确保一致性,但软件制品质量是通过测试保证的,只要确保在流水线上二进制程序与容器打包产出,没有必要在 dockerfile 中构建
    4. 可以在 builder 镜像中构建,然后在组装到输出镜像
    whileFalse
        16
    whileFalse  
       2020-12-24 17:15:44 +08:00
    好歹说语言啊
    wangritian
        17
    wangritian  
       2020-12-24 17:17:54 +08:00
    二阶构建 只 copy 可执行程序 不会暴露源码
    draguo
        18
    draguo  
       2020-12-24 17:57:31 +08:00
    跟盗版游戏一样,要是收益足够高就能破解
    Suddoo
        19
    Suddoo  
       2020-12-24 18:04:56 +08:00
    只 ADD 可执行文件,问题应该不大吧
    mmrx
        20
    mmrx  
       2020-12-24 18:20:49 +08:00   ❤️ 1
    核心的、值钱的逻辑建议放到你的服务上,docker 内的代码可以做个转发
    接口做好认证啥的,这样即使别人拿到源码也不会拿到你的核心竞争力
    felixcode
        21
    felixcode  
       2020-12-24 18:26:01 +08:00
    这边在问源码会不会泄漏,那边在答二进制会不会被反编译 /破解。
    julyclyde
        22
    julyclyde  
       2020-12-25 10:00:58 +08:00
    你这个提问,让我感觉
    你其实本来就知道会泄露,只是想来追求心里安慰的
    frandy
        23
    frandy  
       2020-12-25 10:15:30 +08:00
    1.会
    2.看语言,一些编译成二进制的语言逆向比较困难,像 java 这种编译成字节码的,如果没有做混淆和加固,就很容易。
    leekafai
        24
    leekafai  
       2020-12-25 10:30:19 +08:00
    合同限制
    szkoda
        25
    szkoda  
       2020-12-25 11:29:18 +08:00
    @DinoStray #6 就认为你是 golang 语言 吧,如果你一阶段拉代码编译,二阶段只是 copy 执行文件,那么可以起到保护源码的作用,一阶段的产出是一个匿名镜像而已,multi-stage 就该这么玩, 但这个和外面 build 好,Dockerfile 里面只做 ADD 是一样的效果。

    不过你这么交付给客户,防君子不防小人,反编译而已,问问公司有没有专门的安全工具吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5994 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 06:10 · PVG 14:10 · LAX 22:10 · JFK 01:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.