exim이 컴파일된 버전 대신 시스템의 openssl을 사용하는 이유는 무엇입니까?

exim이 컴파일된 버전 대신 시스템의 openssl을 사용하는 이유는 무엇입니까?

exim 4.84에서 exim 4.94로 업그레이드하려고 합니다.

내 exim 로컬/Makefile에는 다음이 포함되어 있습니다.

SUPPORT_TLS=yes
TLS_LIBS=-L/MYPATH/lib/ -lssl -lcrypto -ldl
TLS_INCLUDE=-I/MYPATH/include/openssl/
USE_OPENSSL=yes

build-Linux-x86_64 디렉터리에서 컴파일된 바이너리를 확인하면 다음과 같은 결과가 나옵니다. 컴파일된 OpenSSL이 런타임 OpenSSL과 일치합니다.

$ build-Linux-x86_64/exim -d-all+acl --version
Exim version 4.94 #2 built 05-Jun-2020 13:15:11
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Support for: crypteq iconv() OpenSSL DANE DKIM DNSSEC Event OCSP PIPE_CONNECT PRDR TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch dbm dbmjz dbmnz dnsdb
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile autoreply pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Compiler: GCC [4.9.2]
Library version: Glibc: Compile: 2.19
                        Runtime: 2.19
Library version: BDB: Compile: Berkeley DB 4.8.30: (April  9, 2010)
                      Runtime: Berkeley DB 4.8.30: (April  9, 2010)
Library version: OpenSSL: Compile: OpenSSL 1.0.2l  25 May 2017
                          Runtime: OpenSSL 1.0.2l  25 May 2017
                                 : built on: reproducible build, date unspecified
Library version: PCRE: Compile: 8.36
                       Runtime: 8.36 2014-09-26

그러나 make install을 사용하여 설치하고 최종 바이너리를 확인한 후에는 다음과 같은 결과를 얻습니다.

$ exim-4.94-2 -d-all+acl --version
Exim version 4.94 #2 built 05-Jun-2020 13:15:11
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Support for: crypteq iconv() OpenSSL DANE DKIM DNSSEC Event OCSP PIPE_CONNECT PRDR TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch dbm dbmjz dbmnz dnsdb
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile autoreply pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Compiler: GCC [4.9.2]
Library version: Glibc: Compile: 2.19
                        Runtime: 2.19
Library version: BDB: Compile: Berkeley DB 4.8.30: (April  9, 2010)
                      Runtime: Berkeley DB 4.8.30: (April  9, 2010)
Library version: OpenSSL: Compile: OpenSSL 1.0.2l  25 May 2017
                          Runtime: OpenSSL 1.0.1t  3 May 2016
                                 : built on: Fri Mar  1 20:47:13 2019
Library version: PCRE: Compile: 8.36
                       Runtime: 8.36 2014-09-26

런타임 OpenSSL 버전은 제가 컴파일한 것이 아니라 시스템에서 가져온 것입니다.

여기서 무슨 문제가 있는지 아시나요?

편집하다:

확인해 보니 두 파일이 모두 동일하고 exim 바이너리를 /tmp와 같은 임의의 디렉터리에 복사하면 올바른 런타임이 표시됩니다. 이것은 내 bin 디렉토리에서만 발생합니다.

답변1

Exim은 시스템의 공유 라이브러리를 사용합니다. Exim이 아닌 런타임 시 시스템에 의해 로드됩니다. 이것이 바이너리가 동일한 이유입니다.

따라서 기본적으로 컴파일된 OpenSSL을 사용하려는 경우 최소한 다음 세 가지 옵션이 있습니다(특정 순서 없음).

  • Exim을 실행하기 전에 LD_LIBRARY_PATH를 사용하여 로컬 OpenSSL 버전을 가리킵니다. 그러면 시스템 로더가 먼저 해당 위치에서 공유 라이브러리를 가져오도록 지시합니다.

  • Exim은 정적 바이너리로 컴파일됩니다. 이는 바이너리에 이미 OpenSSL 라이브러리가 내장되어 있음을 의미합니다. 동적 로딩이 없습니다.

  • 시스템 전체에서 사용할 수 있도록 컴파일된 OpenSSL을 시스템에 설치합니다.

OpenSSL은 민감한 라이브러리이므로 언제든지 완전히 업데이트될 수 있습니다. 배포판에 따라 보안 업데이트도 받을 수 있도록 패키지 버전을 설치하는 것이 더 나을 수도 있습니다.

관련 정보