Afternoon Log

日々のことや、技術的な備忘録を吐き出していくつもり

サーバ構築のはなし

サーバ構築

どういう感じでサーバ用意したのとか、
構築したこと書いてよって言われたので先にそっちを書こうかと。
あること全部書くと量が量なので、
個別に見ても問題ないように記事を別けながら行きたいと思います。

ただ、サーバ構築するにあたってやったことを残していないのと
この手の記事ってのは沢山あって、そこからより詳しいのを見つけた方が有意義ではあるかなぁ。

この記事では以下のことを順に書いていきます。

  1. マシンの準備
  2. OSインストール
  3. SSH設定
  4. おまけ

マシンの準備

まずマシンがないといけない。
だけど、自分で用意するのが面倒ってことでレンタルする形に。
その時に選んだのが
vps.sakura.ad.jp

先輩からの紹介もあったのですが、
OSを幾つか選べて、かつrootが取れるからここにしました。
rootと言うのは、要は管理者アカウントのことです。

そうして2Gプランで契約しました。
ブログははてなさんの方ですが、TOPページとかはこの契約した方のサーバで動かしてます。
ちょっとしたサーバぐらいなら、512や1Gで十分だと思います。

契約すると、ホスト名貰えます。
ただ、このホスト名を使ってウェブサーバ構築するのは
自分の中でイケてないと思ったので、別サイトでドメイン名取得しています。
www.onamae.com

その後は、取得したドメインと関連させる作業。
[さくらvps お名前]とかで検索すれば、それっぽい記事が幾つかありますので、それらを参考にしました。

このようにして、無事に自分のサーバを手に入れることが出来ました。

OSインストール

一体どのOSを選ぶのか、それは自身の宗教に任せればいいかと……。
Linuxと言っても、ディストリビューションというもので幾つか別れています。
今回はRed Hat系のCentOSを選択します。その中でも、新しめの7系を。
最近ではDebian系のUbuntuを想定した記事とかも多いので、人によっては全然そっちでも。
僕は、ネットワークの設定をしようとしたときにめんどかった思い出もあるし、
最初に触ったのがCentOS 6系だったので、そっち慣れてるってだけです。

まぁ、今時Dockerっていう、簡単に仮想環境を用意出来るのがあるので、
初めはコレを入れつつ、Dockerでアレを試しに入れてみてってのが出来るので、
割と自由に入れて良いと思います。
その内、自分でDockerを導入してみて、使ってみる記事も書いてみたいですね。

さて、OSを選んだらインストール。
……また、調べてね!

インストール時、またはインストール後に一般ユーザーを作ります。
コマンド的には

# useradd -G wheel username
# passwd username

sudo権を持たせるために、一般ユーザーをwheelグループに追加しています。
個人的にちょっと怖いのが、useraddのGオプションで主グループ以外に追加できるんですが、
usermodでグループをいじる時、Gオプションだと上書きで、主グループ以外に追加がgオプションであるところ。
あと、Ubuntuだとuseraddではホームディレクトリがデフォで作られないので
adduserコマンドを使うという、ちょっと紛らわしいところ。
作った時点だとパスワードがないので、ちゃんと設定しておきます。

wheelグループに追加したのは良いですが、まだsudo権は持っていません。

# visudo

を実行し、

## Allows people in group wheel to run all commands 
#%wheel        ALL=(ALL)       ALL

とあるので、下の行に#がありコメントアウトされているのを、#を消して有効にします。
これでsudo権を得ました。

ちなみに、sudo実行の時にパスワードが面倒ってことなら、
下に書いてあるだろう Same thing without a password の方で有効化します。

それでは、一般ユーザへと移って、作業をしていきたいと思います。
今までコマンドの前に#が付いてましたが、一般ユーザーでは$になります。

# su username

SSH設定

OSインストールを済ませ、ユーザーも作った。次はSSHの設定をします。
インストールされてない場合は、入れます。

$ sudo yum -y update
$ sudo yum -y install openssh-server

因みに、yumでインストールするものはちょっと古いってことが往々にしてあります。
なのでしっかりセキュリティのことを考えるなら最新版のRPMパッケージから自分で入れる方がよろしいと思います。

SSHを入れたら設定を弄り、少しでもセキュリティの向上を図ります。
この先公開鍵認証の設定をした後、rootログイン及びパスワード認証を不許可にしていきます。

鍵作成

サーバに登録するための鍵をクライアント側で作成します。
windowsでは、僕はPuTTYを使っていますので、その中のPuTTYgenで公開鍵・秘密鍵を作ります。
パスフレーズは、なしで。
LinuxMacでは、

$ sudo ssh-keygen -t rsa -f ~/.ssh/myserver_rsa

上記のコマンドで生成します。
このコマンド打った後にパスフレーズ入力が要求されますが、空でいきます。
tオプションで暗号化のタイプを選び、fオプションで鍵の名前及び保存場所を決めてます。
場所は.sshの中に入れるのが好きな僕です。
.sshがなければ

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

でディレクトリを作成し、権限をユーザだけrwxにしましょう。

公開鍵の中身をコピーしておきます。

鍵登録

サーバ側に戻りまして、ログインユーザーの設定を行います。
こちらでも、ホームディレクトリに.sshディレクトリがなければ、先ほどと同じように作成します。
コピーした鍵の中身を以下のファイルに書き込みます。
もしauthorized_keysがなければ、1行目で作成も兼ねるんですが、
ファイルの権限を設定しておかないと効果がありませんので、2行目のコマンドも実行します。

$ vi ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

これで公開鍵認証ができるようになったと思います。
もしできなければ、ユーザ名は正しいのか、権限はちゃんと設定したかなどを確認します。
この先にも変更するのですが、SSHの設定ファイルから、公開鍵認証が有効かどうかも見ます。

$ sudo vi /etc/ssh/sshd_config

設定ファイルを開いた後、

PubkeyAuthentication yes

のところを見て、noだったらyesにします。

不許可の設定

先ほどのSSHの設定ファイルを開きます。
この度、rootとパスワード認証を禁止にします。

PermitRootLogin no

PasswordAuthentication no

他にもこの設定ファイルから色々弄れますが、今回はここまで。



おまけ

実は頼まれたDB導入まで書こうと思っていたけど、予想以上に長くなったので取りやめ。
firewalldと絡めたSSHのポート変更&開放のことも話したかったが、それもまた今度。
それに、自分のサーバに入っているのはMariaDBなのだが
PostgreSQLの方が良いというのを見て、後々移行しようと思っているので、
その時にでもまた書こうと思います。