セキュリティアップデートの方法はディストリビューションごとに違う

セキュリティ脆弱性が発表され、管理しているサーバにセキュリティパッチを適用する必要があることがわかった場合、アップデートを適用する必要がある。見て見ぬふりをすると後で責任問題に発展しかねないので、覚悟を決めてアップデート作業に取り組んだほうがよい。

パッケージで提供されていないソフトウェアを使っていたり、自前でビルドしたソフトウェアを使っていたりする場合は自分でパッチを適用してビルドし直す必要があるが、デフォルトパッケージを使っているのであれば、ディストリビューションの提供しているアップデート手順に従って作業すればカーネルもパッケージもアップデートが完了する。

ただし困ったことに、アップデートの方法はディストリビューションごとに異なるし、同じディストリビューションでもバージョンが変わると手順が異なることがある。稼働しているのが、前任者から引き継いだ、いつリリースされたのかもわからないバージョンや、聞いたことのないディストリビューションだと、その手間は涙モノだ。

例えば、前回取り上げたセキュリティ脆弱性「Dirty Cow」(CVE-2016-5195)は、nixCraftに掲載された記事「How To Patch and Protect Linux Kernel Zero Day Local Privilege Escalation Vulnerability CVE-2016-5195 [21/Oct/2016]」によれば、次のディストリビューションおよび同じカーネルを共有している仮想マシンやコンテナが影響を受けるという。

  • Red Hat Enterprise Linux 7.x
  • Red Hat Enterprise Linux 6.x
  • Red Hat Enterprise Linux 5.x
  • CentOS Linux 7.x
  • CentOS Linux 6.x
  • CentOS Linux 5.x
  • Debian Linux wheezy
  • Debian Linux jessie
  • Debian Linux stretch
  • Debian Linux sid
  • Ubuntu Linux precise (LTS 12.04)
  • Ubuntu Linux trusty
  • Ubuntu Linux xenial (LTS 16.04)
  • Ubuntu Linux yakkety
  • Ubuntu Linux vivid/ubuntu-core
  • SUSE Linux Enterprise 11
  • SUSE Linux Enterprise 12
  • Openwrt

各ディストリビューションのセキュリティアップデート方法は、以下のとおりだ。

●DebianまたはUbuntu


sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot

●Red Hat Enterprise LinuxまたはCentOS 5系、6系、7系


sudo yum update
sudo reboot

●Red Hat Enterprise LinuxまたはCentOS 4系


sudo up2date -u
sudo reboot

●Suse Enterprise LinuxまたはOpensuse Linux


zypper patch
reboot

なお、アップデートを実施してシステムを再起動した後は必ず「uname -a」などでバージョンを確認するとともに、セキュリティアップデート対象が残っていないことを確認するようにしよう。

ライブパッチと再起動計画

理想的なのは、システムを再起動することなくパッチを適用することだ。最近では特定のバージョンのディストリビューション、または有償サービスを受けると、カーネルのライブパッチを適用できるものがあり、システムを再起動しなくてもパッチを適用できるものがある。しかし、それで全てが完了するというわけではなく、システムの再起動が必要になるケースもあるようだ。

サービスを受ける側としては、常にサーバが動作しているほうが助かるので、できれば無停止で運用してくれと要望してくる。仕事を取るために、営業の段階でリップサービス的に「無停止システム構築しますよ」と言うこともあるだろう。しかし、それを実際に実現するのは非常に難しい。最初からそれを想定してシステム設定ができればよいが、多くの場合、後から「止めるな」という話が開発や運用に落ちてくるものだ。そして結局、弱い立場がそれを受け取ってしまう。

だが、無理なものは無理なのだ。早めに「定期的なシステムの再起動は必要だ」と申し出て、運用に組み込んだほうがよい。「セキュリティ脆弱性を個別に判断してなるべく再起動を避ける」という運用方法も考えられるが、その場合、再起動しなければならなくなった際は非常に大変な作業になる。将来、どこかのタイミングでセキュリティアップデートを実施することが予想されるのなら、あらかじめ定期的な再起動計画を立てて運用したほうがよいだろう。

また、最近はLinuxを搭載したネットワークデバイスがマルウェア感染の対象となり、ボットネットの構築に使われるケースも増えている。早晩、サーバ管理者に対して、「IoTデバイスも管理するように」という業務命令が下されるのは想像に難くない。今後は、そうした機器も含めて、定期的にアップデートを実施して再起動する仕組みを作っておくことが必要になるだろう。