docker - 防止访问 docker 容器内的代码
问题描述
我想构建一个可供客户使用的生产就绪图像,我想知道是否有办法阻止访问我在图像中的代码?
我目前的方法是将我的代码存储在/root/
其中并创建一个“客户”用户,该用户的主目录中只有一个启动脚本。
我的 Dockerfile 看起来像这样
FROM node:8.11.3-alpine
# Tools
RUN apk update && apk add alpine-sdk
# Create customer user
RUN adduser -s /bin/ash -D customer
# Add code
COPY ./code /root/code
COPY ./start.sh /home/customer/
# Set execution permissions
RUN chown root:root /home/customer/start.sh
RUN chmod 4755 /home/customer/start.sh
# Allow customer to execute start.sh
RUN echo 'customer ALL=(ALL) NOPASSWD: /home/customer/start.sh' | EDITOR='tee -a' visudo
# Default to use customer
USER customer
ENTRYPOINT ["sudo","/home/customer/start.sh"]
这种方法按预期工作,如果我要进入容器,我将无法看到代码库,但我可以启动服务。
我的 Dockerfile 中的最后一步是为 root 用户设置密码或完全删除它。
我想知道这是否是一个正确的生产流程,或者我是否试图将 docker 用于它不应该做的事情?
如果这是正确的,我还应该锁定哪些其他内容?
任何提示表示赞赏!
解决方案
任何有你形象的人总能做到
docker run -u root imagename sh
任何可以运行 Docker 命令的人都可以访问他们的系统(或者可以通过 简单地将其提供给自己docker run -v /etc:/hostetc ...
),因此可以自由地四处/var/lib/docker
寻找,看看那里有什么。如果以系统特定的方式分散在目录中,它将具有所有图像的所有内容。
如果您的源代码实际上是秘密的,您应该确保您使用的是编译语言(C、Go、Java 之类的),并且您的构建过程不会意外地将源代码泄漏到构建的映像中,并且它将是与您将二进制文件分发给最终用户的其他任何东西一样安全。如果您使用的是脚本语言(Python、JavaScript、Ruby),那么最终用户本质上必须拥有能够运行程序的代码。
推荐阅读
- python - 从单独的 python 线程更新 newt (snack.py) 接口
- r - /usr/lib/rstudio-server/bin/rserver:/usr/pgsql-12/lib/libpq.so.5:没有可用的版本信息(/usr/lib/rstudio-server/bin/rserver 需要)
- disassembly - 反汇编是否需要分析指针关系(别名)?
- javascript - React 检测 iframe src 的变化
- apache - HHVM 3.21 处于 repo 权威模式,Drupal 7,mod_rewrite 问题
- javascript - 如何禁用某些图像 Javascript 的灯箱?
- java - HttpURLConnection 在 POST 上失败,HTTP 400
- python - 错误:找不到满足要求 busio 的版本(来自版本:无)
- r - 在 dplyr 中旋转和转换 df
- html - 如果在容器 div 中,子组件是否可以填充页面的剩余宽度?