Help us understand the problem. What is going on with this article?

Ubuntu 16.04でVuls/VulsRepoを稼働させた話

More than 3 years have passed since last update.

この記事は、Vuls Advent Calendar 2016の15日目になります。

概要

前回の記事 で、Ubuntu16.10を導入するのが難しいことが分かった。

そのため、一般的に利用されている Ubuntu 16.04LTSでのセットアップを行い、例示することにした。

方針

Vuls Advent Calender 2016の 7日目に書いた標準化した、Vuls/VulsRepoの導入のシナリオをベースとして、Ubuntu16.04にVulsを仕込みます。

  • Vuls, VulsRepoの推奨するREADME.md構成とは、一部異なります。
    • HTTPDの動作権限は、vulsではなくて、別の物にしています。
    • それに合わせ、vulsのホームディレクトリアクセス権を比較的強固にしています。

Vulsスキャンサーバ構築上での、CentOSとの違い

CentOS上でVulsを導入することは多いのですが、今回初めてUbuntuにVulsサーバを入れました。(スキャン対象には何度かしたことがあります。)
以下の点が引っかかりやすいな、と思いました。

  • useraddでログインシェルを 明示的に 指定しないと、Nullになるようだ。
    • スキャン対象側のvulsユーザでは、ログインシェルがbashである必要があります。
  • Ubuntuで、HTTPDをapache2にした場合、www-dataユーザ/グループがapache2を駆動します
    • apache:apacheかwww-data:www-dataか、の違いだけですが。
  • VulsRepoで必要になるPerlモジュールのパッケージ名が、CentOSと異なります。
    • README.md通り進めれば大丈夫

構築例

初回パッケージ導入と、アップデート

アップデート時にCDを要求されたので、取りあえずマウントしています。
そのままapt-get upgrade出来る場合は、不要です。

install_and_upgrade_package
[default:~]$ sudo su -
[default:~]$ sudo vi /etc/apt/sources.list
=============
# dev cdrom行の先頭に"#"を付けて、コメントアウト。
#deb cdrom:[Ubuntu-Server 16.04.1 LTS _Xenial Xerus_ - Release amd64 (20160719)]/ xenial main restricted
=============
[default:~]$ sudo apt-get install openssh-server sqlite gcc make
[default:~]$ sudo apt-get upgrade

vulsユーザの作成

ユーザ作成

useraddで作成する場合、-sでログインシェルを bash とする必要があります。

  • ログインシェルがbashではない場合は、vulsでのscan等が出来ないようです。
add_vuls_user
[default:~]$ sudo useradd -d /opt/vuls vuls -s /bin/bash
[default:~]$ sudo visudo
--------------------------
vuls ALL=(root) NOPASSWD: /usr/bin/apt-get, /usr/bin/apt-cache
--------------------------
[default:~]$ sudo mkdir /opt/vuls
[default:~]$ sudo chmod 700 /opt/vuls
[default:~]$ sudo chown vuls:vuls /opt/vuls

vulsユーザの鍵を作る

今回は、id_rsaではなく、もっと強度の強い 楕円曲線DSA(ECDSA)の鍵を作ります。

  • ECDSAの場合、鍵のビット長は 256, 384, 521 から選択することになります。
    • "512"ではない事に注意。
create_ssh_keys
[default:~]$ sudo su - vuls
[vuls:~]$ pwd
/opt/vuls
[vuls:~]$ mkdir .ssh ssh_keys
[vuls:~]$ chmod 700 .ssh/ ssh_keys
[vuls:~]$ ssh-keygen -t ecdsa -b 521
Generating public/private ecdsa key pair.
Enter file in which to save the key (/opt/vuls/.ssh/id_ecdsa)
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /opt/vuls/.ssh/id_ecdsa
Your public key has been saved in /opt/vuls/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxx vuls@HOSTNAME
The key’s randomart image is;
+---[ECDSA 521---+
|(randamart here)|
+----[SHA256-----+
[vuls:~]$ cat .ssh/id_ecdsa.pub >> .ssh/authorized_keys
[vuls:~]$ chmod 600 .ssh/authorized_keys
[vuls:~]$ mv .ssh/id_ecdsa ssh_keys/local_id_ecdsa
[vuls:~]$ exit

go言語の導入

いつも通り、入れます。

install_go_lang
[default:~]$ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
[default:~]$ sudo tar -C /usr/local -xzf go1.7.4.linux-amd64.tar.gz
[default:~]$ sudo vi /etc/profile.d/goenv.sh
--------------------------
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
--------------------------
[default:~]$ sudo mkdir /var/log/vuls
[default:~]$ sudo chown vuls:vuls /var/log/vuls
[default:~]$ sudo chmod 700 /var/log/vuls
[default:~]$ sudo su - vuls
[vuls:~]$ mkdir go
[vuls:~]$ go version
go version go1.7.4 linux/amd64

go-cve-dictionaryを入れる

これもいつも通り、入れます。

[vuls:~]$ mkdir -p $GOPATH/src/github.com/kotakanbe
[vuls:~]$ cd $GOPATH/src/github.com/kotakanbe
[vuls:kotakanbe]$ git clone https://github.com/kotakanbe/go-cve-dictionary.git
[vuls:kotakanbe]$ cd go-cve-dictionary
[vuls:go-cve-dictionary]$ make install
[vuls:go-cve-dictionary]$ mkdir -p $GOPATH/src/github.com/future-architect
[vuls:go-cve-dictionary]$ cd $GOPATH/src/github.com/future-architect
[vuls:future-architect]$ git clone https://github.com/future-architect/vuls.git
[vuls:future-architect]$ cd vuls
[vuls:vuls]$ make install
[vuls:vuls]$ cd
[vuls:~]$ for i in {2002..2017}; do go-cve-dictionary fetchnvd -years $i; done

vulsの設定と、自身へのスキャン

config.tomlを作成し、自分自身をスキャンします。

  • config.tomlと同じ階層で vuls scanをしましょう。
    • 若しくは、明示的にコンフィグファイルを指定しましょう。
  • prepare等でエラーになる場合は、vulsユーザのログインシェルを確認しましょう。
    • /etc/passwdで/bin/bashになっていることを確認しましょう。
    • CentOSだとuseraddでシェルを指定しなくてもbashになったけど、ubuntuではNullになるので注意。
      • その場合は $ sudo chsh vuls辺りを実行して、シェルを/bin/bashにしましょう。
vuls_config_and_scan
[vuls:~]$ vi /opt/vuls/config.toml
--------------------
[default]
port = “22”
user = “vuls”

[servers]

[servers.vuls-server]
host = "127.0.0.1"
keyPath = "opt/vuls/ssh_keys/local_id_ecdsa"
--------------------
[vuls:~]$ vuls configtest
[vuls:~]$ vuls prepare
[vuls:~]$ vuls scan -cve-dictionary-dbpath=/opt/vuls/cve.sqlite3 -report-json

VulsRepoを入れる

gitからVulsRepoを導入

install_VulsRepo
[default:~]$ sudo apt-get install apache2 libcgi-pm-perl libjson-perl
[default:~]$ cd /var/www/html
[default:html]$ sudo git clone https://github.com/usiusi360/vulsrepo.git
[default:html]$ sudo cp vulsrepo/dist/cgi/vulsrepo.conf.sample /etc/apache2/conf-available/vulsrepo.conf
[default:html]$ ln -s /etc/apache2/conf-abailable/vulsrepo.conf /etc/apache2/conf-enabled/vulsrepo.conf
[default:html]$ sudo a2enmod cgid
[default:html]$ cd vulsrepo
[default:vulsrepo]sudo ln -s /opt/vuls/results results

VulsRepoのREADME.mdではなく、標準化した、Vuls/VulsRepoの導入の方針で、apache:apacheで動かす。
その為のアクセス権設定をし、WEBサーバを稼働させます。

  • ubuntuで Apache2を選択した場合、apacheの起動ユーザは www-data:www-data になります。
    • その為、/opt/vuls/resultsへは、www-dataグループがアクセスできるようにする必要があります。
replace_acl
[default:~]$ sudo chown vuls:www-data /opt/vuls
[default:~]$ sudo chmod --recursive go= /opt/vuls
[default:~]$ sudo chmod --recursive 700 /opt/vuls/ssh_keys
[default:~]$ sudo chown --recursive vuls:www-data /opt/vuls/results/
[default:~]$ sudo chmod g+xr /opt/vuls
[default:~]$ sudo chmod --recursive g+xr /opt/vuls/results/
[default:~]$ sudo /etc/init.d/apache2 start

VulsRepoをブラウザで見る

ブラウザで http://<対象ホスト>/vulsrepo/ を開きます。
以上で、healthyな一覧が見えるはずです。

まとめ

Ubuntu16.10ではうまく動かなかったが、Ubuntu16.04LTSでは問題なく稼働させることができた。

Ubuntu16.10は癖がある?ようですね。 もうしばらくは16.04を使い続けることになるのでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away