忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【CentOS6】サーバをセキュアにするために〜その1〜

ブートローダの設定

更新中。。。

システムの自動更新

自動的にソフトウェアを更新してくれるyum-cronを入れておくとよい

yum-cronのインストール

$ yum install -y yum-cron
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package yum-cron.noarch 0:3.2.29-69.el6.centos will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ      アーキテクチャ
                               バージョン                     リポジトリー
                                                                           容量
================================================================================
インストールしています:
 yum-cron        noarch        3.2.29-69.el6.centos           base         44 k

トランザクションの要約
================================================================================
インストール         1 パッケージ

総ダウンロード容量: 44 k
インストール済み容量: 28 k
パッケージをダウンロードしています:
yum-cron-3.2.29-69.el6.centos.noarch.rpm                 |  44 kB     00:00     
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : yum-cron-3.2.29-69.el6.centos.noarch            1/1 
  Verifying               : yum-cron-3.2.29-69.el6.centos.noarch            1/1 

インストール:
  yum-cron.noarch 0:3.2.29-69.el6.centos                                        

完了しました!
$

yum-cronの設定

yum-cronの設定は以下ファイルに定義されている

/etc/sysconfig/yum-cron

# if MAILTO is set and the mail command is available, the mail command 
# is used to deliver yum output

# by default MAILTO is unset, so crond mails the output by itself
# example:  MAILTO=root
MAILTO=root

今回はデフォルトからMAILTOだけ変更する

yum-cronの起動と自動起動設定

# yum-cronの起動
$ service yum-cron start
夜間 yum 更新の有効化中:                                   [  OK  ]
# 確認
$ service yum-cron status
夜間 yum 更新が有効です。
# yum-cronの自動起動
$ chkconfig yum-cron on
# 確認
$ chkconfig | grep yum-cron
yum-cron        0:off  1:off  2:on   3:on   4:on   5:on   6:off

ユーザの管理

sudo

sudoの設定はvisudoコマンド(※)にて行う

※/etc/sudoersは直接編集できない

sudoersファイルの書式

ユーザ名 ホスト名=(実行ユーザ名) [NOPASSWORD:]コマンド

例)hogeユーザにshutdownコマンドを許可する

hoge ALL=(ALL) /sbin/shutdown

例)hogeユーザに全てのコマンド許可する

hoge ALL=(ALL) ALL

パスワード管理

更新中。。。

アンチウィルスソフトの導入

今回はオープンソースclam AntiVirus(以降clamavとします)を利用します。

インストール

インストールの前提としてEPELリポジトリを追加が必要です。

mktktmr.hatenablog.jp

インストール

$ yum -y install clamd
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * rpmforge: ftp.kddilabs.jp
 * updates: ftp.riken.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package clamd.x86_64 0:0.99-3.el6 will be インストール
--> 依存性の処理をしています: clamav = 0.99-3.el6 のパッケージ: clamd-0.99-3.el6.x86_64
--> 依存性の処理をしています: libclamav.so.7(CLAMAV_PUBLIC)(64bit) のパッケージ: clamd-0.99-3.el6.x86_64
--> 依存性の処理をしています: libclamav.so.7(CLAMAV_PRIVATE)(64bit) のパッケージ: clamd-0.99-3.el6.x86_64
--> 依存性の処理をしています: libclamav.so.7()(64bit) のパッケージ: clamd-0.99-3.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package clamav.x86_64 0:0.99-3.el6 will be インストール
--> 依存性の処理をしています: clamav-db = 0.99-3.el6 のパッケージ: clamav-0.99-3.el6.x86_64
--> トランザクションの確認を実行しています。
---> Package clamav-db.x86_64 0:0.99-3.el6 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

==========================================================================================================================================================================
 パッケージ                                アーキテクチャ                         バージョン                                   リポジトリー                          容量
==========================================================================================================================================================================
インストールしています:
 clamd                                     x86_64                                 0.99-3.el6                                   epel                                 165 k
依存性関連でのインストールをします。:
 clamav                                    x86_64                                 0.99-3.el6                                   epel                                 1.4 M
 clamav-db                                 x86_64                                 0.99-3.el6                                   epel                                 102 M

トランザクションの要約
==========================================================================================================================================================================
インストール         3 パッケージ

総ダウンロード容量: 104 M
インストール済み容量: 106 M
パッケージをダウンロードしています:
(1/3): clamav-0.99-3.el6.x86_64.rpm                                                                                                                | 1.4 MB     00:01     
(2/3): clamav-db-0.99-3.el6.x86_64.rpm                                                                                                                                         | 102 MB     00:30     
(3/3): clamd-0.99-3.el6.x86_64.rpm                                                                                                                                             | 165 kB     00:00     
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                                  3.1 MB/s | 104 MB     00:33     
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : clamav-db-0.99-3.el6.x86_64                                                                                                                                           1/3 
  インストールしています  : clamav-0.99-3.el6.x86_64                                                                                                                                              2/3 
  インストールしています  : clamd-0.99-3.el6.x86_64                                                                                                                                               3/3 
  Verifying               : clamav-db-0.99-3.el6.x86_64                                                                                                                                           1/3 
  Verifying               : clamav-0.99-3.el6.x86_64                                                                                                                                              2/3 
  Verifying               : clamd-0.99-3.el6.x86_64                                                                                                                                               3/3 

インストール:
  clamd.x86_64 0:0.99-3.el6                                                                                                                                                                           

依存性関連をインストールしました:
  clamav.x86_64 0:0.99-3.el6                                                                       clamav-db.x86_64 0:0.99-3.el6                                                                      

完了しました!
# 確認
$ clamscan --version
ClamAV 0.99/21397/Mon Feb 22 06:37:19 2016

ウィルスデータベースの更新

手動で更新を行う場合は「freshclam」を叩く。

$ freshclam 
ClamAV update process started at Mon Feb 22 13:13:32 2016
main.cvd is up to date (version: 55, sigs: 2424225, f-level: 60, builder: neo)
Downloading daily-21397.cdiff [100%]
daily.cld updated (version: 21397, sigs: 1850960, f-level: 63, builder: neo)
bytecode.cvd is up to date (version: 271, sigs: 47, f-level: 63, builder: anvilleg)
Database updated (4275232 signatures) from database.clamav.net (IP: 203.178.137.175)

ただ、ウィルスデータベースの更新は、clamavをインストールした際、定期実行されるようになっているので、基本的に手動で行う必要はないです。

$ ls -ltr /etc/cron.daily/ 
#〜〜〜〜〜〜〜〜〜〜(省略)〜〜〜〜〜〜〜〜〜〜〜
-rwxr-xr-x. 1 root root  396 128 05:31 2015 freshclam

デーモンの設定

以下に設定ファイル

/etc/clamd.conf

変更箇所抜粋

# /etc/clamd.conf.defaultは変更前のclamd.conf
$ diff /etc/clamd.conf.default /etc/clamd.conf
165,166c165,168
< #ExcludePath ^/proc/
< #ExcludePath ^/sys/
---
> # 以下ディレクトリ配下のファイルにはアクセスできずエラーが大量に発生するためスキャン対象外とする
> ExcludePath ^/proc/
> ExcludePath ^/sys/
195c197,199
< User clam
---
> # 作業ユーザで実行するとパーミッション絡みで面倒なので妥協してrootで実行
> User root
290c294,296
< DetectBrokenExecutables yes
---
> # 破損ファイルの検出は誤検出が多いそうなので切っておく
> DetectBrokenExecutables no

デーモンの起動

$ service clamd start
Starting Clam AntiVirus Daemon:                            [  OK  ]
# 自動起動も有効にしておく
$ chkconfig clamd on
$ chkconfig | grep clamd
clamd           0:off  1:off  2:on   3:on   4:on   5:on   6:off

スキャン実行

感染したファイルがない場合

$ clamdscan /
/: OK

----------- SCAN SUMMARY -----------
Infected files: 0
Time: 215.179 sec (3 m 35 s)

以下サイトからテスト用擬似ウィルスファイルをダウンロードできるので、テストしてみる

$ curl -L -O http://www.eicar.org/download/eicar.com
# 確認
$ ls -l /home/hoge/eicar.com 
-rw-r--r--. 1 root root 68  222 17:25 2016 /home/hoeg/eicar.com
eicar.com

感染したファイルがある場合

$ clamdscan /
/home/hoge/eicar.com: Eicar-Test-Signature FOUND

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 12.276 sec (0 m 12 s)

なお、clamdscanは前回のスキャンから変更のあったファイルだけ差分でスキャンするため、2回目のスキャン時間は大幅に短縮される

見つかった感染ファイルを自動で削除する場合

# --removeオプションを付けると感染ファイルが見つかった際に自動的に削除してくれる
$ clamdscan --remove /
/home/hoge/eicar.com: Eicar-Test-Signature FOUND
/home/hoge/eicar.com: Removed.

----------- SCAN SUMMARY -----------
Infected files: 1
Time: 12.318 sec (0 m 12 s)
# 確認
$  ls -l /home/hoge/eicar.com 
ls: cannot access /home/hoge/eicar.com: そのようなファイルやディレクトリはありません

定期実行

ウィルススキャンを定期的に実行し、感染ファイルが見つかった場合メールを飛ばす簡単なスクリプトを作成します。

前提としてmailxでメールを飛ばせるものとします。

mailx参考:mktktmr.hatenablog.jp

ウィルススキャン実行スクリプト

clamdscan.sh

#!/bin/sh

MAILTO='hoge@sample.com'
MAIL_SUBJECT='Virus is detected'

SUMMARY=`clamdscan --stdout /`

if [ $? -eq 1 ]; then
  echo "$SUMMARY" | mail -s "$MAIL_SUBJECT" "$MAILTO"
fi

exit 0

実行権限つけて。。。

$ chmod 700 clamdscan.sh

適当な場所に移動

$ mv clamdscan.sh /root/bin/

cronで定期実行するようにする

$ crontab -e

毎週月曜日の3時に実行

0 3 * * 1 /root/bin/clamdscan.sh > /dev/null 2>&1

参考

ClamAV(Clam AntiVirus)の設定方法

Clam Antivirusに関するメモ

Stray Penguin - Linux Memo (Sudo)