最近遇到一次漏洞安全扫描,要求docker compose内tomcat执行身份的执行权限不能是root或者SYSTEM或超级管理员权限,应按最小权限分配。且该账户仅限本地使用,不能远程运维登录。
需要将tomcat的执行身份更改为其他用户, 解决方法如下。
1.创建非超级管理员权限用户
直接在ubuntu内创建用户即可,我以test用户为例。
2.重新打包tomcat镜像。
我用的是ubuntu22.04desktop,需要能翻出去,连接docker hub。
安装docker 和 docker compose不在此次讨论范围内。
编写Dockerfile
#自己打包docker镜像
#tomcat:9.0.96-jre8
#包内用户为test
# 使用 tomcat:9.0.96-jre8 作为基础镜像
FROM tomcat:9.0.96-jre8
# 创建 test 用户和组
RUN groupadd -r test && useradd -r -g test -m test
# 修改 Tomcat 相关文件的所有权,确保 test 用户可以访问
RUN chown -R test:test /usr/local/tomcat
# 切换到 test 用户
USER test
# 启动 Tomcat
CMD ["catalina.sh", "run"]
通过Dockerfile重新打包镜像,在Dockerfile所在的目录下 输入
docker build -t tomcat:9.0.96-jre8 .
(注意后面有个点)。
3.编写docker compose
version: '3.0'
services:
tomcat:
image: tomcat:9.0.96-jre8
user: test #指定执行用户为test
volumes:
- ./tomcat/webapps:/usr/local/tomcat/webapps
- ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
- ./tomcat/logs:/usr/local/tomcat/logs
- ./tomcat/customized:/usr/local/tomcat/customized
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
ports:
- 8203:8081
- 9996:9996
networks:
DJI-network:
ipv4_address: 172.18.0.10
environment:
- TZ=Asia/Shanghai
restart: always
logging:
driver: "json-file" #默认的文件日志驱动
options:
max-size: "100m"
max-file: "1"
大功告成。
此时查看docker内用户
docker exec tomcat whami
查看执行用户
ps -aux | grep tomcat