Docker 이미지 취약점 수정(centos2ol.sh 사용)

Docker 이미지를 실행하고 싶지만 취약성 검사를 통과하지 않습니까? 다음은 YugabyteDB 이미지(오픈 소스, PostgreSQL 호환, 분산 SQL 데이터베이스)에서 처리하는 방법의 예입니다.

취약점 감지: 도커 스캔



취약점을 확인하기 위해 여기에서 Docker 스캔을 사용하고 있습니다.

docker scan yugabytedb/yugabyte:2.15.1.0-b175


이렇게 하면 몇 가지 중요한 항목이 반환되며 CVE-2022-2526에 집중하겠습니다.



전체적으로:

Tested 252 dependencies for known vulnerabilities, found 1022 vulnerabilities.



그것은 많이입니다. 자주 업데이트되는 YugabyteDB 이미지이지만 CentOS를 기반으로 합니다.

수정 사항이 있습니까? rpm -q --변경 로그



살펴보기 위해 빠른 셸을 시작하겠습니다.

docker exec -it $(
docker run --rm -d yugabytedb/yugabyte:2.15.1.0-b175 sleep infinity
) bash -c "bash ; pkill -f '^sleep infinity$' "



이 셸에서 systemd 버전을 확인합니다.

[root@74b21c4194ea yugabyte]# cat /etc/system-release

CentOS Linux release 7.9.2009 (Core)

[root@74b21c4194ea yugabyte]# rpm -q systemd

systemd-219-78.el7_9.5.x86_64

[root@74b21c4194ea yugabyte]# yum info systemd

Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: pkg.adfinis.com
 * epel: mirror.nl.leaseweb.net
 * extras: pkg.adfinis.com
 * updates: pkg.adfinis.com
Installed Packages
Name        : systemd
Arch        : x86_64
Version     : 219
Release     : 78.el7_9.5
Size        : 23 M
Repo        : installed
From repo   : updates
Summary     : A System and Service Manager
URL         : http://www.freedesktop.org/wiki/Software/systemd
License     : LGPLv2+ and MIT and GPLv2+
Description : systemd is a system and service manager for Linux, compatible with
            : SysV and LSB init scripts. systemd provides aggressive parallelization
            : capabilities, uses socket and D-Bus activation for starting services,
            : offers on-demand starting of daemons, keeps track of processes using
            : Linux cgroups, supports snapshotting and restoring of the system
            : state, maintains mount and automount points and implements an
            : elaborate transactional dependency-based service control logic. It can
            : work as a drop-in replacement for sysvinit.



이미지는 CentOS 7.9를 기반으로 하며 systemd는 버전 219 릴리스78.el7_9.5입니다. 위의 스캔은 취약점이 릴리스78.el7_9.5에서 수정되었음을 나타냅니다.

안타깝게도 이 CVE는 CentOS에서 아직 수정되지 않았습니다.

[root@74b21c4194ea yugabyte]# rpm -q --changelog systemd | head

* Mon Dec 06 2021 systemd maintenance team <[email protected]> - 219-78.5
- install: fix a potential crash (#1828758)
- acl-util: only set the mask if not present (#2026361)



그래서... 솔루션은 무엇입니까?

수정된 경우: Dockerfile에서 yum update -y



업데이트를 사용할 수 있는 경우 간단히 yum update로 이미지를 빌드합니다.


mkdir -p /var/tmp/build
cd       /var/tmp/build

cat > Dockerfile <<'DOCKERFILE'
FROM  yugabytedb/yugabyte:2.15.1.0-b175
RUN   yum update -y
DOCKERFILE

docker build -t yugabytedb/yugabyte:2.15.1.0-b175-20220831
docker scan     yugabytedb/yugabyte:2.15.1.0-b175-20220831



불행하게도, 위에서 본 것처럼 제 경우에는 제가 관심을 갖고 있는 취약점이 최신 CentOS 업데이트로 수정되지 않았습니다.

모든 YugabyteDB 이미지는 새 릴리스 또는 빌드가 푸시될 때마다 업데이트되므로 아마 이 작업을 수행할 필요가 없을 것입니다.

그러나 CentOS는 수정이 지연됩니다. 새 이미지를 스캔한 결과 YugabyteDB 이미지 푸시 이후 3개의 수정된 취약점만 표시되었습니다.

Tested 252 dependencies for known vulnerabilities, found 1019 vulnerabilities.


최신 업데이트가 포함된 CentOS 호환 배포판이 필요합니다.

오라클 구조: centos2ol.sh



Oracle Linux는 더 나은 지원을 제공하는 무료 CentOS 대안입니다. CentOS에서 Oracle Linux로 이동하기 위한 빠른 스크립트를 제공합니다. 내가 하는 유일한 변경 사항은 GRUB 구성을 비활성화하는 것입니다. 새 이미지를 빌드하기 위한 Dockerfile은 다음과 같습니다.


mkdir -p /var/tmp/build
cd       /var/tmp/build

cat > Dockerfile <<'DOCKERFILE'
FROM  yugabytedb/yugabyte:2.15.1.0-b175
RUN   yum update -y
# https://blogs.oracle.com/scoter/post/switching-from-centos-to-oracle-linux-a-hands-on-example
RUN   curl -O https://raw.githubusercontent.com/oracle/centos2ol/main/centos2ol.sh
# Don't config grub in a container (will get /usr/sbin/grub2-probe: error: failed to get canonical path of `overlay')
RUN sed -e 's/grub2-mkconfig/: &/' -i centos2ol.sh
RUN   bash centos2ol.sh
# already updated, but just in case
RUN yum update

DOCKERFILE

docker build -t yugabytedb/yugabyte:2.15.1.0-b175-ol7 .
docker scan     yugabytedb/yugabyte:2.15.1.0-b175-ol7


대부분의 스캔된 취약점이 수정되어 훨씬 더 좋습니다.

Tested 275 dependencies for known vulnerabilities, found 81 vulnerabilities.


그리고 내 CVE는 고정된 것의 일부입니다. 남아 있는 유일한 취약점은 openssl 패키지에 있습니다. 왜 고쳐지지 않는지 확인하지 않았습니다. 어쨌든 기업에는 확인해야 할 자체 취약점 목록이 있을 수 있습니다.

다음은 yugabyted를 시작하고 모두 정상인지 확인하는 빠른 테스트입니다.

docker logs -f $(
docker run --rm -d yugabytedb/yugabyte:2.15.1.0-b175-ol7 yugabyted start 
)




Oracle Linux는 CentOS의 무료 대안이므로 위의 내용을 통해 Docker 이미지에 대한 최신 OS 업데이트를 쉽게 받을 수 있습니다.

좋은 웹페이지 즐겨찾기