アカウント

アカウント図

nginxに前頁で示した「/var/www/プロジェクトコード」をドキュメントルートに指定し、
Webコンテンツを配備するためには、上記図のように最低4つの作業を実施するアカウントを確定する必要があります。

  1. 作業用PCからリモート接続し、Webコンテンツを配備する作業者用アカウント
  2. nginxサービスのmasterプロセス用アカウント(デフォルト:root)
  3. nginxサービスのworkerプロセス用アカウント(デフォルト:nginx)
  4. ドキュメントルート(/var/www/プロジェクトコード)の所有者アカウント(デフォルト:root)

前提条件

以下が前提条件になります。

  • OSがUbnutu(本書では、16.04)を利用している。
  • nginx(本書では、1.12.0)をapt-getでインストールしている。
  • infra01などの作業用ユーザを作成している。
  • openSSHをインストールしている。
  • openSSHのサービスを起動している。(scp,sftpが利用できる)
  • 作業用PCはWindowsを利用している。
  • 作業用PCからnginxサーバへのネットワーク接続が可能である。
  • 作業用PCにteratermをインストールしている。
  • 作業用PCにwinSCPをインストールしている。

アカウントの種類

Unix及びLinuxでは大きく3つのアカウントの種類があります。

アカウントの種類 説明
スーパーユーザー(superuser) OSの最上位権限を所持するユーザアカウントの種類。
OSに対する全ての操作を実行できる権限を所持するアカウント
Unix、Linuxではroot。Windowsでは、Administrator。
システムアカウント(system accounts) システムアカウントとは、DNS、メール、Web、sshなどの各種サービスを運用するためのアカウント。
システムアカウントをサービス別に運用する目的は、OSのセキュリティを高めるためです。
システムアカウントは、ログインできないユーザ(nologin)です。
ユーザアカウント(user accounts) システムにアクセスし、システムで作業をするためのアカウントです。

各アカウント種類に対して、以下のような制約を設けます。(〇:利用可能 ×:利用不可

アカウントの種類 ログイン リモートログイン sudo
スーパーユーザー(superuser) ×
システムアカウント(system accounts) × × ×
ユーザアカウント(user accounts) 〇又は× 〇又は×

上記図のようにシステムアカウントは、システムアカウントの管理するサービスを動作することだけに利用されます。

※.オンプレミスの本番機では、作業用のユーザアカウントにリモートログインを許可していない事も多々あるため、
ユーザアカウントのリモートログインは、〇又は×にしています。
本書には、ユーザアカウント(infra01)はリモートアクセスを許可しています。

nginxをapt-getコマンドでインストールした段階では次のアカウントが存在します。

アカウント名 アカウントの種類 説明
root スーパーユーザー
(superuser)
OSの最上位権限を所持するユーザアカウント。
rootアカウントを如何に利用しないかが、セキュリティや誤操作防止
を高める事に繋がります。
root権限で作業する必要がある場合には、ユーザアカウントにsudoグループを付与します。
nginxをapt-getコマンドからインストールした場合には、
nginxのディレクトリ、ファイルの所有者、グループはrootになっています。
nginx システムアカウント
(system accounts)
apt-getコマンドでインストールした際、自動的に作成されるnginxのシステムアカウントです。
管理者 ユーザアカウント
(user accounts)
アカウント名は、OSをインストール時に貴方が設定したアカウント名です。
管理者アカウントは、デフォルトでsudoグループが付与されています。
管理者アカウントは、サーバの管理者のみが利用できるアカウントです。
サーバに対して実作業を行う場合には、次の作業者アカウントを作成して下さい。
作業者 ユーザアカウント
(user accounts)
サーバに対して実作業を行うユーザアカウントです。
開発の規模に応じて、インフラ(infra)、開発(developer)、運用(operator)などのグループを作成します。
そのグループに対して、具体的なアカウントを作成します。
セキュリティの観点から、アカウント名は個人を特定する個人名に
紐づけたアカウントを作成されるケースは少ないです。
個人名を付与しないアカウントは極力、アカウント名が推測されない
ランダムな英小文字と数字合計8文字以内で作成します。
作成したアカウントを利用する部署、個人、連絡先をサーバ管理者が管理します。
※.本サイトでは、教育用として分かり易くするためにinfra01などで説明しています。
nginxサーバにリモートログインする場合には、この作業用アカウントを利用します。

グループ

ディレクトリとファイルの権限をグループ化するためにアカウントに対して、グループの追加や作成をします。
ディレクトリとファイルにグループに対して許可した操作(読取り、書込み、実行)は、グループに所属する全アカウントに適用されます。
アカウントに対して、付与するグループは以下になります。

アカウント名 所属グループ 説明
root root rootグループは、原則他のアカウントに付与しません。
ユーザアカウントがroot権限でコマンドを実施する場合には、
sudoグループをユーザアカウントに付与します。
apt-getでインストールしたnginxのディレクトリの所有者やグループは、
初期値でrootになっています。
nginx nginx nginxグループは、apt-getでインストールした場合に
nginxアカウントと同時に初期作成されます。
管理者
アカウント
adm,cdrom,sudo,dip,plugdev,lpadmin,
sambashare,管理者グループ
管理者アカウントは、OSインストール時に上記デフォルトのグループが付与されます。
管理者グループは管理者アカウントと同名のグループが、
OSインストール時に初期作成されます。
作業者
アカウント
adm,sudo,nginx,infrateam サーバに対して実作業を行うユーザアカウントです。
作業者アカウントは、nginxの運用者を想定しています。
ログを運用するためのadmグループ、
nginxのサービス起動、停止のためのsudoグループ、
nginxへのコンテンツ配備のためのnginxグループを付与します。
infrateamは、インフラ又は運用チームを意味します。

作業者用アカウントにグループを追加してみましょう。
Teratermなどのsshクライアントを利用し、作業者用アカウント(infra01)でLinuxサーバにリモートログインします。

作業者アカウントのグループ確認
$ id 
uid=1001(infra01) gid=1001(infrateam) groups=1001(infrateam),4(adm),27(sudo)
						
nginxグループの追加
$ sudo usermod -aG nginx infra01
						
nginxグループ確認
$ cat /etc/group | grep nginx
nginx:x:131:infra01
						
作業者アカウントのグループ再確認
$ exit   ※.一度セッションを切り、リモートログインを再度実行します。
$ id
uid=1001(infra01) gid=1001(infrateam) groups=1001(infrateam),4(adm),27(sudo),131(nginx)
						
アカウントからnginxグループを削除する方法
※.誤ってグループを付与した場合						
$ sudo gpasswd -d hoge nginx
						

纏め

nginxに関するアカウントとグループを纏めると以下になります。

  1. rootアカウント直接利用せず、sudo権限を付与した作業者アカウントで作業する。
  2. 作業者アカウントにadm,nginx,[sudo]グループを付与する。
  3. ログインやコマンドを抑制されたアカウント設計がシステムのセキュリティを高める。

セキュリティ要件の高い本番機のサーバに対してアプリケーションの配備に慣れるためにも、 自己学習や開発環境の段階からrootアカウントや管理者アカウントを利用しない手順に慣れておくのがとても重要です。