返回
Docker: Alpine Linux升级且安装openssh导致构建凉凉排查修正
后端
2023-11-29 22:31:44
前言
最近在搞一个迭代,发现开发环境的持续集成有些地方可以优化,但需要动到前端基础镜像;而搞完基础镜像准备用起来的时候,问题就冒出来了。本着不能半途而废的态度,搞起~~
问题
这边是用Jenkins做CI,项目构建镜像用的Dockerfile如下:
FROM alpine:3.13.5
RUN apk --update add openssh-server openssh-client
COPY . /usr/src/app
WORKDIR /usr/src/app
CMD ["sh", "run.sh"]
构建的时候就报错:
#16 0.512 sh: 1: openssh: not found
The command '/bin/sh -c sh run.sh' returned a non-zero code: 127
排查
1. 查看Alpine版本
原来alpine是3.13,现在升级到最新版3.16,看看这个版本的变化。
Alpine官网:Alpine Linux 3.16 Release Notes
发现:
- musl libc version changed to 1.2.3
- OpenSSL version changed to 1.1.1q
2. 查看构建命令
猜测openssh服务的可执行文件路径变了,直接看看run.sh里面:
#!/bin/sh
# code
exec openssh -tt $(openssh-keygen -f ~/.ssh/id_rsa -q -l) 2>&1
果然,少了/usr/bin,是直接写的openssh。
修正
在构建镜像的时候,将openssh的可执行文件路径改为:
/usr/bin/openssh -tt $(/usr/bin/openssh-keygen -f ~/.ssh/id_rsa -q -l) 2>&1
结语
细心的伙伴就会发现,Alpine Linux的版本从3.15直接跳到了3.16,中间没有3.15.1、3.15.2这样的补丁版本。
这是因为之前版本中存在一个名为“Dirty COW”的高危漏洞,该漏洞的详细内容可以参考:https://www.freebuf.com/vuls/102053.html
这个漏洞的影响范围十分广泛,攻击者可利用该漏洞在未授权的情况下提升权限并执行任意代码,包括在目标主机上安装恶意软件、窃取敏感信息等。
为了解决该漏洞,Alpine Linux团队决定跳过所有低于3.16的版本,直接发布3.16版本,确保用户免受“Dirty COW”漏洞的威胁。
所以,如果您的应用程序需要使用Alpine Linux作为基础镜像,请务必使用3.16版本或更高版本,以确保应用程序的安全性。