コース一覧
サーバー運用実践:セキュリティ・監視・デプロイ
専用ユーザーで動かす

サーバー運用実践:セキュリティ・監視・デプロイ

構築済みのnginxサーバーを、専用ユーザー・SSH鍵認証・ufwで保護し、HTTPS化、ログとヘルスチェックの監視、systemdタイマー、リリース切替、ロールバック、障害復旧までを実践します。本番を想定した安全な公開・監視・デプロイの基本を身につける30レッスンのコースです。

1
セキュリティのきほん
01. 専用ユーザーで動かす16分
02. SSH鍵認証16分
03. sshdを固める16分
04. ufwファイアウォール16分
05. ポートの棚卸し16分
06. ミッション サーバーを固める16分
07. 第4章クイズ12分
2
HTTPS
01. HTTPSとTLSのしくみ16分
02. 自己署名証明書を作る16分
03. nginxにHTTPSを設定16分
04. HTTPからのリダイレクト16分
05. ミッション HTTPS化完了16分
06. 第5章クイズ12分
3
運用と監視
01. tmuxで多重端末16分
02. ログローテーション16分
03. エラーログ監視16分
04. ヘルスチェック16分
05. systemdタイマー16分
06. ミッション 監視の自動化16分
07. 第6章クイズ12分
4
デプロイ
01. デプロイの型16分
02. シンボリックリンク16分
03. deploy.sh v216分
04. ロールバック16分
05. ミッション ワンコマンドデプロイ16分
06. 第7章クイズ12分
5
総合制作
01. ゼロから構築ミッション16分
02. 障害対応演習16分
03. 自由拡張16分
04. 完成と次のステップ16分

専用ユーザーで動かす

root で全部やるのをやめる

ここまでの作業は、すべて root で行ってきました。学習の間は手早くて助かりますが、運用に持ち込むと危険です。root は何でもできてしまうので、打ち間違いひとつでシステム全体を壊せます。乗っ取られたときの被害も、そのまま全体に及びます。

考え方はひとつです。その仕事に必要な権限だけを渡す。これを権限最小の原則と呼びます。2章で見た nginx の worker が www-data で動いていたのも、まさにこれでした。

この章では、サイトを更新するための専用ユーザーを作り、そのユーザーでデプロイができる状態を整えます。

ユーザーを作る

ターミナル

useradd -m -s /bin/bash deploy

-m は、そのユーザーのホームディレクトリを作る指定です。付け忘れると /home/deploy が無いまま作られ、次の回で作る鍵の置き場所に困ります。-s /bin/bash は、ログインしたときに使うシェルの指定です。

作られたかどうかは、ユーザーの定義が並ぶファイルで確かめられます。

ターミナル

grep deploy /etc/passwd
# deploy:x:1001:1001::/home/deploy:/bin/bash

コロンで区切られた並びの中に、ホームディレクトリとシェルが見えます。

書き込める場所を絞って渡す

専用ユーザーを作っただけでは、サイトのファイルを更新できません。/var/www/mysite の持ち主は root だからです。

ターミナル

ls -ld /var/www/mysite
# drwxr-xr-x 3 root root 4096 Aug  8 12:00 /var/www/mysite

ここで安易に chmod 777 としないでください。誰でも書き換えられる状態は、権限最小とは正反対です。持ち主のほうを変えます。

ターミナル

chown -R deploy:deploy /var/www/mysite

-R はディレクトリの中身まで含めて変える指定です。これで deploy はサイトを更新でき、それ以外の場所には手を出せません。

配信する側は読めればいい

ここで気をつけるのは、nginx の worker が www-data で動いていることです。持ち主を deploy にしても、他のユーザーへの読み取りが許されていれば配信は続きます。

ターミナル

ls -ld /var/www/mysite
# drwxr-xr-x 3 deploy deploy ...

末尾の r-x が、持ち主以外にも読み取りと移動を許している部分です。ここまで落としてしまうと、サイトが 403 を返し始めます。持ち主を変えたら、必ず配信が続いているかを確かめてください。

別のユーザーとしてコマンドを試す

作ったユーザーで実際に動かせるかは、切り替えて確かめます。

ターミナル

su - deploy -c 'touch /var/www/mysite/test.txt'

su - deploy -c は「deploy として、このコマンドを1つ実行する」という書き方です。成功すればファイルができ、権限が足りなければ拒まれます。設定した権限が意図どおりかを、思い込みではなく実行で確かめられます。

手を動かす

デプロイ用のユーザーを作り、サイトのディレクトリを渡します。そのユーザーで実際に書き込めること、そして配信が止まっていないことを両方確かめます。

ヒント

chmod 777 は誰でも書き換えられる状態です。権限最小の考え方とは正反対なので使いません

su - deploy -c 'コマンド' で、そのユーザーとして1つだけ実行できます

  • 1. useradd -m -s /bin/bash deploy でユーザーを作る
  • 2. grep deploy /etc/passwd で作られたことを確かめる
  • 3. chown -R deploy:deploy /var/www/mysite で持ち主を変える
  • 4. su - deploy -c 'touch /var/www/mysite/deploy-test.txt' で書き込めることを確かめる
  • 5. curl http://localhost/ でサイトが返り続けていることを見る

Linux は使うときに起動します(初回は約102MB通信します)

6 項目で採点します