‘yum’ タグのアーカイブ

murave

Vagrant+AnsibleでCentOS7のセキュリティアップデートまで

muraveです。ここ最近の記事、

についてスクリプト化してGitHubで公開しました

jmurabe/scaleway-centos7base

クラウド(Scaleway)上で動かすのでセキュリティ確保のために yum update するべき。しかし全部アップデートすると時間がかかりすぎる。そこでセキュリティアップデート出来るようにセットアップして実行するところまで自動で、という内容です。

冪等性が確保できているとは言い難い所はありますが(/securityが存在するか?だけでsecurityリポジトリが作成されているか判断している等)、ベースとしては使えるとおもいます。


実行するとこんな感じ(一部伏せてます)。

$ git clone git@github.com:jmurabe/scaleway-centos7base.git
Cloning into 'scaleway-centos7base'...
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 15 (delta 0), reused 15 (delta 0), pack-reused 0
Receiving objects: 100% (15/15), done.

$ cd scaleway-centos7base

$ cp .env.example .env
.env の内容を修正してください。

$ vagrant up
Bringing machine 'default' up with 'scaleway' provider...
==> default: Creating a server with the following settings...
==> default: -- Commercial Type: VC1S
==> default: -- Image: 9103368e-4fab-4243-aa8d-18121796c086
==> default: -- Name: scw-******
==> default: Starting the server...
==> default: Waiting for server to become "ready"...
==> default: Waiting for SSH to become available...
==> default: Machine is booted and ready for use!
==> default: [vagrant-hostsupdater] Checking for host entries
==> default: Rsyncing folder: /Users/murave/scaleway/centos7base/ => /vagrant
==> default: Running provisioner: ansible...
default: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [Gathering Facts] *********************************************************
ok: [default]

TASK [centos7common : installs] ************************************************
changed: [default] => (item=[u'yum-utils', u'git', u'unzip', u'libselinux-python', u'libsemanage-python', u'policycoreutils-python'])

TASK [centos7secup : install on yum security update] ***************************
changed: [default] => (item=[u'yum-plugin-security', u'createrepo', u'bzip2'])

TASK [centos7secup : check /security exists] ***********************************
ok: [default]

TASK [centos7secup : make /security] *******************************************
changed: [default]

TASK [centos7secup : create repo for CEFS project] *****************************
changed: [default]

TASK [centos7secup : download vmfarms/generate_updateinfo] *********************
changed: [default]

TASK [centos7secup : download CEFS errata.latest.xml.bz2] **********************
changed: [default]

TASK [centos7secup : update CEFS project repo and yum security update] *********
changed: [default]

PLAY RECAP *********************************************************************
default : ok=9 changed=7 unreachable=0 failed=0

HostName(IP)はssh-configで確認するのが便利かと思います。

$ vagrant ssh-config
Host default
HostName ***.***.***.***
User root
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/murave/.ssh/id_rsa
IdentitiesOnly yes
LogLevel FATAL
余談centos7commonとSELinuxについてcentos7commonでSELinux制御絡みのパッケージ等を入れてるのは環境構築時に必要になるだろうという理由でなんですが、実は指定しているScalewayのイメージから起動するインスタンスではSELinuxは無効となっていたりします。

$ vagrant ssh
Last login: Tue Sep 19 08:41:21 2017 from 114.160.75.94
[root@scw-****** ~]# getenforce
Disabled
SELinux関係はVirtualBoxで試していて追加したのですが、そもそもcentos7common自体の内容が薄いのでこれをなくして、パッケージが必要なRoleすべてにinstallを書いたほうがRoleの再利用性が高まる気もしています。でも、Roleの依存性を全てなくそうとするのは逆効果ですしねぇ。

ScalewayのSecurity groupについて

このスクリプトで起動したScalewayのインスタンスでは、Default security group が設定されるかとおもいますので(ORGANIZATION DEFAULTを変更していなければ)、このフィルターを事前に調整しておくと良いかと思います。

ScalewayのSecurity groupの変更はインスタンス起動時しか反映されないようなので注意してください(稼働中インスタンスに適用するにはコントロールパネルからインスタンスを起動しなおさないとダメっぽい)

動作の詳細を確認したい時

Vagrantfileの

config.vm.provision "ansible" do |ansible|
ansible.playbook = "provisioning/playbook.yml"
#ansible.verbose = "extra"
ansible.limit = 'all'
end
でコメントアウトしている ansible.verbose = “extra” を生かして下さい。

murave

CentOS7 での yum –security update 事情

夏風邪で減った体重がすっかりもどってしまいました。muraveです。
自身への細菌の侵入は許しましたが、サーバーへの侵入は防がねばなりません(自然な導入)

そんなわけで Ansible では yum update 相当の

yum: name=* state=latest
を毎回やっていたのですが、時間がかかりすぎて辛くなってきました。そんなわけでセキュリティアップデートだけするのがいいかな、と調べ始めました。

yum-plugin-securityというパッケージを利用して

$ yum --security update
が出来ることを知りました(そもそもCentOS7ではyum-plugin-securityがyumに統合されている模様)。 やったぜ!

CentOSのリポジトリではセキュリティアップデート情報が提供されていなくて正常動作しないらしいことも知りました。 やってなかったぜ!

先人の知恵と努力を頼りましょう。

Inject a little security in to your CentOS repositories

  • CEFSのエラッタからupdateinfo.xml作るスクリプト作ったぜー、という話。

CentOS 7でyumからSecurityUpdateを行えるようにする

  • 作業内容は殆どこちらのページそのままです。ありがとうございます。

ということでまとめますと、securiy用のローカルリポジトリを作り、CEFSが提供しているSpacewalk用のエラッタからupdateinfo.xmlを作って設置、yum –security update します。

はじめましょう。CentOS7、rootでの作業とします。

必要なパッケージを導入します。

$ yum install createrepo bzip2
セキュリティアップデート用のローカルリポジトリを作ります。

$ mkdir /security
$ createrepo /security
$ cat << "EOF" >> /etc/yum.repos.d/CentOS-Base.repo
[security]
name=CentOS-$releasever - Security
baseurl=file:///security
EOF
/security に移動(以降ここで作業)、CEFSのエラッタからupdateinfo.xml作るスクリプト generate_updateinfo.py を設置します。

$ cd /security
$ curl https://raw.githubusercontent.com/vmfarms/generate_updateinfo/master/generate_updateinfo.py -O
CEFSのエラッタからupdateinfo.xmlを更新します。Ansibleスクリプト化のことを考慮し一旦 errata.latest.xml.bz2 を保存してからの処理としています。

$ curl http://cefs.steve-meier.de/errata.latest.xml.bz2 -O
$ python generate_updateinfo.py --destination=/security --release=7 <(bzip2 -dc errata.latest.xml.bz2)
$ modifyrepo /security/updateinfo-7/updateinfo.xml /security/repodata/
セキュリティアップデートが正常に動作するか、まずは check-update してみましょう。

$ yum --security check-update
読み込んだプラグイン:fastestmirror
base/7/x86_64 | 3.6 kB 00:00:00
extras/7/x86_64 | 3.4 kB 00:00:00
security | 3.3 kB 00:00:00
security/updateinfo | 48 kB 00:00:00
security/primary_db | 1.1 kB 00:00:00
updates/7/x86_64 | 3.4 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: centos.crazyfrogs.org
* extras: centos.quelquesmots.fr
* updates: mirrors.standaloneinstaller.com

<途中省略>

11 package(s) needed for security, out of 171 available

glibc.x86_64 2.17-196.el7 base
glibc-common.x86_64 2.17-196.el7 base
libtirpc.x86_64 0.2.4-0.10.el7 base
nss.x86_64 3.28.4-11.el7_4 updates
nss-sysinit.x86_64 3.28.4-11.el7_4 updates
nss-tools.x86_64 3.28.4-11.el7_4 updates
nss-util.x86_64 3.28.4-3.el7 base
policycoreutils.x86_64 2.5-17.1.el7 base
policycoreutils-python.x86_64 2.5-17.1.el7 base
python-perf.x86_64 3.10.0-693.2.2.el7 updates
rpcbind.x86_64 0.2.0-42.el7 base

やったぜ!

update で実際のセキュリティアップデートを実行します。

$ yum --security update
リポジトリ作成済なので、以降は以下のコマンドセットでセキュリティアップデートできますね。

$ cd /security
$ curl http://cefs.steve-meier.de/errata.latest.xml.bz2 -O
$ python generate_updateinfo.py --destination=/security --release=7 <(bzip2 -dc errata.latest.xml.bz2)
$ modifyrepo /security/updateinfo-7/updateinfo.xml /security/repodata/
$ yum --security update