如何自定义 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