なうびるどいんぐ

脳みそ常時-3dB

security.ubuntu.comはそのままで

      2021/04/17    HimaJyun

Ubuntuの/etc/apt/sources.listにデフォルトで入っているsecurity.ubuntu.com、セキュリティ意識の高い人ならここをむやみやたらにミラーに変えて良い物だろうか?と思った事があるはず。

これはミラーに同期の遅延や障害があってもセキュリティパッチだけは最新の物を取得できるようにするための仕組みなのだが、知らずにミラーに書き換えてしまっている人が居るみたいなので注意喚起も兼ねて記事をひとつ。

スポンサーリンク

理由

これに関してはSecurityTeam/FAQ - Ubuntu Wikiに次のように記載されている。

While packages are copied from security to updates frequently, it is recommended that systems always have the security pocket enabled, and use security.ubuntu.com for this pocket. For all other pockets feel free to use archive.ubuntu.com or an archive mirror. This combination will ensure you are able to download important updates immediately while taking advantage of the mirror network or archive.ubuntu.com for all other downloads. Ubuntu systems are configured in this manner by default.

(Google翻訳: パッケージは"セキュリティ"から"アップデート"に頻繁にコピーされますが、システムでは常に"セキュリティ"ポケットを有効にし、このポケットにはsecurity.ubuntu.comを使用することをお勧めします。他のすべてのポケットについては、archive.ubuntu.comまたはアーカイブミラーを自由に使用してください。この組み合わせにより、ミラーネットワークまたはarchive.ubuntu.comを利用して他のすべてのダウンロードを行いながら、重要な更新をすぐにダウンロードできるようになります。Ubuntuシステムは、デフォルトでこのように構成されています。)

出典: SecurityTeam/FAQ - Ubuntu Wiki

「ポケット」というのは、sources.listで設定する時に書く<リリース名>-<ポケット>の部分。たとえばUbuntu 20.04ならfocal-updatesなどの事(だと思う)

要するに、新しいパッケージは頻繁に<リリース名>-updatesにコピーされるけど、<リリース名>-securityを有効にしたうえで、このポケットにはsecurity.ubuntu.comを使った方が良いよ、という趣旨

これはミラーに同期の遅延や障害があっても、セキュリティアップデートだけは常に最新の物をダウンロードできるようにする(なおかつ、普段は極力ミラーからのダウンロードだけで済ます)ための方法。

こんなsedはNG

ググると出てくるこういう感じのsedをしてはいけない。

sed -i.bak 's@http://.*/@<ミラー>@g' /etc/apt/sources.list

これに限らずsecurity.ubuntu.comまで巻き込むタイプのsedはしない方が良い。(余談だが、上記の例だと関係のない外部のリポジトリやコメント内のURLまで巻き込んで書き換えてしまう)

普段はミラーへの同期が行われているためほとんど問題ないだろうけど、同期が遅れている時に緊急度の高いセキュリティアップデートが来る可能性も十分に考えられる。

読者の方々を不必要に脅しておくと、次のような"最悪パターン"が考えらえれる。

  • 緊急度の高いのアップデートが来たときに、管理者が慌ててapt full-upgradeをするも同期遅延により更新が配布されず、(その事に気付いていない管理者は更新が出来たと思い込み満足するため)脆弱性が放置
  • Unattended-Upgradesの直前に脆弱性対策用の更新パッケージが配布されるも、同期遅延により更新されず脆弱性が放置

これは脅すために考えたシチュエーションだが、可能性としてはゼロではない。(自分自身、jp.archive.ubuntu.comがダウンしている状況に出くわしたことがあるので)

とにかく、security.ubuntu.comはミラーにしない方がお作法としては正しいという事を覚えておこう。

通常はarchive.ubuntu.comjp.archive.ubuntu.comを使うのがデフォルト設定なのでそれをターゲットにするだけで良い。

sudo sed -i.bak -r 's@http://(jp.)?archive.ubuntu.com/ubuntu/@http://jp.archive.ubuntu.com/ubuntu/@g' /etc/apt/sources.list

http://jp.archive.ubuntu.com/ubuntu/の部分はお好きなミラーを指定しよう。

必要以上に範囲の広い正規表現には注意しよう。

おまけ

読まなくても死にません

短くて安全なsed?

さっき掲載したこの正規表現

sudo sed -i.bak -r 's@http://(jp.)?archive.ubuntu.com/ubuntu/@http://jp.archive.ubuntu.com/ubuntu/@g' /etc/apt/sources.list

正しさだけで言うなら実はこう記載しなければならない

s@http://(jp\.)?archive\.ubuntu\.com/ubuntu/@http://jp.archive.ubuntu.com/ubuntu/@g

更に言えばすでに設定されているミラーが日本だとは限らないのでこうする方が良いかもしれない。

s@http://([a-z]{2}\.)?archive\.ubuntu\.com/ubuntu/@http://jp.archive.ubuntu.com/ubuntu/@g

などと言っているとキリがない。設定変更で1度実行するだけなのでここまでするのは無駄っぽい。

妥協していく方向でもいくつかある。たとえばarchive.ubuntu.comjp.archive.ubuntu.comにしたいだけなら次のようにしたのでいい。

s@archive.ubuntu.com@jp.archive.ubuntu.com@g

ただしこれは二回連続で実行するとjp.jp.archive.ubuntu.comになってしまう。次のようにすれば良いが意図が分かりづらい。

s@/archive.ubuntu.com@/jp.archive.ubuntu.com@g

ちなみに次のようにするのはNG。

s@archive.ubuntu.com@mirror.example.com@g

なぜかと言うと、ミラーサーバーによってパス部は違うので、外部のミラーを使いたい時はパス部もしっかり指定する必要がある。

……などなどを考えると最初のパターンになる。

s@http://(jp.)?archive.ubuntu.com/ubuntu/@http://jp.archive.ubuntu.com/ubuntu/@g

もしくはmirrors.txtを使う

s@http://(jp.)?archive.ubuntu.com/ubuntu/@mirror://mirrors.ubuntu.com/mirrors.txt@g

この例は最速の設定という趣旨で掲載されていることが多いが、遅いサーバーを引く事もあるため必ずしも速いとは限らない模様。(それに、Dockerのようなca-certificatesがない環境でhttpsのミラーを引くと警告が出る)

jp.archive.ubuntu.comの実体

digすれば一瞬で分かるが、jp.archive.ubuntu.comの実体はubuntutym.u-toyama.ac.jp(2021/04/16現在)

~$ dig jp.archive.ubuntu.com
;; QUESTION SECTION:
;jp.archive.ubuntu.com.         IN      A

;; ANSWER SECTION:
jp.archive.ubuntu.com.  110     IN      CNAME   ubuntutym.u-toyama.ac.jp.
ubuntutym.u-toyama.ac.jp. 48533 IN      CNAME   ubuntutym3.u-toyama.ac.jp.
ubuntutym3.u-toyama.ac.jp. 48742 IN     A       160.26.2.187

なのでjp.archive.ubuntu.comを富山大学に指定し直すという事をしている人はその作業無駄なのでやらなくて良いです。

ちなみにjp.archive.ubuntu.comはIPv6に対応していない。

security.ubuntu.comの実体

security.ubuntu.comの実体はほぼarchive.ubuntu.comだが、回線が追加されている。

こちらはarchive.ubuntu.com

~$ dig archive.ubuntu.com
;; QUESTION SECTION:
;archive.ubuntu.com.            IN      A

;; ANSWER SECTION:
archive.ubuntu.com.     60      IN      A       91.189.88.142
archive.ubuntu.com.     60      IN      A       91.189.88.152

こちらがsecurity.ubuntu.com

~$ dig security.ubuntu.com
;; QUESTION SECTION:
;security.ubuntu.com.           IN      A

;; ANSWER SECTION:
security.ubuntu.com.    60       IN      A       91.189.88.152
security.ubuntu.com.    60       IN      A       91.189.88.142
security.ubuntu.com.    60       IN      A       91.189.91.39
security.ubuntu.com.    60       IN      A       91.189.91.38

security.ubuntu.comには、archive.ubuntu.comにはなかった91.189.91.3891.189.91.39が追加されている。

どちらも短めのTTL(60秒)でAレコードの回答を順繰りに切り替えるという典型的なDNSラウンドロビンの手法で回線を分散させている模様。

IPv6も同じようになっている。

こちらがarchive

~$ dig archive.ubuntu.com AAAA
;; QUESTION SECTION:
;archive.ubuntu.com.            IN      AAAA

;; ANSWER SECTION:
archive.ubuntu.com.     60      IN      AAAA    2001:67c:1360:8001::23
archive.ubuntu.com.     60      IN      AAAA    2001:67c:1360:8001::24

こっちはsecurity

~$ dig security.ubuntu.com AAAA
;; QUESTION SECTION:
;security.ubuntu.com.           IN      AAAA

;; ANSWER SECTION:
security.ubuntu.com.    60      IN      AAAA    2001:67c:1360:8001::23
security.ubuntu.com.    60      IN      AAAA    2001:67c:1360:8001::24
security.ubuntu.com.    60      IN      AAAA    2001:67c:1562::15
security.ubuntu.com.    60      IN      AAAA    2001:67c:1562::18

回線こそ追加されているものの、archivesecurityも同じ回線を引く可能性があることからどちらも配信されているコンテンツは同じだと思われる。

だったら全てarchive.ubuntu.comで良いのでは?という疑問も浮かんでくるが、これはおそらくネット上に掲載されているミラー設定の例がarchive.ubuntu.comを書き換えるようになっているため、それらの記事に記載されている内容をコピペで実行しても大丈夫なようにドメインを分けたのではないかと予想している。(根拠なし)

だからこそ、雑なsedでsecurity.ubuntu.comも巻き込んで書き換えてしまうのはお行儀が悪い。

 - サーバー