shuto_log.aep

自分がやったことなどを備忘録的な感じで残していこうと思います。

ConoHaでCentOS7.1入れてウェブサーバ建てた備忘録(1)

今までRaspberry PiでWebサーバ建てたことしかなくて初めてConoHa(というか外部のサーバ)借りたので右も左も分からない。ユーザの設定とかセキュリティの設定とかわけ分からなくて最初何度も再構築(リセット)したので、自分用に備忘録残しておく。自分なりの解釈なので間違いあったらどんどん指摘して欲しいです。

(1)では新規作業用ユーザ作成からsshの公開鍵認証でリモートログインできるようになるまで。
(2)ではApacheでウェブサーバ建ててドメイン設定するまで。

前提条件

  • ConoHaでCentOS 7.1(64bit)インストール済み。
  • すべての設定をデフォルトで作成。

最初の操作はConoHaのコンソールでやる。CentOSデフォルトのフォントなのでめっちゃ読みづらい。

ユーザ追加・初期設定

ここでは作業用のnewuserという名前のユーザを作成する。
最初wheelグループの存在知らなくてsudoできなくて困った。

$ useradd newuser #新規ユーザ作成
$ passwd newuser #新規ユーザにパスワード設定する
$ usermod -G wheel newuser #新規ユーザをwheelグループに追加(wheelグループはsudo使えるぽい)

ユーザ作って設定できたらsudo使えるか確認する。
作ったユーザにログインした上で

$ sudo echo "hogehoge"

とかするといい。設定できてるとhogehogeって返ってくる。

SSHv2(公開鍵認証方式)でリモートログインできるようにする

  • SSHにはパスワード認証と公開鍵認証の2種類の方式がある。
  • 公開鍵認証だとパスワードを打たなくていいので安全。ただ最初だけ面倒。
  • ConoHaのコンソールからだと操作性が悪いので自分のMacからsshでリモートログインして操作出来るようにする。
  • 自分はラズパイサーバ建ててた時に作った公開鍵があったのでそれを流用。(無い場合はMacだとssh-keygenとかで新しく作る。)

.sshディレクトリの作成と公開鍵の情報を登録

※あらかじめsshでログインするユーザ(newuser)でログインしておく。

sshでログインするユーザのホームディレクトリに.sshディレクトリを作る。この際必ずログインするユーザで作成すること。rootで作ると.sshディレクトリの所有者がrootになってしまい、公開鍵認証できない!(1時間くらい悩んだ)

$ cd ~/
$ mkdir .ssh #.sshフォルダを作る

viでauthorized_keysファイルの作成、コピーした公開鍵の内容をペースト。(ConoHaコンソールの「文字列送信」を使用。)

$ vi authorized_keys
  • 公開鍵の内容貼り付けたら「:wq」で保存してvi終了。
  • ペーストがうまくいっていないのに気付かず最初悩んだ。
  • 具体的には全文のうち最初の1文字がなぜかペーストされてなかったので手で追記した。

関連ファイルのパーミッションの設定

  • sshディレクトリとauthorized__keysファイルのパーミッションを変更しておく。これをやっていなくてうまくいかなかった。
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

sshd_configの設定

  • sshdの設定ファイルであるsshd_configを変更する。
$ vi /etc/ssh/sshd_config

でviでsshd_configを編集。(sshログインの公開鍵認証を有効にする)

#RSAAuthentication yes
#PubkeyAuthentication yes

#AuthorizedKeysFile      .ssh/authorized_keys

コメントアウトを外して、noになってたらyesにする。(RSAAuthenticationはSSHv1の設定らしいから要らないかも)

ついでにセキュリティの観点からrootユーザのsshログインも禁止しておく。

PermitRootLogin yes

をnoに。
変更終わったら

$ systemctl restart sshd

して、sshdを再起動。これで設定が反映される。

接続テスト

とりあえずこれでMacからssh接続を試みる。サーバのIPアドレスはConoHaのダッシュボードの「サーバ>VPSサーバ名>ネットワーク情報」から確認できる。
f:id:shutosg:20151124044026p:plain:w300

$ ssh newuser@<ConoHaのVPSサーバのIPアドレス>

もしパスワードを聞かれたら公開鍵認証の設定がうまくできていない証拠(公開鍵認証に失敗してパスワード認証を試みている)。このページなどを参考に/var/log/secureを読んで対処した。

パスワードの入力無しでsshログイン出来るようになったら、sshd_configの

PasswordAuthentication yes

もnoに変えてsshにおけるパスワード認証のログインを無効にしてしまえばセキュリティ的になお安心。(公開鍵認証が成功していない状態でこの設定をyesにすると面倒くさいことになるので注意)

セキュリティ対策

  • CentOS 7ではiptablesに代わってfirewalldというファイアウォールが用いられている。
  • 他のブログではサーバ起動時にfirewalldも自動起動ように設定している例もあったが自分の環境では最初から自動起動していて不要だった。
  • sshd_configでsshを何番ポートで行うかという設定を変える。
  • ファイアーウォールの設定で、sshの通信が何番のポートで行われているか、という設定を変える。

本節の作業は、最後までsshで接続し続けて設定をいじる用のターミナルと、設定を変えたあとに接続テストをする用のターミナル2つ開いて適宜設定がきちんと反映されてるか確認しながら進めると良い。

sshd_configのポート番号の指定を変更する。

デフォルトの22番ポートは良く知られており、「ランダムなIP+22番ポート」に対して無作為にアクセスを試みる悪質者もいるのでssh用のポート番号を変更する。

$ vi /etc/ssh/sshd_config

して

Port 22

の22を任意の値に。コメントアウトされていたらそれもはずす。ポート番号は2byte割り当てられているので0〜65535の値である必要があるが、他の通信で使われているものもあるのでその辺はググったほうが良さそう。
設定を変えたら

$ systemctl restart sshd

で反映させる。(この時点では再度sshでリモートログインできなくなっているので作業を中断しないように。)

ファイアーウォールの設定を変える。

ファイアーウォールのポート番号設定もsshd_configのポート番号の設定と合わせる。
このエントリとか参考に/usr/lib/firewalld/にあるファイルを /etc/firewalld/にコピーして、/etc/firewalld/services/ssh.xmlのポート番号の設定をsshd_configに合わせる。
「設定を反映する」までやったら、接続テスト用のターミナルで

$ ssh newuser@<ConoHaのVPSサーバのIPアドレス> -p <変更したポート番号>

でできるか確かめる。以降、このコマンドでリモートログインできるようになる。