Ubuntu security update自動化

はじめましてのヒトは、はじめまして。
いつもの皆様、こんにちわ。
大葉さんです。

最近、個人管理しているサーバの数が多くなり過ぎまして、メンテナンスが色々とメンドクサくなりました。とはいえ、特にセキュリティに関するパッチ適応はサボるわけにはいかないってことで、自動化にチャレンジです。忘れる前にメモせねば。

なぜこの記事を書いたのか?

Ubuntuのパッチ管理自動化手法を、目的別に整理、記録、保存したい為です。ご本人様が、よく設定方法を忘れるので。さすがオレ!

■[security updateのみ]自動化

「安定性第一、パッケージを上げると動かなくなるかもなので、必要最低限のパッチだけ適応したい」という、手堅くて理想的で神様みたいなホワイト要望です。これが出来るなら本番環境も安心!

調べていて驚いたんですが、標準aptではこの機能、実装されていないんですね。痒いところに手が届かない!

対策:以下のパッケージをインストールしましょう!

sudo apt install unattended-upgrades

Ubuntu公式サイトにて紹介されている推奨手法です。

公式を越えるHowToマニュアルはないので、使い方については上記を読んで下さいませ。1次情報に触れるって大切。

■[security update+パッケージのパッチ]自動化

「Ubuntuのセキュリティも大切だけど、利用しているパッケージのパッチも定期的に当てたいよね」という、王道で現実的な普通の要望です。通常はこれかなって思います。

基本的にはcrontabでスケジュール実行するんですが、ユーザ権限で実行するとsudoが通らなくてエラーします。だからといってsudo実行時のパスワード入力を省略しちゃうのはNGです。乗っ取られやすくなっちゃうぞ!

(1)
sshで対象のUbuntuに接続します。rootユーザでのSSH接続は無効ですよ。

ssh [UbuntuサーバのIP] -l [ユーザ名] -p [ポート変更(強く推奨)]

(2)
ポイント:ssh上でrootユーザに切り替えます。

sudo su

こうなっていればOK

test@ubuntu:~$ sudo su
[sudo] password for test: [testユーザのパスワード]
root@ubuntu:/home/test#

 (3)
crontab -e を実行してスケジュール確認。初回起動時はエディタを選びましょう(vi派)

crontab -e

こんな画面がでればOK

# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command

 (4)
以下を入力。

20 18 * * * apt update && apt -y upgrade && apt -y autoremove

ポイントは2つ。
 a.[sudo]を使うとログが化けるのでコマンドに追加しない。
 b.コマンド実行時間は他のジョブと被らない時間帯をUTCで指定。
  (上記は日本時間朝3時20分指定)

(5)
ファイルを保存してcrontabを終了。
以下が出ればOK。

root@ubuntu:/home/test# crontab -e
crontab: installing new crontab
root@ubuntu:/home/test# 

 (6)
exitで通常ユーザに戻りましょう。
以下が出ればOK

root@ubuntu:/home/test# exit
exit
test@ubuntu:~$ 

 (7)
一晩寝かして、翌日、パッチが当たっていれば成功!

■[security update+パッケージのパッチ+カーネル更新]自動化

「Ubuntuのセキュリティも大切だけど、利用しているパッケージのパッチも定期的に当てたいよね、あ、カーネルもね」という、新しいもの好きでとにかく最新じゃないと許せない的な冒険好きの要望です。テスト環境はこれくらいアグレッシブな方がいいのかな?本番環境にこれを設定するのは怖いですね、石橋を叩いてからにしたいところです。

上記、(4)で登録するコマンドを以下に切り替えるだけ、簡単!

20 18 * * * apt update && apt -y dist-upgrade && apt -y autoremove

■[とにかく全て最新になるように]自動化

お気持ちはよーくわかります。よーく分かります。細かいこたーいーんだよとにかく安全で最新の奴にしろってやつですね。

手法は簡単!

「[security update+パッケージのパッチ+カーネル更新]自動化」とおんなじ!リスクも前述の通りですので、倒れる時は前方向にお願いします!!

注意点

時々、再起動が推奨されるセキュリティパッチが降ってくるので、月一くらいで手動sshして様子を見てあげてください。

まとめ

「めんどくさい事」をサボるために「めんどくさくない手法」を構築して「かしこく手を抜く」のがエンジニアの醍醐味です。どんどん自動化&最適化して行きましょう!

ではでわ!

この記事が気に入ったらサポートをしてみませんか?