サーバー 開発 OS linux

yum・dnfを叩いたら「libcurl.so.4 Not Found」エラーが発生した

yum実行でエラーが発生

ソフトウェアのバージョンアップ確認を行うため、「yum update」をアップデートしようとしたら「libcurl.so.4」が見つからずエラーとなった。


# yum update
Traceback (most recent call last):
  File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: libcurl.so.4: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/yum", line 57, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.6/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python3.6/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python3.6/site-packages/libdnf/__init__.py", line 8, in <module>
    from . import error
  File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 17, in <module>
    _error = swig_import_helper()
  File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 16, in swig_import_helper
    return importlib.import_module('_error')
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_error'

「libcurl.so.4」は過去にあったが、今は見つからないっぽい

# locate libcurl.so.4
/usr/lib64/libcurl.so.4

# ll /usr/lib64/libcurl.so.4
ls: '/usr/lib64/libcurl.so.4' にアクセスできません: No such file or directory

# updatedb
# locate libcurl.so.4
#
#↑updatedbしたらヒットしなくなった

どこかのタイミングで消されたっぽいのでいつからなくなったのか調査してみることに。

libcurl.soはシンボリックリンクのみ存在

「/usr/lib64/libcurl.so」を確認してみると、「libcurl.so.4.5.0」へのシンボリックリンク設定がされていた。
ただし、シンボリックリンク先の 「libcurl.so.4.5.0」 は見当たらなかった。

# ll /usr/lib64/libcurl.so
lrwxrwxrwx 1 root root 16 11月  3 01:31 /usr/lib64/libcurl.so -> libcurl.so.4.5.0

ClamAVが原因

messages情報に該当しそうなログが見当たらず、途方に暮れていたところ、ClamAVのログでそれらしきログが見つかった。

Nov 18 02:28:48 kaede CROND[2710289]: (root) CMDOUT (/usr/lib64/libcurl.so.4.5.0: Unix.Trojan.Coinminer-9910195-0 FOUND)

トロイの木馬系として除外されたっぽい。

再インストール

libcurlを再インストールすれば解決しそうだが、yumが使えないので、リポジトリサイトから直接libcurlを取得・更新する

バージョンの確認

# cat /etc/redhat-release 
CentOS Linux release 8.4.2105

現在インストールされているlibcurlの確認

最新のlibcurlを入れてもいいのだが、依存関係であれこれインストールするリスクを考えると、現行バージョンの再インストール⇒yumで更新
したほうが面倒ごとは少なさそう。

なので、現在インストールされているlibcurlを確認

# rpm -qa|grep libcurl
libcurl-devel-7.61.1-18.el8_4.2.x86_64
libcurl-7.61.1-18.el8_4.2.x86_64

リポジトリサイトからダウンロード

/etc/yum.repos.d/CentOS-Linux-Sources.repoを確認するとリポジトリサイトの確認ができる。

# CentOS-Linux-BaseOS.repo
#
# The mirrorlist system uses the connecting IP address of the client and the
# update status of each mirror to pick current mirrors that are geographically
# close to the client.  You should use this for CentOS updates unless you are
# manually picking other mirrors.
#
# If the mirrorlist does not work for you, you can try the commented out
# baseurl line instead.

[baseos]
name=CentOS Linux $releasever - BaseOS
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
#baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
gpgcheck=1
enabled=1

今回はブラウザ上でlibcurlのrpmを取得・ダウンロードするため、baseurlのURL「http://mirror.centos.org」をブラウザで確認する。

バージョンの確認で調べたCentOSのバージョンで選択する。

選択したバージョンが古い場合はreadmeファイルしかなく、「http://vault.centos.org/」への遷移するよう勧められるのでそちらで同じようにOSバージョンの選択から実施する。

OSバージョン選択後、どのリポジトリを取得するのか選択する。
「libcurl」は標準インストールなので、「 BaseOS/x86_64/os/Packages 」になる。
URLでは「https://vault.centos.org/8.4.2105/BaseOS/x86_64/os/Packages/ 」となる。

現在インストールされているlibcurlの確認 」で調べたlibcurlのバージョンを検索するとヒットするので、rpmをダウンロードする。

rpmコマンドで再インストール

ダウンロードしたrpmをサーバに上げて、rpmコマンドで再インストールを行う。

# rpm -ivh --replacepkgs libcurl-7.61.1-18.el8_4.2.x86_64.rpm 
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:libcurl-7.61.1-18.el8_4.2        ################################# [100%]

libcurlが配置されていたらOK

# ll /usr/lib64/libcurl*
lrwxrwxrwx 1 root root     16 11月  3 01:31 /usr/lib64/libcurl.so -> libcurl.so.4.5.0
lrwxrwxrwx 1 root root     16 11月  3 01:31 /usr/lib64/libcurl.so.4 -> libcurl.so.4.5.0
-rwxr-xr-x 1 root root 592320 11月  3 01:31 /usr/lib64/libcurl.so.4.5.0

これでyumコマンドが使えるようになった。

ClamAVを検知パターンを最新にすると削除されなくなる。

libcurlを再インストール後、ClamAVを再実行するとウイルスとして検知されなくなった。

# freshclam
ClamAV update process started at Sun Nov 21 23:57:37 2021
WARNING: Your ClamAV installation is OUTDATED!
WARNING: Local version: 0.103.3 Recommended version: 0.103.4
DON'T PANIC! Read https://www.clamav.net/documents/upgrading-clamav
daily database available for update (local version: 26356, remote version: 26360)
Current database is 4 versions behind.
Database test passed.
daily.cld updated (version: 26360, sigs: 1946870, f-level: 90, builder: raynman)
main.cvd database is up-to-date (version: 62, sigs: 6647427, f-level: 90, builder: sigmgr)
bytecode.cld database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2)

# clamscan --remove -r /usr/lib64/libcurl.so.4.5.0 
/usr/lib64/libcurl.so.4.5.0: OK

----------- SCAN SUMMARY -----------
Known viruses: 8579047
Engine version: 0.103.3
Scanned directories: 0
Scanned files: 1
Infected files: 0
Data scanned: 0.59 MB
Data read: 0.56 MB (ratio 1.06:1)
Time: 18.890 sec (0 m 18 s)
Start Date: 2021:11:22 00:01:51

2021年11月18日に取得した検知パターンに誤検知データのパターンが入っていたのかなーと推測。

-サーバー, 開発, OS, linux
-, , , ,