1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Linode で仮想マシンを作ったらまずやること

Last updated at Posted at 2022-08-23

はじめに

Linode を使用すると簡単に仮想マシンを作成できます。しかし、作成後、デフォルトの状態ではセキュリティ上危険なままサーバーが公開されてしまいます。
そこで、この記事では Linode で最低限設定しておくべきセキュリティ設定と、その設定を自動化する方法についてご紹介します。

なにが危険か?

最も危険なのは、root ユーザーがパスワードを利用してログインできる状態で公開される点です。

どのように設定すればよいか?

具体的には管理用ユーザー作成と SSH 周りの設定をします。
例として Redhat 系 OS で説明します。流れは公式ガイドの通りです。

ユーザーの作成

管理コンソールなどでログインしたあと、まずはユーザーを作成します。
(example_user は作成するユーザー名、192.0.2.1 は作成した仮想マシンのIPアドレスと読み替えてください)

$ useradd example_user

次に、作成したユーザーのパスワードを設定します。

$ passwd example_user

今回は管理者ユーザーの作成なので、sudo 権限を付与します。

$ usermod -aG wheel example_user

作成したユーザーでログインしてみます。

$ ssh example_user@192.0.2.1

設定したパスワードでログインできたらOKです。

また、SSH の設定でパスワード認証を無効化して、ブルートフォース攻撃を防ぐために、公開鍵を登録します。
アクセスするユーザー側の環境により方法は異なります。
こちらは Linux や Mac での例です。

$ ssh-copy-id example_user@192.0.2.1

これでユーザー作成は完了です。

SSH の設定 - root ユーザーでのログインとパスワード認証の無効化

OpenSSH Server はデフォルトで起動しているため、設定ファイル /etc/ssh/sshd_config を編集します。
今回は Root でのログインとパスワード認証を無効化します。

#PermitRootLogin yes
↓
PermitRootLogin no

PasswordAuthentication yes
↓
PasswordAuthentication no

設定反映のため、OpenSSH Server を再起動します。

$ systemctl restart sshd

こちらで完了です。
慣れていればなんてことはない作業ですが、なかなか面倒ですね。

StackScripts とは?

StackScripts を使えば、ここまでの設定の投入も自動化できます。
StackScripts の概要はこちらの記事をご覧ください。

今回は StackScripts を利用してユーザー作成と SSH 設定を自動化したいと思います。

StackScripts で設定してみよう

利用する StackScripts

早速ですが今回利用する StackScripts の内容です。
順番に解説していきます。

#!/bin/bash

#<UDF name="username" label="SSH Username" default="">
#<UDF name="password" label="SSH Password" default="">
#<UDF name="publickey" label="SSH Public Key" default="">
#<UDF name="disable_root" label="Disable root login for SSH" oneOf="Yes,No" default="Yes">

source <ssinclude StackScriptID=1>

if [ "$USERNAME" ] && [ "PASSWORD" ]; then
    user_add_sudo "$USERNAME" "$PASSWORD"
    
    if user_add_pubkey "$USERNAME" "$PUBLICKEY" && [ "$DISABLE_ROOT" == "Yes" ]; then
        ssh_disable_root
    fi
fi

#<UDF 〜> ではユーザー定義の変数を定義しています。
こちらを定義すると、仮想マシン作成時にフォーム形式でパラメーターを指定できます。
今回は作成するユーザー、パスワード、公開鍵、そして SSH での root ログインの無効化についてフォーム上で入力、または選択できるようにします。

source <ssinclude StackScriptID=1> ではコミュニティで公開されている StackScripts ID=1 をインポートしています。
こちらで利用している StackScripts は Linode 公式が提供している Bash ライブラリです。

すでにある資産を利用できるため便利ですね。

その後はユーザー名やパスワードが入力されている場合に処理を走らせる形にしています。
if の中にある user_add_sudouser_add_pubkeyssh_disable_root は上記のライブラリで定義されている関数です。
名前のとおりですが、それぞれの役割は以下となります。

関数名 用途
user_add_sudo ユーザー作成、sudo 権限付与
user_add_pubkey ユーザーの公開鍵登録
ssh_disable_root root ログイン無効化、パスワード認証無効化

StackScripts を利用して仮想マシンを作成する

StackScripts の作成が完了したら仮想マシンを作成していきましょう。
さきほど定義した変数の入力フォームが表示されますので、必要情報を入力し仮想マシンを作成します。
DeployStackScripts.jpg

仮想マシンの作成が完了したら作成したユーザーにて公開鍵認証でログインします。
(公開鍵は利用しているものに読み替えてください)

$ ssh -i .ssh/id_rsa example_user@192.0.2.1
[example_user@192-0-2-1 ~]$

ログインできればOKです。
続いて sudo 権限が付与されているか確かめてみましょう。

$ groups

こちらのコマンドの結果に、Redhat 系では wheel、debian 系では sudo が含まれていれば OK です。

続いて root でログインできないことも確かめてみましょう。
Permission denied が表示されれば OK です。

$ ssh root@192.0.2.1
root@192.0.2.1: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

さいごに

今回は Linode での最低限のセキュリティ設定と StackScripts での自動化についてご紹介しました。
設定した項目以外にも環境によっては必要なセキュリティ設定の追加が生じると思います。
その際も複数の仮想マシンで同じ作業を繰り返すのは生産的ではないので、ぜひ StackScripts をご活用ください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?