当前位置: 首页 > news >正文

猿创征文|docker本地私人仓库快速搭建后的安全优化(用户鉴权和简易的web界面开启)

前言

docker的本地仓库其实要说随便一用,也确实简单,两三条命令就搞定了。但,如果想有一定的安全性,那么,还是比较复杂的一个事情。比如,用户权限,鉴权和web可视化管理界面的开启。

上一个博文大略的讲了一下如何搭建一个简单的本地私人docker仓库,并有两种方式,一个是最为简单的无任何安全性的本地仓库,人人都可随意上传下载的,一个是有证书的,使用https验证的本地私人docker仓库。博文地址是:猿创征文|docker本地仓库的搭建(简易可快速使用的本地仓库)_zsk_john的博客-CSDN博客

 现在就接着上面的博文,继续优化这个本地docker仓库。

一,

前情回顾+安全验证配置

不带证书的本地仓库,容器启动命令:

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry -v /opt/data/config.yml:/etc/docker/registry/config.yml  --name registry registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1

此时的web容器启动命令:

docker run -it -d --name registry-web -e REGISTRY_URL=http://192.168.217.17:5000/v2 -e REGISTRY_NAME=192.168.217.17 -p 9055:8080 registry.cn-beijing.aliyuncs.com/google_registry/docker-registry-web

登录地址 

 

 

这个时候启动的本地仓库是可以随意的push的,只要知道本地仓库的地址,这是很危险的,如果是有别有用心的人,那么,指不定push上传到服务器里什么文件呢,对吧,非常危险。那么,设置一个密码,在push操作之前我们对push的人做一个密码验证就可以大大提高本地仓库的安全性了。

(1)建立目录存放密码文件

先建立一个目录,mkdir /opt/auth/

(2)生成密码 文件,下面这个命令是生成的用户名是linkcm,密码是123456

docker run --entrypoint htpasswd registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1  -Bbn linkcm 123456 > /opt/auth/htpasswd

 (3)查看文件内容,确定是加密的

[root@slave1 ~]# cat /opt/auth/htpasswd 
linkcm:$2y$05$ImH24JuZ0NnsOHnwjUF9oeDO/F.t6JF3FHEYKaoomDa5327v/7YSC

(4) 使用密码文件。启动本地仓库

[root@slave1 auth]# docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry -v /opt/data/config.yml:/etc/docker/registry/config.yml -v /opt/auth:/auth -e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd  --name registry registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1
f219961ed9458a5fcaae2626f775e9fce4a9dccdd4dbe2ffc085c0244fd9c3c5

主要是更改配置了这些内容:

-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
-e REGISTRY_AUTH_HTPASSWD_REALM=Registry_Realm
-v /opt/auth:/auth

 (5)验证:

第一次没有登录的push,结果失败:

[root@slave1 auth]# docker push 192.168.217.17:5000/pause
The push refers to repository [192.168.217.17:5000/pause]
ba0dae6243cc: Preparing 
unauthorized: authentication required

登录后的push,结果成功:

[root@slave1 auth]# docker login 192.168.217.17:5000
Authenticating with existing credentials...
Login did not succeed, error: Error response from daemon: login attempt to http://192.168.217.17:5000/v2/ failed with status: 401 Unauthorized
Username (test): linkcm
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@slave1 auth]# docker push 192.168.217.17:5000/pause
The push refers to repository [192.168.217.17:5000/pause]
ba0dae6243cc: Layer already exists 
3.2: digest: sha256:4a1c4b21597c1b4415bdbecb28a3296c6b5e23ca4f9feeb599860a1dac6a0108 size: 526

这个时候启动的registry-web是无法登录的,会报错:

 

以上是本地仓库的用户安全加固,并没有web管理界面的加固。 




 web界面端的安全加固:

本地仓库的容器启动(这个本地仓库是没有密码验证的):

docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry -v /opt/data/config.yml:/etc/docker/registry/config.yml  --name registry registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1

此时的web界面开启(web端也是没有密码验证的,两个容器是一对的哦):

docker run -it -d --name registry-web -e REGISTRY_URL=http://192.168.217.17:5000/v2 -e REGISTRY_NAME=192.168.217.17:5000 -p 9055:8080 registry.cn-beijing.aliyuncs.com/google_registry/docker-registry-web

登录地址是:http://192.168.217.17:9055/ 

 

以上是没有用户认证的,那么,下面开启用户认证:

mkdir  /opt/registry-web
#删除web容器
docker rm -f registry-web
#再次启动web容器,此时这个容器会有密码验证,需要修改配置文件
docker run -it -d --name registry-web -e REGISTRY_URL=http://192.168.217.17:5000/v2 -e REGISTRY_NAME=192.168.217.17 -p 9055:8080 -v /opt/registry-web/config.yml:/conf/config.yml  registry.cn-beijing.aliyuncs.com/google_registry/docker-registry-web

 以上是挂载了一个volume,然后编辑/opt/registry-web/目录下的config.yml文件,文件内容如下:

url后面接的是自己搭建的本地仓库的服务器ip:5000/v2  

readnoly  原来是true,现在修改为false

[root@slave1 registry-web]# cat config.yml 
# Default values for yml config

registry:
  # Docker registry url
  url: 'http://192.168.217.17:5000/v2'
  # web registry context path
  # empty string for root context, /app to make web registry accessible on http://host/app
  context_path: ''
  # Trust any SSL certificate when connecting to registry
  trust_any_ssl: false
  #  base64 encoded token for basic authentication
  basic_auth: ''
  # To allow image delete, should be false
  readonly: false
  # Docker registry fqdn
  name: 'localhost:5000'
  # Authentication settings
  auth:
    # Enable authentication
    enabled: true
    # Allow registry anonymous access
    # allow_anonymous: true # not implemented
    # Token issuer
    # should equals to auth.token.issuer of docker registry
    issuer: 'test-issuer'
    # Private key for token signing
    # certificate used on auth.token.rootcertbundle should signed by this key
    key: /config/auth.key

此时,登录需要密码验证了,账号是admin,密码也是admin:

 

带证书的本地仓库容器启动命令:

docker run -d --restart=always --name registry -v /opt/ssl:/certs -v /opt/data/registry:/var/lib/registry -v /opt/data/config.yml:/etc/docker/registry/config.yml -e REGISTRY_HTTP_ADDR=0.0.0.0:443 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myssl.pem -e REGISTRY_HTTP_TLS_KEY=/certs/myssl.key -p 443:443 registry.cn-beijing.aliyuncs.com/google_registry/registry:2.4.1

未完待续

相关文章:

  • 在瑞芯微 Rockchip SDK中增加自己的程序并使用CMake编译
  • Elasticsearch中的评分排序--Function score query
  • 【我不熟悉的css】04. jpg、png 合理使用图片格式
  • Java的Lambda表达式学习笔记:使用lambda表达式
  • 2022-09-02
  • 14天刷爆LeetCode算法学习计划——Day05 快慢指针(2)
  • Redis进阶
  • 双软认定流程?
  • 淘宝如何选词打造黄金标题?构词规则是什么?
  • 跨境运营培训品牌商店设计技巧
  • 双软企业认证与税收优惠政策讲解(比较齐全)
  • Java处理Excel表格的读取和写入
  • MySQL之临时表
  • 氨丙基咪唑离子液体(AMIBr)改性纤维素气凝胶吸附剂(CAgAMIBr)的实验要求
  • Go 命名规范
  • CSS 三角实现
  • Java 网络编程(2):UDP 的使用
  • JavaScript学习总结——原型
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • nodejs调试方法
  • Promise面试题2实现异步串行执行
  • Puppeteer:浏览器控制器
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 高度不固定时垂直居中
  • 你不可错过的前端面试题(一)
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • #14vue3生成表单并跳转到外部地址的方式
  • ( 10 )MySQL中的外键
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)JAVA中的堆栈
  • (转)创业的注意事项
  • .aanva
  • .gitignore
  • .gitignore文件_Git:.gitignore
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net6使用Sejil可视化日志
  • .py文件应该怎样打开?
  • .so文件(linux系统)
  • @Pointcut 使用
  • @RequestMapping 的作用是什么?
  • [2023年]-hadoop面试真题(一)
  • [Android Studio 权威教程]断点调试和高级调试
  • [c]统计数字
  • [C++]指针与结构体
  • [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
  • [docker] Docker容器服务更新与发现之consul
  • [English]英语积累本