跳转至

如何自定义 phpmyadmin 镜像?


2018-01-04 by dongnan

目标

设置 phpmyadmin 容器,禁止 mysql root账户登录,仅允许特定的账户 ruser(这里是只读) 登录,也就是白名单机制。

环境

phpmyadmin 4.6.6 
Docker 17.05.0-ce On CentOS 7.4 amd64

思路

通过自定义一个新的 phpmyadmin 镜像,并附加修改后 config.inc.php 配置文件完成目标,核心是 phpmyadmin 配置参数。

步骤

目录结构

tree ./
├── conf
│   └── config.inc.php
└── Dockerfile

1 directory, 2 files

配置文件

# 配置文件从已运行中的 phpmyadmin 容器中获得,如:
docker cp test-phpmyadmin:/etc/phpmyadmin/config.inc.php .

#编辑 config.inc.php ,查找 $cfg['Servers'][$i]['AllowNoPassword'] 行,并添加以下行;
$cfg['Servers'][$i]['AllowRoot'] = false;
$cfg['Servers'][$i]['AllowDeny']['order'] = 'explicit';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array('allow ruser from all');

Dockerfile 文件

cat Dockerfile

# custom phpmyadmin

FROM phpmyadmin/phpmyadmin
MAINTAINER dongnan #<@微信公众号:运维录>

# configure file
COPY conf/config.inc.php /etc/phpmyadmin/config.inc.php

# env
ENV TZ=Asia/Shanghai \
    LANG=en_US.UTF-8

构建镜像

docker build -t zongming.net/library/phpmyadmin:0.0.1 .
# ...省略
Successfully built d8241af7fac8

验证

# 根据实际环境,升级容器使用新版本的镜像,例如: docker-compose 环境,修改镜像版本后升级即可;
docker-compose up -d

测试root用户

提示禁止登录。

测试只读用户

指定的用户 ruser 允许登录。

扩展: phpmyadmin 安全

  • http协议 明文传输问题,通过 使用 https 协议加密数据,避免此问题。
  • 服务器暴漏在公网,被恶意扫描渗透等攻击行为, 通过防火墙白名单机制解决,
  • 因为 phpmyadmin 只面向公司特定的人员开放,所以防火墙仅信任他们的IP即可。

参考

  • 使用 docker 部署 phpmyadmin
  • https://docs.phpmyadmin.net/en/latest/setup.html#installing-using-docker
  • https://stackoverflow.com/questions/2631269/how-to-secure-phpmyadmin
  • https://docs.phpmyadmin.net/en/latest/config.html#config
回到页面顶部