VPSのインストールが完了したら、Webサーバーのインストール、データベースのインストールといろいろとやるべきことはあると思いますが、その前に最低限のセキュリティとこれから使うVPSを使いやすくするためのステップをいくつか実行してみてはいかがでしょうか。
本稿では、僕がCentOS 7のサーバーをセットアップした際に行った手順を紹介します。
初回はrootでログイン
VPSにサーバーをインストールすると、最初はrootユーザーしか存在しません。
なのでまずはrootユーザーでログインします。ログインするには二つの方法があります。
SSHでログイン
自分のVPSをセットアップすると、サーバーのIPアドレスが知らされます。
僕が利用しているConoHa VPSの場合、Webのコントロールパネルにログインしてサーバーを選択すると、ネットワーク情報としてIPアドレスが表示されます。
これを使ってログインすることができます。
コマンドプロンプト(Macの場合、ターミナル)を開いて次のように入力します。
ssh root@111.222.333.444
※IPアドレスは自分のものに書き換えます。
SSHがインストールされていない場合、こちらを参照してください。
-
WindowsにSSH (OpenSSH)をインストールする方法
VPSをはじめリモートにあるサーバーを遠隔で操作するにはssh(エス・エス・エイチ)を使います。 MacやLinuxには最初から入っているsshですが、Windowsは最近のバージョンにしか入っていな ...
初回アクセス時は、次のように確認を求められます。
The authenticity of host '111.222.333.444 (111.222.333.444)' can't be established. RSA key fingerprint is f3:cf:58:ae:71:0b:c8:04:6f:34:a3:b2:e4:1e:0c:8b. Are you sure you want to continue connecting (yes/no)?
聞かれるのは初回だけなので、 yes と入力すれば接続されます。
続いて、rootユーザーのパスワードを入力すればログインできるはずです。
コンソールからログイン
別のやり方として、コンソールからアクセスする方法もあります。
コンソールというのは、そのマシンの目の前に立ってディスプレイとキーボードを使って操作するイメージです。VPSの場合ブラウザでそれを行えます。
ConoHa VPSの場合、ウェブのコントロールパネルからサーバーを選択すると、「コンソール」というボタンがあり、そこを押すとブラウザ上でコンソールへの接続ができます。
普段はコンソールは使わないと思いますが、ありがちな例としては、誤操作なのでネットワークを切断してしまうケースです。
インターネットに接続しているネットワークインターフェイスを止めてしまったり、ファイアウォールの設定ですべての接続を拒否してしまうと、外部から接続できなくなります。そんな場合はコンソールからログインしてネットワーク設定を修正することができます。
自分用のアカウントを作成
rootアカウントでサーバーにログインできたら、まずは自分専用のアカウントを作ります。
rootユーザーはすべての権限を持っているため、このアカウントさえあればなんでもできます。
ですが、しきたりとして各ユーザーにアカウントを作り、それぞれのアカウントに必要な権限を与えることになっています。
とりあえず、自分のユーザーアカウントを作ります。
useradd -m john
と入力すれば、mynameという名前のユーザーが作成されます。
続いて
passwd john
と入力すれば、johnユーザーのパスワードを設定することができます。
ユーザー名ですが、企業などの組織であればファーストネームの1文字目と、ラストネームを組み合わせたもので一貫していることが多いかと思います。たとえば、山田太郎さんの場合、tyamada という感じです。とはいえVPSは個人サーバーですから、自分が使いやすい名前であれば大丈夫でしょう。
自分用のアカウントでsudoができるようにしておく
先ほど「rootアカウントでログインしちゃダメ!」と書きましたが、実際にはroot権限が必要になる場面はかなり多いのです。
設定ファイルの編集やファイルのコピー、サービスの再起動などはroot権限がないとできなかったりします。
そんな時に使うのが、sudo というコマンドです。
sudo コマンドの後に実行したいコマンドを続けると、そのコマンドをrootユーザーとして実行させることができます。
ただしこれをできるようにするには、そのユーザーに事前に必要な権限を与えておく必要があります。
というわけでも、自分のアカウントはsudo ができるようにしておきましょう。
usermod -a -G wheel john
何をしたかというと、johnというユーザーをwheelというグループのメンバーに追加しました。
wheelグループは管理者のグループで、このグループのメンバーはsudo を実行することができます。
rootはログアウトして自分用のアカウントでログインする
さて、以上の手順で自分自身のアカウントを作成し、管理者のグループに追加しました。
ここで一度rootのセッションはログアウトして、自分用のアカウントでログインしてみましょう。
ssh john@111.222.333.444
と入力してログインできれば成功です。
sudoが使えるかどうかも試してみましょう。
sudo cat /etc/hosts
コマンドに特に意味はありません。sudoのテスト用に適当に実行してみるだけです。
パスワードの入力を求められたら、自分(この場合john)のパスワードを入力します。
hostsファイルの内容が出力されたらsudoは使えています。
もしうまくいかない場合、再度rootユーザーでログインし直して、/etc/sudoers というファイルの以下の行がコメントアウトされていないか確認します。
## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL
コメントアウトされている場合は、アンコメント(最初の#を削除)します。
プロンプトのスタイルを変える
次は単なる趣味の設定ですが、僕はいつもシェルのプロンプトを変更しています。
VPSのサービスによって違いますが、デフォルトのままだと
[john@111-222-333-444 ~]$
とちょっと寂しい感じです。
なのでこれをいじって、もう少し情報が出るようにします。
PROMPT_COLOR="$(tput setaf 6)" BASE_COLOR="$(tput sgr0)" export PS1='${PROMPT_COLOR}[\u@vps1 \w] [\t]$ ${BASE_COLOR}'
変更は.bashrc ファイルの後ろに追加しましょう。
その後、
. ~/.bash_profile
と入力すれば、プロンプトのスタイルが反映されるかと思います。
[john@vps1 ~] [12:25:30]$
プロンプトの表示内容は、色や表示できる項目がたくさんあります。好きなスタイルにいじってみるのもいいでしょう。
ウェブ上からスタイルを選択すると、書式を生成してくれるサイトもあります: .barhrc generator
SSHのkeyを登録してパスワードなしでログインできるようにしておく
これはやっておくと、sshでログインするたびにパスワードを入力しなくてもすむのでオススメです。
まずはPC側のターミナルで
ssh-keygen
と打ちます。
鍵を保存する場所を聞かれたらそのままEnterキーを押します。パスフレーズに関しても、特に設定する必要がなければ何も入力せずにEnterを押します。
こうすると、ローカルマシンのホームディレクトリの下に.ssh という隠しフォルダができ、その中にid_rsa とid_rsa.pub というファイルができます。
id_rsa = 秘密鍵
id_rsa.pub = 公開鍵
この秘密鍵と公開鍵を簡単にたとえると、世界で一つしか存在しない鍵穴と鍵のようなものです。
他の人に秘密鍵を盗まれない限り、自分の鍵穴(公開鍵)は自分の鍵(秘密鍵)でしか開けられません。
sshはこの仕組みを使って認証をすることができます。
鍵認証をできるようにするには、自分の鍵穴をサーバーに設置します。
やり方は簡単ですのでやってみましょう。
ターミナルで
ssh-copy-id <サーバーで作ったアカウント名>@<サーバーのIP>
と打ち、パスワードを聞かれたら入力するだけです。
コマンドが終了したら再度接続してみましょう。パスワードを聞かれずにログインできれば成功です。
PCからログインしやすいようにする
sshクライアントはデフォルトではローカルのユーザー名と同じユーザー名でログインしようとします。
ローカルのユーザー名とリモートのユーザー名が異なる場合、username@hostnameという風にユーザー名を渡す必要があります。
また、VPSは最初の段階ではIPアドレスでしかアクセスできません。
そうなると、毎回ssh接続をするたびに
ssh myremoteusername@111.222.333.444
という感じで非常に長いコマンドを入力することになります。
これを簡単にするにはローカルのPC側で以下の手順を実行します。
- ホームディレクトリ直下の.sshディレクトリ内にconfigというファイルを作ります。例:c:\Users\john\.ssh\config
- configファイルに以下の内容を追加し保存します。ポイントは、1行目は好きな名前、2行目はVPSのIPアドレス、3行目はVPS上のユーザー名を入力することです。
Host vps1 HostName 111.222.333.444 User myremoteusername
- ssh vps1 と入力してVPSに接続できることを確認する。
これでログインが簡単になりましたね。
SSHのパスワード認証を無効にする
sshのログインが公開鍵認証だけでできるようになったら、パスワード認証を無効にすることでセキュリティが向上します。
企業のサーバーなら、たいていはファイアウォールの内側にあってそこからSSHポートに直にアクセスできません。
しかしVPSは、インターネット上に直にさらされているサーバーですので、誰でもアクセスを試みることができます。
どこかの知らない誰か(もしくは自動プログラム)が自分のサーバーにrootとしてログインしようとしてパスワードを総当たりすることも可能性としては考えられます。パスワード認証を無効にすれば、そもそもそういうアタックをできなくなります。
sudo vi /etc/ssh/sshd_config
でsshサーバーの設定ファイルを開き、以下の3項目の設定を変更します。
ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
その後、sshサーバーを再起動します。
sudo systemctl restart sshd.service
再起動後はパスワードでログインができなくなります。
パソコンの故障なのでローカルPC上の鍵(.sshフォルダー内)を失くしてしまった場合は、最初の項で説明しているコンソールでログインをしてsshサーバーの設定を編集して、パスワード認証を再度有効にします。
OSを更新しておく
OSにインストールされたパッケージに更新があれば適用しておきましょう。
sudo yum update
上のコマンドは、-y というオプションをつけると何も聞かれずに更新まで適用しますが、僕は一応何が更新されたか確認する派です。
ファイアウォールを確認
僕が使っているConoHa VPSは最初からネットワークレベルでファイアウォールが適用されているため、sshとweb(http/https)だけ許可して、それ以外を全てブロックする設定に変えたほかは、特に何もする必要はありませんでした。
もしお使いのVPSがインターネットにじかにさらされている場合、 iptablesというLinuxのファイアウォールの設定をする必要があります。