運用環境の構築手順 - shinkasystems/kintaikanri GitHub Wiki

運用環境の構築手順

目的

  • 勤怠管理ツールの運用環境を構築する
  • 構築後の運用環境のメンテナンスを行う

担当者は事前に不明点を洗い出し、解消しておくこと。

バージョンの確認

ユーザー:root

OS のバージョンを確認する。

cat /etc/redhat-release
arch

Java のバージョンを確認する。

java -version

yum パッケージの最新化と管理設定

ユーザー:root

パッケージの最新化と、基本的なパッケージをインストールする。 yum アップデートの自動化を設定する。

yum -y update
yum -y groupinstall "Base" "Development tools" "Japanese Support"
yum -y install yum-cron
/etc/rc.d/init.d/yum-cron start
chkconfig yum-cron on
chkconfig --list yum-cron

Javaのインストール

ユーザー:root

インストール可能な Java のパッケージ名を確認する。

yum list \*java-1\* | grep open

インストールする。

  • 2015年度までは Java7

    yum -y install java-1.7.0-openjdk.x86_64
    yum -y install java-1.7.0-openjdk-devel.x86_64
    
  • 2016年度からは Java8

    yum -y install java-1.8.0-openjdk.x86_64
    yum -y install java-1.8.0-openjdk-devel.x86_64
    

バージョンを確認する。

java -version

バージョンを切り替える。

alternatives --config java

Logwatch のインストール

perl のバージョンを確認する(logwatch の実行に必要なため)。

perl --version

logwatch をインストールする。

yum -y install logwatch

設定ファイルを確認、修正する。

vi /etc/logwatch/conf/logwatch.conf
+ [email protected]

文字コードの設定

ユーザー:root

設定ファイルを開く。

vi /etc/sysconfig/i18n

UTF-8 に変更する。

-	LANG="C"
+	LANG="ja_JP.UTF-8"

TCP Wrapper の設定

ユーザー:root

設定ポリシーは以下の通り。

  • SSHD サービスへの接続を許可する
  • それ以外のサービスへの接続を拒否する
echo "sshd: ALL" >> /etc/hosts.allow
echo "ALL: ALL" >> /etc/hosts.deny

SSHの設定変更

ユーザー:root

SSH の設定ファイルを開く。

vi /etc/ssh/sshd_config

root のログインを禁止する。

-	#PermitRootLogin yes
+	PermitRootLogin no

空のパスワードを禁止する。

-	#PermitEmptyPasswords no
+	PermitEmptyPasswords no

ユーザー kintai のみログインを許可する。

+	AllowUsers kintai

SSH サービスを再起動する。

/etc/rc.d/init.d/sshd restart

ホストの変更

ユーザー:root

hosts ファイルを開く。

vi /etc/hosts
-	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
+	127.0.0.1   localhost app.shinka-ss.net localhost4 localhost4.localdomain4

network ファイルを開く。

vi /etc/sysconfig/network
-	HOSTNAME=xxxxx
+	HOSTNAME=app.shinka-ss.net

ホスト名を設定する。

hostname app.shinka-ss.net
hostname

SELinuxの無効化

ユーザー:root

SELinuxの状態を確認し、設定ファイルを開く。

getenforce
setenforce 0
getenforce
vi /etc/sysconfig/selinux

無効にする。

-	SELINUX=enforcing
+	SELINUX=disabled

バッファオーバーフローの対策

ユーザー:root

exec-shield の状態を確認し、設定ファイルを開く。

cat /proc/sys/kernel/exec-shield
echo 2 > /proc/sys/kernel/exec-shield
cat /proc/sys/kernel/exec-shield
vi /etc/sysctl.conf

有効化する。

+ kernel.exec-shield = 2

ユーザーの新規追加

ユーザー:root

ユーザー kintai を作成する。

useradd kintai
passwd kintai
chmod 701 /home/kintai

root になれるユーザーを限定する

ユーザー:root

設定ファイルを開く。

vi /etc/pam.d/su
-	#auth       required    pam_wheel.so use_uid
+	auth        required    pam_wheel.so use_uid
usermod -G wheel kintai

鍵認証の設定

ユーザー:kintai

予め作成した秘密鍵と公開鍵を SCP でサーバーへアップロードする。

  • id_rsa(パスフレーズつき秘密鍵)
  • id_rsa.pub(公開鍵)

公開鍵をサーバーへ登録する。

cd ~
mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm -f id_rsa.pub

ユーザー:root

SSH を鍵認証に設定する。

vi /etc/ssh/sshd_config
-	#PubkeyAuthentication yes
+	PubkeyAuthentication yes
-	#AuthorizedKeysFile     .ssh/authorized_keys
+	AuthorizedKeysFile     .ssh/authorized_keys
-	#PasswordAuthentication yes
+	PasswordAuthentication no
+ ChallengeResponseAuthentication no
/etc/rc.d/init.d/sshd reload

iptables の設定

ユーザー:root

設定のポリシーは以下のとおりとする。

  • 外からの通信は明示して許可していない限り全て拒否、内からの通信は全て許可
  • 確立済みの通信は許可
  • pingを許可
  • ループバックを許可
  • 特定ポートへの通信を許可
  • 80 ポートへの通信を 8080 ポートへフォワードする。

iptables ファイルを開く。

vi /etc/sysconfig/iptables

iptables の内容は以下の通り。

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [17:2552]
:SERVICES - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -j SERVICES
-A INPUT -p udp -m udp --sport 53 -j ACCEPT
-A INPUT -p udp -m udp --sport 123 --dport 123 -j ACCEPT
-A SERVICES -p tcp -m tcp --dport 22 -j ACCEPT
-A SERVICES -p tcp -m tcp --dport 80 -j ACCEPT
-A SERVICES -p tcp -m tcp --dport 8080 -j ACCEPT
COMMIT

サービスの登録

ユーザー:kintai

サービスのシェルスクリプトを作成する。

cd ~
touch shinka-app.sh
vi shinka-app.sh

シェルスクリプトの内容は以下の通り。

https://gist.github.com/aogiri/dadd5d6f051918c36703

サービスに実行権限を与える。

chmod +x shinka-app.sh

サービスが自動起動するよう設定する。

crontab -e
+ @reboot sh /home/kintai/shinka-app.sh start

サービスの開始と終了を手動で行うときは、以下のコマンドを実行する。

ユーザー:kintai

  • サービスの開始
    shinka-app.sh start
    
  • サービスの終了
    shinka-app.sh stop
    
  • サービスの再起動
    shinka-app.sh restart
    

ビルドとデプロイ

ユーザー:kintai

Gradle タスクの distributeKintaiApp を実行し、 アプリケーションの zip ファイルを作成する。 作成した zip ファイルをアップロードし解凍する。

unzip kintaikanri.zip

ディレクトリ構造

解凍したファイルは、以下のディレクトリ構造になるように構成する。

pwd;find . | sort | sed '1d;s/^\.//;s/\/\([^/]*\)$/|--\1/;s/\/[^/|]*/|  /g'

一部抜粋

/home/kintai
|--database
|  |--h2
|  |  |--bin
|  |  |  |--h2-1.4.185.jar
|--kintai_app
|  |--kintaikanri.jar
|  |--kintaikanri.log
|  |--properties
|  |  |--smtp.properties
|  |--war
|--kintai_data
|  |--kintai.mv.db
|--shinka-app.sh

参考文献