【CentOS 8】ConoHaVPSでLAMP環境構築 【Pt.1 サーバー契約後の初期設定】
前提
ConoHaVPSでLAMP環境構築し独自ドメインの取得からSSL対応までの手順 当方の環境はMac Windowsの方はGitbashなりでbash使えるようにすると同じようにできると思います
登録
conoHaでVPSの申し込みをしてください 申し込みをしてない方はこちら
サーバーを作成
今回はCentOSでやっていきます。 rootパスワードとネームタグは自由(パスワードは画像の通りの制約があります)に。 作成後、ネームタグをクリックすると下記のような画面に行きます。
ssh接続
ssh接続というのは sshという規格を用いてサーバーに接続するんだな程度の認識で良いです
それでは接続していきましょう。 ターミナルから下記を入力します
※先頭の$ についてはコマンドですよという記載上の表現なので、コマンドとして入力はしないでください
$ ssh root@IPアドレス
Are you sure you want to continue connecting (yes/no)?
と接続しても大丈夫?的なこと聞かれたらyes
と打つ。
パスワードを求められるので、サーバー作成時に設定したrootパスワードを入力する。
[root@IPアドレス ~]#
上記のようになれば接続成功。
ユーザー作成
Windowsでいうこんなイメージ
Rootユーザはサーバーでの操作にログが残らず、さらにサーバーに対してあらゆる事ができてしまい危険です。 ですので、ログを残すためや操作に制限を与えるためユーザーを作成します。
[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でのコマンド結果は、すべてログに残る
下記のコマンドを入力し、グループに追加します。
[root@IPアドレス ~]# gpasswd -a ユーザー名 wheel
ユーザ ユーザー名 をグループ wheel に追加
gpasswd
はユーザーが所属するグループの情報を管理します。-a
(add)オプションをつけることで指定ユーザーをグループに追加できます。
それでは、ちゃんとユーザーができているか確認します。 下記のコマンドを入力します。 パスワードを求められたら、ユーザー作成時に設定したパスワードを入力します。
[root@IPアドレス ~]# su ユーザー名
#こうなったら成功
[ユーザー名@IPアドレス root]$
su
はユーザー変更するコマンドです。
ユーザー名を与えないと、rootユーザーになることを意味します。
次に、作成したユーザーを使ってssh接続してみましょう。
exit
を入力して、rootに戻ります。
もう一度exit
をして、接続を切ります。
ちなみにexit
はログアウトのコマンドです。
下記のコマンドを叩くとパスワードを求められるので入力します。
$ ssh ユーザー名@IPアドレス
ユーザー名@IPアドレス's password:
#こうなったら成功
[ユーザー名@IPアドレス ~]$
以降から作成したユーザーで接続します。
基本セキュリティ設定
作成したユーザーで接続できるようになったので、 安全性を高めるためにrootユーザーでsshで接続できないようにします。
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
このようにずらっと、sshに関する設定が記述されています。
/PermitRootLogin
と入力します。
(/
で検索状態になるので、PermitRootLogin
についてファイル内検索をしています)
PermitRootLogin yes
Shift+a
を押し、INSERTモード(入力できる状態)になり、yes
をno
に変えます。
変更後esc
を押し、wq
で保存して終了します。
(入力方法がわからない場合、vim
で検索してください)
変更を反映させます。
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd
これで最初行ったような、rootユーザーでのssh接続できなくなりました。
$ ssh root@IPアドレス
補足ですが、/etc/ssh/sshd_config
等の最初からあるファイルを削除したり、設定をやらかすと接続できなくなる場合があるので気をつけましょう。
ですので、例えばファイルに変更を加える前に
cp /etc/ssh/sshd_config /etc/ssh/old_20200718_sshd_config
変更前のファイルのバックアップをとっておき戻せるようにしておくのも良いと思います
公開鍵認証でVPS接続
いちいちログアウトするのも面倒ですので、もう一つターミナルを立ち上げましょう 鍵をローカルで生成します。
$ 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
として、確認してみると、設定した名前で二つのファイルが出来上がっています。
$ ls ~/.ssh
conoha conoha.pub
.pubの方が公開鍵になります。 公開鍵に対して秘密鍵で認証するので、conoha.pubのほうをサーバーにアップロードします。 (鍵穴が公開鍵で、鍵が秘密鍵みたいなイメージですかね)
サーバー側にまだ、鍵を置く場所がないので作成します。 ユーザーでログインし、下記のコマンドを叩きます。
[ユーザー名@IPアドレス ~]$ mkdir ~/.ssh
[ユーザー名@IPアドレス ~]$ chmod 700 ~/.ssh
鍵穴作っても設置してなかったらだめなので 次にサーバー側にアップロードします。
conoha.pub
の部分は適宜読み替えてください。
下記のコマンドを入力します
$ 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側で下記のコマンドを入力します。
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
開いたら
/AuthorizedKeysFile
と入力し、Enterを押します。
するとこのような記述があります。
AuthorizedKeysFile .ssh/authorized_keys
これは、ssh接続で使う公開鍵の場所と名前を示しています。 先ほどアップロードしたものを指しています。
scpコマンドを入力した際に、authorized_keys
という別の名前に変えてあげたのは
この名前と一致させるためだったわけです。
なので、ここさえ変えてしまえば別に元の名前であげても問題ありません。
次に公開鍵認証で接続できるように設定します。
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
/PubkeyAuthentication
を入力し、Enterを押します。
#PubkeyAuthentication yes
となっているのが表示されるかと思います。
CentOS8.2におけるsshdでは、
デフォルトで公開鍵認証で接続できるようになっているのでこのままで問題ありません。
(#
を外しても問題ありません)
ここまでで、公開鍵認証での接続ができるようになっているので試してみましょう。
ログアウトせずにもう一つターミナルを立ち上げましょう (締め出されたときの対処法も書いていますが、そもそも接続を残しておけば締め出されない)
conohaの部分は適宜ローカルで作成した鍵の名前に読み替えてください。
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス
鍵生成時に設定したパスフレーズ(鍵生成の際に入力したもの)が求められるので、入力してあげます。
ログインできたら公開鍵認証の成功です。
もうパスワードでのログインはしなくていいので無効化しましょう。 ユーザー名とパスワードを渡したら誰でも入れる(メリットな場合もある)ので、 鍵を持っている人だけに絞るとより安全です
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
#パスワードでの認証しない
PasswordAuthentication no
これで保存し、再度sudo systemctl restart sshd.service
で変更を反映します。
なお持論ですが、パスワードが適切な組み合わせ、及び長さであれば パスワードでの認証禁止まではしなくて良いと思っています 8桁の大小英数字及び記号を含むパスワードで、 一般普及しているPCで、解析に20年ほどかかるようです 参考
蛇足
$ ssh -i ~/.ssh/conoha ユーザー名@IPアドレス
毎回こんなの打ちたくないので、先に定義してもっと簡単に接続できるようにしましょう。
$ cd ~/.ssh
$ vi config
configファイルを作成し、以下を入力します。
Host conoha
HostName IPアドレス
User ユーザー名
Port 22
IdentityFile ~/.ssh/鍵名
HOST conoha
の箇所をssh conoha
のように使用するので、適当に決めてください。
保存すると、
$ ssh conoha
で接続できます。
ポート番号変更
sshのポートは22がデフォルトなので、 変えてやらないと攻撃を受けるリスクが高まるので変えましょう。
1024 ~ 65535番で使っていない場所であればどこでも良いです。
今回は10022
を使いたいと思います。
netstat -nap
で使っているポートを調べられます
めちゃくちゃ、ズラズラ出てきますが
Active Internet connections (servers and established)
の箇所の
Local Address
の列の末尾の:22
などが使われているポートです
それでは、ポートを変更していきます
[ユーザー名@IPアドレス ~]$ sudo vim /etc/ssh/sshd_config
上記を実行し、 Port 22と書かれている部分をコメントアウトして、新しく指定しましょう。
#Port 22
Port 10022
sshdの再起動をして変更を反映させます。
[ユーザー名@IPアドレス ~]$ sudo systemctl restart sshd.service
次にfirewallの対象が、sshのデフォルトポート番号22になっているので変えてあげます。
[ユーザー名@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"/>
を追加してあげます。
変更を反映させるために、下記コマンドで再起動します。
[ユーザー名@IPアドレス ~]$ sudo systemctl restart firewalld.service
再起動したら、ポートが変わっているか確認します。
[ユーザー名@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での自動更新まで一気にやります