記事を書くきっかけ
サーバーの知識などをなあなあで済ませてしまっている自分がいます。ここいらでいっちょサーバーの基本を一から学習すっか!と思い立ちVPSを借りてみました。
そもそもVPSとはなんですか?
Virtual Private Server(仮想専用サーバー)の頭文字をとって名付けられたそうです。
VPSでは、物理サーバーにインストールされているOS(ホストOS)の上に、ユーザーそれぞれに仮想サーバーが割り当てられ、ユーザーはその仮想サーバーを専有して使えます。仮想サーバーにはホストOSとは別のOS(ゲストOS)がインストールされており、ユーザーが管理者権限を持って自由に操作することができます。
ネコでもわかる!さくらのVPS講座 〜第一回:VPSてなんだろう?〜
イメージとしてはアパートと似たようなものだと思います。アパート(物理サーバー)の中に各々の部屋(仮想サーバー)があって、その仮想専用サーバーの中で色々構築していく・・・みたいな感じだと理解してます。
ちなみにネコでもわかる!さくらのVPS講座 〜第一回:VPSてなんだろう?〜のネコでもわかるシリーズを見ながらサーバーを構築していきます。
本当にわかりやすくて助かります、さくらさん。へへ(媚びを売る)。
それではサーバーを構築していきます
ネコでもわかる!さくらのVPS講座 ~第二回「サーバーをさわってみよう!」を見ながらサーバーを構築しましょう。
1.VPSの利用申し込みをしよう
このへんは各々自分の財布と相談しながらお申込みをしてください。
2.VPSにログインしよう。SSHクライアントソフトのインストール
VPSにログインするためにはSSH通信が出来る専用ソフトが必要です。
そもそもSSH通信とは何でしょうか?
SSH通信(Secure Shell)とはリモートコンピューター(サーバーなど)と安全に通信する為のセキュリティ強固な通信手段です。
SSH通信を用いて送られる情報はすべて暗号化されています。なので仮に情報を送信している際に中身を覗かれても暗号化されているから大丈夫です。SSH通信でよく聞くのは公開鍵認証ですね。公開鍵認証もこの記事の後半で記載する予定です。
ssh root@xxx.xxx.xxx.xxx
手始めにssh通信を使ってサーバーに接続してみましょう。xxxの部分は自分が申し込んだサーバーのIPアドレスを入力して下さい。
おそらくサーバーのパスワードなど色々聞かれたと思いますが、無事サーバーを立てることが出来たと思います。
3.OSをアップデートしよう
セキュリティ上OSのアップデートは欠かさず行いましょう
4.SSHをもっと安全に使うために
ssh root@xxx.xxx.xxx.xxx
先程サーバーを立ち上げる際、上記のようにrootユーザーでssh通信をしました。しかしrootユーザーとはサーバーの管理者です。rootユーザーでログインできる機能を残しておくと、rootユーザーのパスワードを盗まれた際にのっぴきならない事態を引き起こしかねません。なのでそもそもrootユーザーではログインできないようにしておきましょう。
しかしrootユーザーしかいないのに、rootユーザーでしかログインできないなんて事が起きないように新しく一般ユーザーを作りましょう。今後はこの一般ユーザーでログインします。
rootユーザーで直接ログインを防ぐことでパスワードが漏れてもサイトが乗っ取られる確率はグンと減りました。もしrootユーザーでしか出来ない作業がある場合はsuコマンドど一般ユーザーからrootユーザーに切り替えが出来ます。
5.一般ユーザーを作ろう
ssh通信でサーバーにログインしてから
adduser vpsuser
adduserコマンドを打ちましょう。これで新しいユーザーを追加できます。
passwd vpsuser
新しいユーザーにもpasswdコマンドでパスワード認証をつけておきましょう。
それでは新しいユーザーでログインしてみましょう
ssh vpsuser@xxx.xxx.xxx.xxx
おそらく新しいユーザーでログイン出来たと思います。
6.sshサーバーの設定を変更して、rootで直接アクセス出来ないようにする
それでは先程お話した乗っ取りの危険性を少なくするためにrootユーザーでのログインを禁止しましょう。
*rootユーザーで作業を行って下さい。
以下のコマンドをターミナルで入力して下さい。
cd /etc/ssh
cp sshd_config sshd_config.old
ちなみにcpコマンドはコピーコマンドの事です。上記のコマンドではsshd_configをコピーして、sshd_config.oldを作りました。今からsshd_configをいじるので間違えたときのためにsshd_config.oldを作っておくということですね。
それではsshd_configをいじっていきましょう。
vim sshd_config
で
# PermitRootLogin yes
の箇所をいじります。ここをいじればrootでの直接ログインを阻止できるというわけですね。
それではこのyesをnoに、そしてコメントアウト(#の部分)を外しましょう。
PermitRootLogin no
に変更出来ました。wqで保存して終了しましょう。
そしてsshサーバーであるsshdを再起動しましょう。これで設定が有効になります。
systemctl restart sshd.service
で再起動が出来ます。
これでrootから直接ログインができなくなりました!
sshのセキュリティ向上をします。
rootからの直接ログインはできなくなりましたが、これだけでは少し不安が残ります。そこでもう二つ対策を立てようと思います。
1.SSHのポート番号を変更
https://webkaru.net/linux/change-ssh-port/
↑のサイトに詳しく書いてあります。rootの直接ログインを禁止した時と同じようにsshd.configファイルをいじります。僕はrootでの作業ということを忘れていた&rootコマンドの切り替え方を忘れていたために、わざわざVPSサーバーのVNCコンソールにアクセスしてから、root権限でポート番号の変更を行っていました。
この設定をした後はsshサーバーに変更したport番号を指定してアクセスしなければなりません。例えば
ssh -p 56789 karuma@aaa.bbb.ccc.ddd
このコマンドはなんとなくわかると思いますが、-pがportを56789がsshd.configファイルで指定したport番号になりますね。
2.ssh接続を鍵認証で行なう
出ました、sshで有名な鍵認証です。
先程まではパスワードでsshサーバーに認証を行っていました。パスワード認証はどのパソコンからでもパスワードさえ知っていればログインできるので便利といえば便利ですがセキュリティに不安が残るので公開鍵認証を使っていきましょう
公開鍵認証とは?
公開鍵認証方式は公開鍵と秘密鍵の2つの鍵を使用して接続します。
この認証方式を使えば、鍵を持っている人(パソコン)からのみ、ログインを許可する事が出来ます。
クライアント側に秘密鍵、サーバー側に公開鍵を置いておくことで情報を送信する際はその双方の鍵を使ってやり取りが出来ます。もし悪意ある他人に途中で見られてもsshで暗号化されているので大丈夫ってわけです。
詳しい事は以下のURLに書いてあります。
「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)
インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識
それでは公開鍵認証を設定していきましょう。
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
$ ssh-keygen
上記では.sshディレクトリという新しいディレクトリを作ります。.sshディレクトリの権限はchmodコマンドで本人しか読み書き出来ないようにします。
chmodコマンドはファイル・ディレクトリの権限(パーミッション)を変更できます。
Linuxの権限確認と変更(超初心者向け)
$ cd .ssh
$ ssh-keygen
そして.sshディレクトリで公開鍵を作成しましょう。ssh-keygenコマンドで作成出来ます。
作成した後、lsコマンドでディレクトリ内を見てみると
id_rsa id_rsa.pub
が作成されていると思います。
id_rsaが秘密鍵。クライアントに置く鍵です。
id_rsa.pubが公開鍵。サーバー側に置く鍵です。
それでは公開鍵をサーバーに設定します。
まず一般ユーザーでsshサーバーにログインします。
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh
chmodコマンドで自分の身読み書き可能に設定してサーバー内の.sshディレクトリに移動します。
そして
vim authorized_keys
authorized_keysにクライアントで作成した公開鍵を貼り付けましょう。
そして
chmod 600 authorized_keys
でこのauthorized_keysファイルを自分のみ読み書き可能にしておきます。
これで公開鍵認証の設定は完了です。
一度サーバーからクライアントに戻って本当に公開鍵認証でssh接続出来るか確かめてみましょう。
ssh -i .ssh/id_rsa vpsuser@xxx.xxx.xxx.xxx
うまく接続できれば成功です。公開鍵認証で接続できれば通常のパスワードログインは必要ないので
サーバー内で
vim sshd_config
をして
PasswordAuthentication no
としてあげましょう。service sshd restartをすれば反映されていると思います。
とりあえず前編はこれで終了します。結構書いたつもりですがこれでもまだネコでもわかるシリーズは第二回・・・先は長いです。