Lum’s

勉強中の技術をまとめるブログ。たまに趣味も。

capistranoで自動デプロイをしてみる①

やりたいこと

  • さくらVPS + nginx + unicornRailsアプリケーションの環境構築
  • capistranoとBitbucketのプライベートリポジトリを連携させ自動デプロイ
  • ではあるが、そもそもインフラ系初心者なのでSSHなどそのあたりにも触れてみたい。

さくらVPSを用意する

そもそもVPSって?ということで以下のサイトを読み込む。

knowledge.sakura.ad.jp

↑のサイトが鬼のようにわかりやすいが、要は1個の物理サーバがあり、そのホストOS上に仮想環境としてゲストOS+DB+webサーバを構築し、そこでいろいろゴニョゴニョやりましょうという話で、そこから簡単に利用状況に応じてスケールアップできるのがクラウド型、できないのがVPS型という住み分けと認識している。

VPS初操作

というわけで、早速手頃なサイズのプランを申し込み、以下のサイトをみながら初VPS操作。(やりたいことと書いておきながら、自分はインフラ初心者なので、ちょっとそのあたりの勉強もかねて関係ないかもしれないけどVPS周りを触ってみることにした。)

knowledge.sakura.ad.jp

デフォルトではLinuxディストリビューションの1つであるCentOS6が入っているので、VPS側のコントロールパネルからCentOS7へアップデート。 その後、SSH接続でVPSヘアクセスする。(以後kinokoサーバとする)

SSHって?

Secure SHellと呼ばれる通信プロトコル。 リモート操作をしたい時の通信方法として、telnetと呼ばれるものがあるが、それをそのまま使うとパスワードなどのやり取りの際に中身が丸見えになってしまう。 それを防ぐために、telnetをもう少しセキュアにしたものがSSHになる。 そしてそのSSHにはパスワード認証式と公開鍵認証式がある。公開鍵認証には以下のサイトがわかりやすい。

qiita.com

動きとしては

  • ローカルで秘密鍵と公開鍵を作成
  • 公開鍵をサーバ側に持たせ、サーバ側で作成したユーザーと紐付ける。
  • ローカルでsshクライアント上からsshコマンドでログインを実行時に、サーバ側は保持した公開鍵にて、乱数により作成したハッシュ値を暗号化し、ローカルに返してくる
  • ローカルは秘密鍵を使ってそれを複合化し、取り出したハッシュ値を再度サーバへ渡す
  • それが正しい数値であれば認証完了

という仕組み。

ということで、まずは公開鍵認証ができるようにする。part1

とにもかくにも、rootユーザが仮に乗っ取られることがあるとサービスとしてやばい。 という観点から、まずはrootユーザの直接アクセスを禁止し、別のユーザからログイン後に$su - コマンドとかでroot権限に切り替えられるようにしておく必要がある。

sshクライアント(自分はmacなのでターミナル)を立ち上げ、

$ssh root@xxx.xxx.xxx

でパスワード入力後認証。root権限をもったユーザでログインできているので

$ adduser kinokochan

$ passwd kinokochan

でとりあえずkinokochanというユーザを生成。その後exitして再度sshにてkinokochanにログイン。

$ su-

でrootに変更後、

$ cd /etc/ssh

$ cp sshd_config sshd_config.old

sshd_configというsshの設定ファイルを編集する下準備をしておく。 (cdコマンドで移動後、念のためバックアップとしてoldとリネームしてコピー)

さらにそこから

$ vim sshd_config

vimを立ち上げ、

$ #PermitRootLogin yes

となっている箇所を、コメントアウトを外してyes→noに書き換え保存。

その後

$ systemctl restart sshd.service

でサーバ再起動。一旦exitし、ssh root@~でログインを試みてみると・・

Permission denied, please try again.

できた!! 念のためkinokochanでログインをしても問題なく認証完了。とりあえずこれでroot乗っ取り危機は回避できました。

しばらくはこんな感じで長々とサーバ周りをいじる感じになりそう。