Django

ConoHa VPS の環境構築 【ログイン設定】

ConoHa で VPS をレンタルしたので、メモがてら環境構築の手順について書いていきます。
基本的には VPSスタートアップガイド の手順で行っていきます。

  • ConoHa VPS 1GBプラン
  • OS : Ubuntu

参考にさせて頂いたのは下記のページです。

接続許可ポートを設定

SSH | 公開鍵認証を設定する

SSH とは安全にサーバーに接続するための仕組みです。
クライアント(自分側)とサーバー側で一組の鍵(ファイルです)を保管し、アクセスるたびに鍵を照らし合わせ、合っていれば暗号化された通信が可能になります。

もう少し詳しい解説は下記を参考にしてください。

鍵の生成

これでキーが生成されるのでダウンロードします。

サーバーに鍵を設定する

上記で行ったのは鍵の生成とダウンロードのみです。
その鍵がどのサーバーの鍵なのかは指定していません。

ConoHa では複数のサーバーを持つことができますが、SSH キーはサーバーごとに設定する必要があります。

サーバーの再構築

公式ページでは

SSH Keyで設定した鍵は新規サーバーの追加時に登録済みのキーとして設定することができ、新規サーバー追加時のSSH Keyの設定を簡略化できます。

とありますが、新規でサーバーを作成した場合はすでにサーバーが構築されています。

  1. シャットダウン
  2. サーバー再構築

の手順を踏むことで同様に SSH Key の設定を簡略化できます。

鍵の設定

このタイミングで自動的に root パスワードを利用したアクセスができなくなります。

スーパーユーザの SSH ログイン

次にログイン設定を行います。

Tera Term のインストール

ここでは公式ページの通り、Tera Term Home Page でアクセスします。下記のページよりダウンロードできます。

スーパーユーザの SSH ログイン

下記の秘密鍵の欄には 先ほどダウンロードした root アカウント用の pem ファイル を指定します。

OK を押すと VPS に SSH キーでログインできます。

ログインした先は既に Ubunts の環境です。
各種 Linux コマンドが利用できます。

アップデート

ログインしたらアップデートをしておきます。

sudo apt update
sudo apt upgrade

今後アプリケーションや python ライブラリをインストールする際にエラーが発生した場合は上記のアップデートを行うことで解消される場合があります。

一般ユーザを追加する

サーバーを構築した最初は スーパーユーザである「root」アカウントしか存在しません。このアカウントはすべての権限を持っているため、事故が起こりやすいリスクがあります。

そのため、スーパーユーザではなく一般ユーザを作成し、その一般ユーザで普段の作業を行います。

スーパーユーザの権限で一般ユーザを作成します。一般ユーザの作成は下記の adduser で行った方がスムーズです。

adduser でのユーザ追加

adduser ユーザ名

このコードであればパスワードも流れで設定してくれます。

パスワードを打っても画面に表示されませんが仕様です。そのままエンターを押せば次に進みます。

  • Full Name
  • Room Number
  • Work Phone
  • Home Phone
  • Other

に関しては空欄で構いません 。何も記入せずエンターを押します。

最後に作っていいか確認されます。

y → エンター

を押すことで一般ユーザーが作成されます。

adduser と useradd の違い

この二つのコマンドはどちらもユーザを作成するコマンドですが、挙動が違います。
useraddはコマンド一発で作るタイプで、adduserは対話形式で作る違いがあります。

adduseruseradd
対話型
→ Linux がパスワードなどを聞いてくれる
コマンド型
→ こちらから個別に指定する
home ディレクトリを自動生成home ディレクトリを自動で作らない
自分一人ならこちら複数のユーザー登録を行う時に便利

一番下は個人的な感想です。個人的な利用であれば使用頻度はかなり少ないはずなので、楽な adduser でいいかと思います。

ユーザ関連の Linux コマンド

注意したいのはユーザーの削除です。adduser で作成したユーザーは自動でホームディレクトリが作成されます。
ユーザーを削除する際は userdel -r ユーザー名 でホームディレクトリごと削除してください。

ユーザ一覧cat /etc/passwd
ユーザの削除userdel ユーザ名
ユーザディレクトリの存在確認ls -d /home/ユーザ名
ユーザディレクトリごとユーザを削除userdel -r ユーザ名

Tera Term に文字をペーストする際、Ctrl + V ではできません。右クリックがペーストになっています。

一般ユーザの設定を変更する

作成したユーザーの設定を変えていきます。

一般ユーザが sudo を使えるようにする

一般ユーザーは sudo コマンドを使うことでスーパーユーザの権限でコマンドを実行できるようになります。

sudoはコマンド単位で一時的にroot権限を使う方法だ。「スーパーユーザでDoするからsudo」という意味合いで覚えておこう。

sudo | エンジニアの入り口

スーパーユーザと一般ユーザ

スーパーユーザの権限だとリスクがあるので一般ユーザを作成しました。
ですが、sudo コマンドを使うとスーパーユーザの権限でコマンドを利用できるようになり、この sudo コマンドでサーバーを管理しようとしています。

これなら最初からスーパーユーザで作業を行えばいいのではないか

という疑問が湧いてきたんですが、それは絶対にやってはいけないことのようです。

rootユーザはLinuxOSにおいて「唯一神」である。rootユーザであれば自分自身を削除するコマンドも受け付けてしまうし、他人のユーザアカウントを削除することも可能となっている。よってシステムの設定ファイルなどを変更するとき以外使用しないようにするのが一般的である。

間違ってもrootユーザで全てを操作し仕事を片付けようとしてはいけないので注意しよう。Linuxの場合インストールをおこなった管理者自身も一般ユーザを別に作成し、必要な時だけrootの権限を借りて操作するのが習慣となっている。それぐらいrootというユーザは慎重に扱う必要があるというのを念頭に置いておこう。

【初心者でもわかる!】Linuxのユーザとは? | エンジニアの入り口

UNIX における管理権限は絶対的なもののようで、徹底すべき事柄のようです。
同じ疑問を持つ方はやはりいらっしゃいました。

一人で開発する分には他の人に破壊される心配はありませんが、自分がミスする可能性はあるので一般ユーザで作業した方が無難そうです。

ことセキュリティにおいて、先人たちの仰ることは絶対なのです。

sudo を使えるグループにユーザーを入れる

ユーザーを該当するグループに入れることで一般ユーザに sudo 権限を与えることができます。

上記のページでは OS が CentOS です。
Ubuntu の場合、所属させるグループが sudoグループになります。

gpasswd -a ユーザー名 sudo
グループに関する Linux コマンド
グループの一覧を表示cut -d: -f1 /etc/group
ユーザの所属するグループを表示groups ユーザ名
sudo グループの中身を表示getent group グループ名

一般ユーザで SSH ログイン

作成した一般ユーザでサーバーに SSH ログインします。
スーパーユーザの SSHキーはサーバーで作りましたが、一般ユーザの場合はクライアントで SSH キーを作成します。

Tera Term に SSH キーを作る機能があるのでこれを利用します。
クライアント側で持っているキーを秘密鍵、サーバーにアップする鍵を公開鍵と呼びます。

SSH キーの生成

ConoHa のガイドではbcrypt KDF 形式のチェックが外れていますが、入れたまま生成・保存したほうがいいそうです。

一般ユーザでパスワードログイン

SSH ログインを行うためには一般ユーザの公開鍵をサーバーにアップする必要があります。

そのためには一般ユーザでパスワードでログインしなければなりません。

  1. パスワードでログイン
  2. 秘密鍵をアップ
  3. SSH キーでログイン可能になる

という流れになります。
ですが、現状ではパスワードによるログインができない設定になっています。
まずは sshd_config の設定を変更して一般ユーザがパスワードでログインできるように設定します。

スーパーユーザでサーバーにログインして下記のコマンドを実行します。

vi /etc/ssh/sshd_config

これで vi エディタで sshd_config を編集できるようになります。

vi エディタ とは

vi エディタは UNIX系OSに付属しているテキストエディタです。
windows におけるメモ帳のような位置づけかと思います。

編集モードi
コマンドモードesc キー
保存して終了コマンドモードで :wq
保存せずに終了コマンドモードで :q!

上記4つができればなんとかなるはずです。

sshd_config とは

vi エディタで sshd を設定していきますが、その前に sshd について書いておきます。

SSHによる接続を待ち受けるのがお仕事のデーモンさん
が「sshd(エスエスエィチディー)」です。

sshd | IT用語辞典

SSH を受け取る機能が sshd で、その内容が書かれているのが sshd_config です。

sshd_config の編集

変更するのは一行だけです。

PasswordAuthentication no

PasswordAuthentication yes

へ変更します。

PasswordAuthentication yes

i キーで編集モードに入って編集し、esc キーでコマンドモード、:wqで保存して終了します。

設定の反映

sshd_config は内容を編集するだけでは設定が適応されません。

systemctl reload sshd

を入力することで sshd に反映されます。

一般ユーザでパスワードログイン

公開鍵のアップロード

これでようやく公開鍵をアップできます。

ダウンロードした pubファイル が公開鍵です。これを Tera Term へ ドラッグ & ドロップします。

そのまま何も変更せずに OK をクリックします。
ダイアログにもありますが、公開鍵である「id_rsa.pub」はホームディレクトリの直下にアップロードされます。

pwdlsでホームディレクトリに id_rsa.pub がアップされていることがわかります。

公開鍵を設定する

サーバーにアップしただけでは効果がありません。

フォルダを作って格納し、設定を行っていきます。

.ssh ディレクトリの作成

mkdir .ssh
パーミッションの設定
chmod 700 .ssh

パーミッションとは

Linuxを始めとしたUnixLikeSystemではファイルやディレクトリ一個一個に許可属性を与え、管理出来るようになっている。これを「パーミッション」という。

それぞれ「所有者」「グループ」「その他のユーザ」にパラメータを割り振りが可能となっている。

【一通り理解】Linuxパーミッションの基本とその設定方法

r読み込み可能
w書き込み可能
x実行可能
-不可
0---何もできない
1--x実行可能
2-w-書き込み可能
3-wx実行可能・書き込み可能
4r--読み込み可能
5r-x読み込み可能・実行可能
6rw-読み込み可能・書き込み可能
7rwx読み込み可能・書き込み可能・実行可能

一桁目がユーザー、二桁目がグループ、三桁目がその他のユーザーを表します。

そのため、先ほどの chmod 700

  • 現在ログイン中のユーザーは 読み込み可能・書き込み可能・実行可能
  • 同じグループのユーザーは 読み込み・書き込み・実行のいずれもできない
  • それ以外のユーザーは 読み込み・書き込み・実行のいずれもできない

という設定になります。

パーミッションの確認

パーミッションの確認は ll コマンドで確認できます。

ll .ssh

公開鍵の移動と名前変更

mv コマンドでファイルの移動と名前変更ができます。

使い方は python の shutil.move()と同じです。
第一引数に対象のファイル、第二引数で移動先のディレクトリや名前を指定します。

mv id_rsa.pub .ssh/authorized_keys

ここは ConoHa のガイド通り「.pub」 の拡張子を消しています。

公開鍵のパーミッション設定
chmod 600 .ssh/authorized_keys

現在ログイン中のユーザーのみ読み込み/書き込み可能にします。

ConoHa のガイドではユーザーディレクトリ直下にある id_rsa.pub ファイルを削除することになっていますが、移動させたので存在しません。

rm -f id_rsa.pub

上記のコードは ls コマンドでファイルが残っていなければ実行不要です。

一般ユーザで SSH ログイン

やっと、やっと SSH でログインできる環境が整いました。

パスフレーズは SSHキーを生成した時のパスフレーズを入力します。

各種ログインの禁止設定

一般ユーザで SSH ログインができるようになりましたが、
現状ではまだパスワードでログインが可能になっています。

これでは SSH ログインを設定した意味がないので、パスワードでのログインができないようにします。
また、併せて誤って root でログインしないように root でのログインも禁止します。

両方とも ssh_config で設定します。
root アカウントでログインしなおした状態で 再度 ssh_config を vi エディタで開きます。

vi /etc/ssh/sshd_config

root ログインの禁止設定

PermitRootLogin yes

PermitRootLogin no

へ変更します。

PermitRootLogin no

パスワードログインの禁止設定

PasswordAuthentication yes

PasswordAuthentication no

へ変更します。

PasswordAuthentication yes

保存して終了するにはコマンドモードで :wqを入力します。

sshd 設定の反映

忘れずに下記のコマンドを実行します。

systemctl reload sshd

これでパスワードでのログインも、root アカウントでのログインもできなくなりました。

しかし、Ubuntu の初手のアカウント設定だけでかなりかかりますね・・・。ナメてた。

root でログインするにはどうすればいいか

もう root でログインできなくなりました。今後スーパーユーザの権限が必要になったときはどうすればいいのでしょうか。

sudo 権限の一般ユーザで sshd_config を編集する

sudo を扱える権限をもつ一般ユーザであれば sshd_config を変更できます。

sudo vi /etc/ssh/sshd_config

sshd_config が開くので、

PermitRootLogin no

PermitRootLogin yes

へ変更します。これで設定を反映した後であれば root アカウントでログインできます。

sudo 権限の一般ユーザがいない場合

sudo 権限の付与を怠った場合、ConoHa のコンソールからログインできます。

ConoHa のコンソールでログインした場合は強制的に root でログインできるため、sshd_config の編集が可能です。

Ubuntu環境の基本設定

ここからは基本的な設定項目です。

日本語化

日本語パッケージのインストール

sudo apt-get -y install language-pack-ja-base language-pack-ja

日本語化

sudo update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"

その後、ログインしなおすか下記のコードを実行します。

source /etc/default/locale

これでサーバーで日本語を扱えるようになります。

タイムゾーンの設定

タイムゾーンを日本時間に設定します。

sudo cp /etc/localtime /etc/localtime.org
sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

私の場合は既に日本時間になっていました。サーバーや Ubuntu のバージョンによってはデフォルトで日本時間が設定されているようです。

-Django