capistranoデプロイ時にデプロイするファイルをウィルススキャンする
プライベートの検証環境を使って、 capistranoデプロイ時にデプロイするファイルをウィルススキャンするようにしてみました。
やっていることは、capistranoデプロイ時にclamdscanしているだけです。 上手くいってそうなので、メモとして残しておきます。
使用した環境
capistranoを実行する環境
- ubuntu 16.04
- ruby 2.3
- capistrano 3.14
デプロイ先
実行するタスクを準備
以下のタスクを準備します。
今回はウィルス検知時に即時ウィルスを削除して欲しいので、オプションは --remove
を設定しました。
※ デプロイ先でclamdscanを実行できるようにしておくこと
namespace :clamd do desc 'execute clamdscan' task :scan do on roles(:all) do execute :clamdscan, "--remove", release_path end end end
そして、deploy:publishing
の前に追加したタスクを実行するようにします。
before 'deploy:publishing', 'clamd:scan'
無事ウィルススキャンができるようになりました。
00:03 deploy:set_current_revision 01 echo "2f1f01d423a5302f423e9b5b5add61e64880b83b" > REVISION ✔ 01 root@sshd 0.049s 00:03 clamd:scan 01 clamdscan --remove /var/www/app/releases/20200521155121 01 /var/www/app/releases/20200521155121: OK 01 01 ----------- SCAN SUMMARY ----------- 01 Infected files: 0 01 Time: 0.021 sec (0 m 0 s) ✔ 01 root@sshd 0.074s 00:03 deploy:symlink:release 01 ln -s /var/www/app/releases/20200521155121 /var/www/app/releases/current ✔ 01 root@sshd 0.048s 02 mv /var/www/app/releases/current /var/www/app ✔ 02 root@sshd 0.049s
ウィルス検知時は、このようにデプロイが失敗します。
00:03 deploy:set_current_revision 01 echo "a1590ccbb73f48b484651db1e04aeec737a3d380" > REVISION ✔ 01 root@sshd 0.049s 00:03 clamd:scan 01 clamdscan --remove /var/www/app/releases/20200521160613 01 /var/www/app/releases/20200521160613/eicar: Eicar-Signature FOUND 01 /var/www/app/releases/20200521160613/eicar: Removed. 01 01 ----------- SCAN SUMMARY ----------- 01 Infected files: 1 01 Time: 0.037 sec (0 m 0 s) (Backtrace restricted to imported tasks) cap aborted! SSHKit::Runner::ExecuteError: Exception while executing as root@sshd: clamdscan exit status: 1
今回検証した環境は、dockerで動かせるようにしたので、動きを確認したい場合は以下の環境でお試しすることができます。
では