tech.farend

技術メモ置き場

clamscanとclamdscanの使用方法

参考:公式ドキュメント

clamscan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(0) 特定のファイルをスキャン:

       clamscan [ファイルパス]

(1) カレントディレクトリをスキャン:

       clamscan

(2) 特定のディレクトリを再帰的にスキャン:

       clamscan -r [ディレクトリパス]

(3) 特定のファイルからデータベースを読み込んでスキャン:

       clamscan -d /tmp/newclamdb -r /tmp

(4) パイプを利用してファイル内をスキャン:

       cat testfile | clamscan -
       
(5) homeディレクトリを再起的にスキャンし、感染しているファイルのみ出力し、指定ディレクトリに隔離:

       clamscan -i -r /home --move=[ディレクトリパス]
       
(6) ログファイルを指定して、/sysを除外してフルスキャン、冗長なメッセージを出力させない:

       clamscan -r / -l /var/log/clamscan.log --exclude-dir=/sys/ -i --quiet

clamdscan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(0) 特定のファイルをスキャン:

       clamdscan [ファイルパス]

(1) カレントディレクトリをスキャン:

       clamdscan

(2) 特定のディレクトリ内をスキャン:

       clamdscan [ディレクトリパス]

(3)他のユーザが実行しているclamdデーモンでスキャン :

       clamdscan --fdpass [ディレクトリパス]

(4) 標準入力からスキャン:

       clamdscan - <  [パス]

       cat [パス] | clamdscan -

clamdscanで再起的なスキャンを実行する

1
sudo ls -R [ディレクトリパス] | grep / | tr -d : | xargs clamdscan

Clam Antivirusの導入方法

インストール

1
sudo apt-get install clamav clamav-daemon

初期設定

ログファイルの設定

1
2
3
sudo touch /var/log/clamav/freshscan.log /var/log/clamav/clamscan.log /var/log/clamav/clamdscan.log
sudo chmod 600 -R /var/log/clamav/
sudo chown -R clamav /var/log/clamav/

ウイルス定義データベースの更新

1
sudo freshclam

使用例

ClamAVにはウイルススキャンを行う clamscan と、 デーモンとして常駐させておきウイルススキャンする clamdscan があります。 clamscan では実行の度に定義データベースの読み込みを行いますが、 clamdscan ではデーモンの起動時にのみ定義データベースの読み込みを行います。

ClamAVにはローカルでウイルススキャンを行うclamscanと、 デーモンとして常駐させておき特定のIPを持つ端末をウイルススキャンするclamdscanがあります。

clamscanによるフルスキャンの実行

1
sudo clamscan -r / -l /var/log/clamscan.log --exclude-dir=/sys/ -i --quiet

clamdscanによるスキャンの実行

1
2
sudo clamd  //デーモンの起動
sudo clamdscan / -l /var/log/clamdscan.log -i --quiet

clamdscan実行時に権限エラーが出る場合

/etc/clamav/clamd.conf の User clamav を User root 等に書き換えてください。

clamscanで定期的にスキャンさせる

freshclam を毎日実行するようデーモンとして常駐させます。

1
freshclam -d

clamscan.sh を作成します。

1
2
#!/bin/sh
clamscan -r / -l /var/log/clamav/clamscan.log --exclude-dir=/sys/ -i --quiet

作成したスクリプトを配置します。

1
2
chmod +x clamscan.sh
mv clamscan.sh /etc/cron.daily/

Alluraのインストール手順

SubversionやGitなどのリポジトリをブラウザ上で一元管理する「Allura」のインストール手順です。

環境設定

Alluraの構築に必要なパッケージをインストールします。

1
sudo apt-get install git-core default-jre-headless python-dev libssl-dev libldap2-dev libsasl2-dev libjpeg8-dev zlib1g-dev subversion python-svn

MongoDBインストール

MongoDBのインストール手順です。

1
2
3
4
5
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo service mongod start

Pythonインストール

pipをインストールし、さらに必要なパッケージをインストールします。

1
2
3
4
sudo apt-get -y install python-pip
sudo pip install virtualenv
virtualenv env-allura
. env-allura/bin/activate

Allura環境準備

Alluraのログを格納する環境準備です。

1
2
sudo mkdir -p /var/log/allura
sudo chown $(whoami) /var/log/allura

Alluraインストール

Allura本体をgitからクローニングし、必要なパッケージをインストールします。

1
2
3
4
5
6
mkdir src
cd src
git clone https://git-wip-us.apache.org/repos/asf/allura.git allura
cd allura
pip install -r requirements.txt
ln -s /usr/lib/python2.7/dist-packages/pysvn ~/env-allura/lib/python2.7/site-packages/

全部インストール

プラグインツールを全てインストールします。

1
./rebuild-all.bash # ALL build

部分インストール

必要なプラグインのみインストールします。 src/allura以下ににツールのディレクトリがあります。以下の2つは必須ツールです。

1
2
3
4
cd Allura
python setup.py develop
cd ../ForgeWiki
python setup.py develop

同様に

1
2
cd ツール名
python setup.py develop

で追加ツールをインストールできます。

Solrインストール

Apache Solrのインストールを行います。

1
2
3
4
5
6
cd ~/src
wget http://archive.apache.org/dist/lucene/solr/4.2.1/solr-4.2.1.tgz
tar xf solr-4.2.1.tgz && rm -f solr-4.2.1.tgz
cp -f allura/solr_config/schema.xml solr-4.2.1/example/solr/collection1/conf
cd solr-4.2.1/example/
nohup java -jar start.jar > /var/log/allura/solr.log &

リポジトリ領域作成

各種リポジトリを保存する領域を作成します。

1
2
3
sudo mkdir /srv/{git,svn,hg}
sudo chown $USER /srv/{git,svn,hg}
sudo chmod 775 /srv/{git,svn,hg}

Allura起動

Alluraを起動します。

1
2
3
4
cd ~/src/allura/Allura
nohup paster taskd development.ini > /var/log/allura/taskd.log 2>&1 &
ALLURA_TEST_DATA=False paster setup-app development.ini
nohup paster serve --reload development.ini > /var/log/allura/allura.log 2>&1 &

自動起動設定

/etc/init.dにalluraの起動スクリプトを配置し、serviceコマンドで扱えるようにします。

事前準備

1
sudo apt-get -y install sysv-rc-conf

起動スクリプト

ALLURADIRと SOLRDIRは適宜変更してください。 以下は”user_allura”というユーザーのホームディレクトリにAlluraがインストールされている場合です。

1
sudo vim /etc/init.d/allura
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash
ALLURADIR=/home/user_allura/src/allura/Allura
SOLRDIR=/home/user_allura/src/solr/example

start(){
echo "Starting Allura"
. /home/user_allura/env-allura/bin/activate
cd $SOLRDIR
nohup java -jar start.jar > /var/log/allura/solr.log &
cd $ALLURADIR
nohup paster taskd development.ini > /var/log/allura/taskd.log 2>&1 &
nohup paster serve --reload development.ini > /var/log/allura/allura.log 2>&1 &
if [ $? -eq 0 ]; then
        echo "OK. Allura is running."
        return 0
else
        echo "Some ERROR occurred."
        return 1
fi
}
stop(){
echo "Stopping Allura"
pkill -f "paster serve --reload development.ini"
if [ $? -eq 0 ]; then
        echo "OK. Allura is stopped"
        return 0
else
        echo "Some ERROR occurred."
        return 1
fi
}
case "$1" in
        start)   start ;;
        stop)    stop ;;
        restart) echo "Restarting Allura"
                 stop
                 start ;;
esac

このスクリプトを作成した後、以下を実行するとsudo service allura startで起動できるようになります。

1
sudo sysv-rc-conf allura on

以上です。

Windows Server 2012 on AWS の日本語化

  1. デスクトップ から コントロールパネル を選択
  2. Clock, Language, and Region を選択
  3. Change your language preferences で Add language を選択
  4. Add a language で J 日本語(Japanese) をクリックし Add
  5. 戻った Change your language preferences で 日本語 の Option をクリック
  6. Download and install language pack をクリック
  7. 放置
  8. インストール完了したら、 Advanced settings をクリック
  9. Override for Windows display language で 日本語 を選択し save
  10. ログオフし、改めてログインする
  11. 同じように コントロールパネル から 時計、言語、および地域 を選択
  12. 地域-場所 の変更から 日本 を選択
  13. 同じようにして タイムゾーン を変更

おわり

CachetHQ日本語化手順

言語ファイルのコピー

gitからクローニングしたcachet-masterのapp/lang内に日本語フォルダを新規作成し、他国語の言語ファイルをコピーします。 (ここではフォルダ”ja”を作成し、英語ファイルをコピーしています。)

1
cp -r app/lang/en app/lang/ja

日本語の追加

app/config/langs.phpに以下を追加

1
'ja' => 'Japanese',

コピーしたファイルの編集

コピーしたファイル内のキーに対する値を全て日本語化します。app/lang/ja内の各ファイルで以下の文を定義しています。

cachet.php:主にステータスページ(トップページ)で表示される文を定義しています。

dashboard.php:主にダッシュボード(設定画面)で表示される文を定義しています。

errors.php:HTTPのステータスが404や401のときに表示される文を定義しています。

forms.php:主にダッッシュボード内各ページの項目を入力する際に表示される文を定義しています。

pagination.php:ステータスページにて、より前(後)のページを見たいときにクリックする「前(次)の週」という語句を変更できます。

reminder.php:主にパスワードを再設定する際に表示される文を定義しています。

setup.php:主にインストール後初めてCachetHQのページにアクセスした際に表示される文を定義しています。

validation.php:入力した項目が誤っている旨の文を定義しています。

また、具体的な編集方法について例えばapp/lang/ja/cachet.phpの7行目では

1
1 => 'Operational',

Operationalの部分を

1
1 => '異常なし',

のように編集すると、

component_En

赤枠で囲まれた文字が

component_Ja

日本語化されます。

RedmineをSELinux(enforcing)下で使う方法

Redmine.jpの最新版インストールガイド と併読してください。

インストール

“SELinuxを無効にする”の項は無視し、SELinuxをPermissiveモード(監視はするがアクセス制御はしない)にします。

1
setenforce 0

以降、最新版インストールガイド に従い、Redmineを構築します。

SELinuxの有効化と権限の付与

Redmineを構築し終えたら、以下のコマンドを実行します。

1
2
chcon -R -t httpd_sys_content_t /var/lib/redmine/
setsebool -P httpd_unified on

Redmineのルートフォルダに対して「httpd_tというラベル付けがされたファイルから読み出される権限」を適用し、httpdによるファイルへの書き込み許可を設定しています。

最後に、SELinuxをEnforcingモードに戻します。

1
setenforce 1

以上です。

GitLabへのHTTPアクセスを特定IPアドレスからのみに限定する

Omnibus packageを使ってインストールしたGitLabへのHTTPアクセスを特定のIPアドレスのみ許可するための設定です。

GitLab Omnibus packageを使用している場合、webサーバ(Nginx)の設定ファイルは以下の二つです。

  • /var/opt/gitlab/nginx/conf/nginx.conf
  • /var/opt/gitlab/nginx/conf/gitlab-http.conf

これらのファイルは gitlab-ctl reconfigure を実行することで /etc/gitlab/gitlab.rb を元に自動生成されるので、直接編集して設定を追加することはできません(そのうち上書きされてしまいます)。

Nginxに設定を追加するには、gitlab.rb内の設定 custom_gitlab_server_config を使用します。

custom_gitlab_server_config の有効化

/etc/gitlab/gitlab.conf に以下の記述を追加してください。

1
nginx['custom_gitlab_server_config'] = "include /etc/gitlab/custom_gitlab_server.conf

custom_gitlab_server_config に書かれたものはNginxの設定ファイル /var/opt/gitlab/nginx/conf/gitlab-http.conf の server ブロックの末尾に挿入されます。上記の記述により、ファイル /etc/gitlab/custom_gitlab_server.conf を読み込むための設定がNginxに追加されます。

/etc/gitlab/custom_gitlab_server.conf の記述

custom_gitlab_server.conf にはNginxの設定ファイルが自由に書けます。HTTPアクセスを特定のIPアドレスに限定するには以下のように記述します。

1
2
3
4
allow 192.0.2.0/24;
allow 198.51.100.21;
allow 198.51.100.22;
deny all;

設定の反映

gitlab.rb からNginxの設定ファイルを生成:

1
sudo gitlab-ctl reconfigure

GitLabの再起動:

1
sudo gitlab-ctl restart

ApacheでgitリポジトリをHTTPで公開するための設定

gitリポジトリをHTTP経由でcloneやpushできるよう設定する手順です。Ubuntu 14.04上でApacheを使って次のような環境を作ることをを想定しています。

  • リポジトリの名前は project.git
  • サーバ上のリポジトリのパスは /var/lib/git/project.git
  • リポジトリのURLは http://HOSTNAME/git/project.git
  • Basic認証を行う
  • 認証用パスワードファイルは /etc/apache2/htpasswd

ソフトウェアのインストール

Apacheのインストール

Basic認証用パスワードファイルの生成に使う htpasswd を使用するために apache2-utils パッケージのインストールと、 git-http-backend を動作させるために必要な mod_cgi の有効化も行います。

1
2
3
sudo apt-get install apache2
sudo apt-get install apache2-utils
sudo a2enmod cgi

gitのインストール

1
sudo apt-get install git

公開用リポジトリの作成

1
2
3
4
sudo mkdir -p /var/lib/git/project.git
cd /var/lib/git/project.git
sudo git init --bare --shared
sudo chown -R www-data:www-data /var/lib/git

認証用パスワードファイルの作成

1
sudo htpasswd -c /etc/apache2/htpasswd maeda

Apacheの設定

以下の設定を /etc/apache2/httpd.conf に追記するなどします。

1
2
3
4
5
6
7
8
9
10
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL

<LocationMatch "^/git">
    AuthType Basic
    AuthName "git repository"
    Require valid-user
    AuthUserFile /etc/apache2/htpasswd
</LocationMatch>

Apache再起動

1
sudo service apache2 restart

cloneできることを確認

1
2
cd ~
git clone http://localhost/git/project.git

関連情報

AWS AMIの公開(Amazon Linux)

AMI(Amazon Machine Image)の元になるインスタンスを構築

普通にインスタンスを作成しアプリケーションほか構築

サービス停止

自動起動の設定等はそのまま、起動しているデーモン等(特にログを出力するもの)の停止をおこなう。

サンプル

1
2
[ec2-user@xxx ]$ sudo service mysqld stop
[ec2-user@xxx ]$ sudo service postfix stop

重要情報削除

削除対象

  • ログ
  • 操作履歴
  • 個人操作履歴

ec2-user履歴削除

1
2
3
[ec2-user@xxx ]$ export HISTSIZE=0
[ec2-user@xxx ]$ history -c
[ec2-user@xxx ]$ sudo su -

削除用スクリプト作成

下記内容の delete.sh ファイルを /root に作成する。
下記シェルスクリプトでは、 root および ec2-user でのMySQLに関するログも削除している。 またログファイルに関してはhttpdのログなど、公開したくないログがあればサンプルを参考に内容を消去するスクリプトを追記すること。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/sh

service rsyslog stop
cp /dev/null /root/.ssh/authorized_keys
cp /dev/null /root/.bash_history
cp /dev/null /root/.mysql_history
cp /dev/null /home/ec2-user/.ssh/authorized_keys
cp /dev/null /home/ec2-user/.bash_history
cp /dev/null /home/ec2-user/.mysql_history
cp /dev/null /var/log/boot.log
cp /dev/null /var/log/btmp
cp /dev/null /var/log/cron
cp /dev/null /var/log/dmesg
cp /dev/null /var/log/dmesg.old
cp /dev/null /var/log/lastlog
cp /dev/null /var/log/maillog
cp /dev/null /var/log/messages
cp /dev/null /var/log/secure
cp /dev/null /var/log/spooler
cp /dev/null /var/log/tallylog
cp /dev/null /var/log/wtmp
cp /dev/null /var/log/yum.log
cp /dev/null /var/log/audit/audit.log
cp /dev/null /var/log/cloud-init.log
cp /dev/null /var/log/cloud-init-output.log
cp /dev/null /var/log/dracut.log
cp /dev/null /var/log/mail/statistics

処理実行

1
[root@xxx ]# sh delete.sh

delete.shを削除する。

1
[root@xxx ]# rm delete.sh

rootの履歴を削除する。

1
2
[root@xxx ]# export HISTSIZE=0
[root@xxx ]# history -c

AMIを作成する。

AWS管理コンソールで、対象のインスタンスを指定し、 [Actions] をクリックして [Image] を選択し、[Create Image] でしばらくすると、My AMIsに追加される。
Discription や Name は、作成時のみ指定可能であとから変更することができないので、あらかじめ記入内容を決めておき、コピペでしていする用が良い。
作成元のインスタンスはログイン用公開鍵を削除しているので、もうログインできない。
インスタンスは使えないので、 STOPもしくはTerminate する。

AMIの公開

Imageを作成した段階では、 Private 状態なので、 Public に変更するとAMIが公開される。
AMIは各リージョン毎に別々の扱いなので、他のリージョンでも公開したいときは、別リージョンへコピーする。各リージョンにあるAMIは、それぞれ個別の扱い(IDも別)なのでそれぞれで公開設定を行う。 AMIの内容を更新し作り直した際も、それぞれ個別に扱う必要がある。

CachetHQインストール手順

本手順で作成される環境

本手順で作成される環境は以下のとおりです。

CachetHQ CachetHQ 1.0.0
OS Ubuntu 14.04
データベース MySQL 14.14
webサーバ Nginx 1.4.6
PHP 5.6.4-1

Ubuntuの設定

SSLで通信を行うため443番のポートを開けておきます。

1
2
sudo ufw enable
sudo ufw allow 443/tcp

リポジトリやパッケージを最新の状態にしておきます。

/etc/apt/sources.listに以下を追加

1
2
deb http://packages.dotdeb.org wheezy all
deb http://packages.dotdeb.org wheezy-php56 all

以下のコマンドでgpg鍵をダウンロード・リポジトリの追加を行います。

1
2
3
sudo apt-get -y install wget
wget -qO - http://www.dotdeb.org/dotdeb.gpg | sudo apt-key add -
sudo apt-get update && sudo apt-get upgrade

必要なパッケージのインストール

CachetHQを導入するにあたり、必要なパッケージのインストールを行います。

1
sudo apt-get install -y python-software-properties git curl openssl build-essential nginx mysql-server

MySQLの設定

デフォルトキャラクタセットをutf8に設定

エディタで /etc/mysql/my.cnf を開き、

[mysqld] セクションに

1
character-set-server=utf8

[mysql] セクションに

1
default-character-set=utf8

を追加してください。

MySQLの初期設定

1
sudo mysql_secure_installation

CachetHQ用のデータベース、ユーザーの作成

1
2
3
4
5
mysql -p -uroot
create database db_cachet default character set utf8;
grant all privileges on db_cachet.* to 'user_cachet'@'localhost' identified by 'password';
flush privileges;
exit;

PHPの設定

phpモジュールのインストール

1
sudo apt-get -y install php5-fpm php5-cli php5-mcrypt php5-apcu php5-mysql

composerを配置

1
2
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

bower、gulpを使用するためにnodejsをインストール

1
2
3
4
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
sudo npm install -g bower
sudo npm install -g gulp

CachetHQの設定

gitからリポジトリをクローン

1
2
3
mkdir -p ~/cachet.example.com
git clone -b master https://github.com/cachethq/Cachet.git ~/cachet.example.com
cd cachet.example.com

※cachet.example.com:サイト名

エディタで.env.phpを作成

1
2
3
4
5
6
7
8
9
<?php

return [
  'DB_DRIVER'   => 'mysql',
  'DB_HOST'     => 'localhost',
  'DB_DATABASE' => 'db_cachet',
  'DB_USERNAME' => 'user_cachet',
  'DB_PASSWORD'  => 'password',
];

※db_cachet,user_cachet,passwordの部分はデータベースの設定に合わせ適宜変更してください。

db_cachetに必要なテーブルを登録

1
2
3
export ENV=production
composer install --no-dev -o
php artisan migrate

CachetHQを動かすにあたり必要なものを自動収集

1
2
3
sudo npm isntall
bower install 
sudo gulp

エディタで/etc/php5/fpm/pool.d/cachet.confを作成

1
2
3
4
5
6
7
8
9
10
11
12
[ユーザー名]
user = ユーザー名  
group = ユーザー名  
listen = /var/run/php5-fpm-ユーザー名.sock  
listen.owner = ユーザー名
listen.group = ユーザー名  
listen.mode = 0666  
pm = ondemand  
pm.max_children = 5  
pm.process_idle_timeout = 10s;  
pm.max_requests = 200  
chdir = /  

※ユーザー名の部分は適宜置き換えてください

php5-fpmの再起動

1
sudo service php5-fpm restart

SSLの自己証明書を発行

1
2
3
4
5
6
7
sudo mkdir -p /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl genrsa -des3 -passout pass:x -out cachet.pass.key 2048
sudo openssl rsa -passin pass:x -in cachet.pass.key -out cachet.key
sudo rm cachet.pass.key
sudo openssl req -new -key cachet.key -out cachet.csr
sudo openssl x509 -req -days 365 -in cachet.csr -signkey cachet.key -out cachet.crt

エディタで/etc/nginx/sites-available/cachet.confを以下の内容で作成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
server {
    listen      443 default;
    server_name cachet.example.com;

    ssl on;
    ssl_certificate     /etc/nginx/ssl/cachet.crt;
    ssl_certificate_key /etc/nginx/ssl/cachet.key;
    ssl_session_timeout 5m;

    ssl_ciphers               'AES128+EECDH:AES128+EDH:!aNULL';
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    root /home/ユーザー名/cachet.example.com/public;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    access_log  /var/log/nginx/cachet.access.log;
    error_log   /var/log/nginx/cachet.error.log;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm-ユーザー名.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_param ENV "production";
    }

    location ~ /\.ht {
        deny all;
    }
}

server {
    listen      80;
    server_name cachet.example.com;

    add_header Strict-Transport-Security max-age=2592000;
    rewrite ^ https://$server_name$request_uri? permanent;
}

シンボリックリンクを張り、Nginxを再起動

1
2
sudo a2ensite cachet.conf
sudo service nginx restart