【CentOS 8】ConoHaVPSでLAMP環境構築 【Pt.1 サーバー契約後の初期設定】

前提

ConoHaVPSでLAMP環境構築し独自ドメインの取得からSSL対応までの手順 当方の環境はMac Windowsの方はGitbashなりでbash使えるようにすると同じようにできると思います

登録

conoHaでVPSの申し込みをしてください 申し込みをしてない方はこちら

サーバーを作成

今回はCentOSでやっていきます。 rootパスワードとネームタグは自由(パスワードは画像の通りの制約があります)に。 作成後、ネームタグをクリックすると下記のような画面に行きます。

ssh接続

ssh接続というのは sshという規格を用いてサーバーに接続するんだな程度の認識で良いです

それでは接続していきましょう。 ターミナルから下記を入力します

※先頭の$ についてはコマンドですよという記載上の表現なので、コマンドとして入力はしないでください

localTerminal
$ ssh root@IPアドレス

Are you sure you want to continue connecting (yes/no)?と接続しても大丈夫?的なこと聞かれたらyesと打つ。

パスワードを求められるので、サーバー作成時に設定したrootパスワードを入力する。

VPS
[root@IPアドレス ~]#

上記のようになれば接続成功。

ユーザー作成

Windowsでいうこんなイメージ

Rootユーザはサーバーでの操作にログが残らず、さらにサーバーに対してあらゆる事ができてしまい危険です。 ですので、ログを残すためや操作に制限を与えるためユーザーを作成します。

VPS
[root@IPアドレス ~]# adduser ユーザー名
[root@IPアドレス ~]# passwd ユーザー名
ユーザー ユーザー名 のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。

adduser ユーザー名でユーザー追加します。 passwd ユーザー名でユーザーにパスワードを設定します。 新しいパスワードを求められるので入力します。

パスワード入力の際は画面には入力情報出ませんので注意。

次にWheelグループに追加します。 Wheelグループはsudoというコマンドを用いて、rootユーザーと同等のレベルでコマンドが実行できるグループです。


横道にそれますが、なぜWheelなのかですが、下記のような説があるようです。

big wheel から由来している説です。big wheel というのは「大物」とか「実力者」とかそういった意味のある言葉 参考:Codaholic

面白いですね。


rootユーザと同等なら、rootユーザ使えば良いと思いますが下記のような利点があります

  • 作成したユーザのパスワードを使うのでrootユーザのパスワードを知る必要がない
  • sudoをできるかどうかはrootユーザが決める(多人数で操作する際に利点)
  • sudoでのコマンド結果は、すべてログに残る

下記のコマンドを入力し、グループに追加します。

VPS
[root@IPアドレス ~]# gpasswd -a ユーザー名 wheel
ユーザ ユーザー名 をグループ wheel に追加

gpasswdはユーザーが所属するグループの情報を管理します。-a(add)オプションをつけることで指定ユーザーをグループに追加できます。

それでは、ちゃんとユーザーができているか確認します。 下記のコマンドを入力します。 パスワードを求められたら、ユーザー作成時に設定したパスワードを入力します。

VPS
[root@IPアドレス ~]# su ユーザー名

#こうなったら成功
[ユーザー名@IPアドレス root]$

suはユーザー変更するコマンドです。 ユーザー名を与えないと、rootユーザーになることを意味します。

次に、作成したユーザーを使ってssh接続してみましょう。

exitを入力して、rootに戻ります。 もう一度exitをして、接続を切ります。 ちなみにexitはログアウトのコマンドです。

下記のコマンドを叩くとパスワードを求められるので入力します。

localTerminal
$ ssh ユーザー名@IPアドレス
ユーザー名@IPアドレス's password:

#こうなったら成功
[ユーザー名@IPアドレス ~]$

以降から作成したユーザーで接続します。

基本セキュリティ設定

作成したユーザーで接続できるようになったので、 安全性を高めるためにrootユーザーでsshで接続できないようにします。

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

このようにずらっと、sshに関する設定が記述されています。

/PermitRootLoginと入力します。 (/で検索状態になるので、PermitRootLoginについてファイル内検索をしています)

PermitRootLogin yes

Shift+aを押し、INSERTモード(入力できる状態)になり、yesnoに変えます。 変更後escを押し、wqで保存して終了します。 (入力方法がわからない場合、vimで検索してください)

変更を反映させます。

VPS
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd

これで最初行ったような、rootユーザーでのssh接続できなくなりました。

localTerminal
$ ssh root@IPアドレス

補足ですが、/etc/ssh/sshd_config等の最初からあるファイルを削除したり、設定をやらかすと接続できなくなる場合があるので気をつけましょう。

ですので、例えばファイルに変更を加える前に cp /etc/ssh/sshd_config /etc/ssh/old_20200718_sshd_config 変更前のファイルのバックアップをとっておき戻せるようにしておくのも良いと思います


公開鍵認証でVPS接続

公開鍵認証とは

いちいちログアウトするのも面倒ですので、もう一つターミナルを立ち上げましょう 鍵をローカルで生成します。

localTerminal
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048

cd ~/.sshで鍵を置いているディレクトリに移動します。 もしなかったら、mkdir ~/.sshで作成し、chmod 700 ~/.sshとしましょう。 chmodは各ユーザーがそのファイルやフォルダにどんなことができるかを制限するコマンドです。

移動したら鍵を生成します。 ssh-keygenで生成します。 -tでタイプを指定します。rsaは主流な暗号の種類です。 -bで鍵の長さ(byte)を指定します。

入力すると保存する鍵名を聞かれるので、適当にconohaにしました。空にするとid_rsaという名前で作られます。

Generating public/private rsa key pair.
Enter file in which to save the key (/.ssh/id_rsa): conoha(好き名前で)

Enterを押すと、次にパスフレーズが求められます。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

パスフレーズは、鍵を使うのに必要なパスワードです。 仮に鍵が流出しても、このパスフレーズを知られていなければ良いわけです

二回入力すると、生成が開始されます。 こんな感じのがでたらOKです。

+---[RSA 2048]----+
〜   省略     〜
+----[SHA256]-----+

ls ~/.sshとして、確認してみると、設定した名前で二つのファイルが出来上がっています。

localTerminal
$ ls ~/.ssh
conoha conoha.pub

.pubの方が公開鍵になります。 公開鍵に対して秘密鍵で認証するので、conoha.pubのほうをサーバーにアップロードします。 (鍵穴が公開鍵で、鍵が秘密鍵みたいなイメージですかね)

サーバー側にまだ、鍵を置く場所がないので作成します。 ユーザーでログインし、下記のコマンドを叩きます。

VPS
[ユーザー名@IPアドレス ~]$ mkdir ~/.ssh
[ユーザー名@IPアドレス ~]$ chmod 700 ~/.ssh

鍵穴作っても設置してなかったらだめなので 次にサーバー側にアップロードします。

conoha.pubの部分は適宜読み替えてください。 下記のコマンドを入力します

localTerminal
$ scp ~/.ssh/conoha.pub ユーザー名@IPアドレス:~/.ssh/authorized_keys

conoha.pub             100%  398     5.6KB/s   00:00

100%になったら、サーバーに作った.ssh配下にauthorized_keysという名前でアップロードされました。 scpはファイル転送を行うコマンドです。


authorized_keysってなんだ?状態なので、VPS側で下記のコマンドを入力します。

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

開いたら /AuthorizedKeysFileと入力し、Enterを押します。 するとこのような記述があります。

AuthorizedKeysFile      .ssh/authorized_keys

これは、ssh接続で使う公開鍵の場所と名前を示しています。 先ほどアップロードしたものを指しています。

scpコマンドを入力した際に、authorized_keysという別の名前に変えてあげたのは この名前と一致させるためだったわけです。

なので、ここさえ変えてしまえば別に元の名前であげても問題ありません。


次に公開鍵認証で接続できるように設定します。

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

/PubkeyAuthenticationを入力し、Enterを押します。

#PubkeyAuthentication yes

となっているのが表示されるかと思います。

CentOS8.2におけるsshdでは、 デフォルトで公開鍵認証で接続できるようになっているのでこのままで問題ありません。 (#を外しても問題ありません)

ここまでで、公開鍵認証での接続ができるようになっているので試してみましょう。

ログアウトせずにもう一つターミナルを立ち上げましょう (締め出されたときの対処法も書いていますが、そもそも接続を残しておけば締め出されない)

conohaの部分は適宜ローカルで作成した鍵の名前に読み替えてください。

localTerminal
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス

鍵生成時に設定したパスフレーズ(鍵生成の際に入力したもの)が求められるので、入力してあげます。

ログインできたら公開鍵認証の成功です。

もうパスワードでのログインはしなくていいので無効化しましょう。 ユーザー名とパスワードを渡したら誰でも入れる(メリットな場合もある)ので、 鍵を持っている人だけに絞るとより安全です

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

#パスワードでの認証しない
PasswordAuthentication no

これで保存し、再度sudo systemctl restart sshd.serviceで変更を反映します。


なお持論ですが、パスワードが適切な組み合わせ、及び長さであれば パスワードでの認証禁止まではしなくて良いと思っています 8桁の大小英数字及び記号を含むパスワードで、 一般普及しているPCで、解析に20年ほどかかるようです 参考


蛇足

localTerminal
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス

毎回こんなの打ちたくないので、先に定義してもっと簡単に接続できるようにしましょう。

localTerminal
$ cd ~/.ssh
$ vi config

configファイルを作成し、以下を入力します。

Host conoha
  HostName IPアドレス
  User ユーザー名
  Port 22
  IdentityFile ~/.ssh/鍵名

HOST conohaの箇所をssh conohaのように使用するので、適当に決めてください。

保存すると、

localTerminal
$ ssh conoha

で接続できます。

ポート番号変更

sshのポートは22がデフォルトなので、 変えてやらないと攻撃を受けるリスクが高まるので変えましょう。

1024 ~ 65535番で使っていない場所であればどこでも良いです。 今回は10022を使いたいと思います。


netstat -napで使っているポートを調べられます めちゃくちゃ、ズラズラ出てきますが Active Internet connections (servers and established)の箇所の Local Addressの列の末尾の:22などが使われているポートです


それでは、ポートを変更していきます

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config

上記を実行し、 Port 22と書かれている部分をコメントアウトして、新しく指定しましょう。

#Port 22
Port 10022

sshdの再起動をして変更を反映させます。

VPS
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd.service

次にfirewallの対象が、sshのデフォルトポート番号22になっているので変えてあげます。

VPS
[ユーザー名@IPアドレス ~]$ sudo vim /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  #↓追加
  <port protocol="tcp" port="10022"/> 
</zone>

<port protocol="tcp" port="10022"/>を追加してあげます。

変更を反映させるために、下記コマンドで再起動します。

VPS
[ユーザー名@IPアドレス ~]$ sudo systemctl restart firewalld.service

再起動したら、ポートが変わっているか確認します。

VPS
[ユーザー名@IPアドレス ~]$ sudo firewall-cmd --list-all
#これが出ればOK
ports: 10022/tcp

確認できたら、忘れず 蛇足で作成したローカルのconfigも変えてあげましょう

Host conoha
  HostName IPアドレス
  User ユーザー名
  Port 10022 #ココ
  IdentityFile ~/.ssh/鍵名

もしも締め出されてsshできなくなったら

ConoHaのサイトからサーバーを選択し、コンソールを押してください。

よく見るターミナルがweb上で開かれるので、ユーザー名とパスワードを入力してログインできるはずなので、やらかした設定を見直しましょう

次回はApacheやMySQL、PHPをいれ、ドメイン取得、SSL対応、cronでの自動更新まで一気にやります

About

現役フリーランスエンジニアの勉強・備忘録。
バックエンドがメイン。フロントからインフラまで色々やってます。