最 小コストで最 大 限 の 不 正 行 為 対 策

実行ユーザー権限を知る
まず、ウェブサーバーのセキュリティーについて話を進める前に、Linux（UNIX）でプログラム（プロセス）を実行するユーザーの権限（実行ユーザー権限）についての知識が必要になるので、これについて少し解説します。
Linux（UNIX）ではプロセスが実行されるとき、そのプロセスが誰の権限で実行されているかによって、プロセスがファイルなどにアクセスできる権限（アクセス権限）が違ってきます。ユーザーが普通にログインしてシェルから何かコマンド（プロセス）を実行しているときは、そのユーザーの権限でコマンド（プロセス）は動きます。また、プロセス実行実
践

Linux

セキュリティー講座

前回はウェブサーバーのセキュリティーに関する概念について解説しました。

中に実行時のユーザー権限を変更することもできますが、変更するにはroot権限（管理者権限）が必要になります。
RedHat Linuxをインストールして初期状態のままhttpdを立ち上げると、最初の親プロセスの実行ユーザーは「root」ですが、それ以外のプロセスの実行ユーザーは「nobody」というユーザーになるように設定されています（図1）。

rootとnobodyが実行ユーザー

今回はウェブサーバーのセキュリティーの各種設定について説明します。ここではウェブサーバーの一般的な設定については触れません。あくまでもセキュ実際のプロセスがどうなっているか、psコリティーに関連した説明のみを扱います。したがって、多少なりともLinuxマンドで表示してみましょう。axufというオ（UNIX）上のウェブサーバーの知識が必要となります。

プションを使うと親プロセスと子プロセスの関係がわかりやすく表示されます（リスト1）。

第14回

少なくとも1つはroot権限で実行さていまウェブサーバーのセキュリティー（後編）す。これにはいくつかの理由があります。まず最初に挙げられる理由としては、httpプロトコルの初期状態のポート番号は「80」になソフトウェアコンサルタント すずきひろのぶっているからです。一般にLinux（UNIX）では、1024未満のポート番号を利用するためにはroot権限がなくてはなりません。このため、少なくとも1つのプロセスはroot権限が必要になります。ポート番号を1024以上に設定するとroot以外のユーザーでも原理的にはhttpdを実行できます。

344 INTERNET magazine 2000/3

インターネットマガジン／株式会社インプレスR&D©1994-2007 Impress R&D

RedHat Linuxのhttpdはrootで立ち上げる
ことを前提条件にしているので、本連載ではnobodyというユーザー（ユーザーID：99）

験からわかるように、cgi-binで実行されるコが定義されているのです（リスト2）。

マンドはnobodyのユーザー権限で実行されます。

この条件のまま使うことにしますが、これは実行ユーザーを引き継がせる

完全にApacheのサーバープログラムが安全

この実験では以下のことがわかります。
・初期状態ではhttpdはユーザーnobodyでであるということを保証するわけではありません。SOHOレベルの設定に費やす労力と今回長々と実行ユーザー権限について説明して解説するセキュリティーはバランスが取れてきましたが、重要なポイントはnobodyといいると考えているだけにすぎません。

実行される・HTMLファイルはnobodyが読み込み可でうユーザーの権限がcgi-binコマンド（プロセあるファイルにしておく必要がある

子プロセスの実行ユーザーがnobodyなのス）を実行するときに、プロセスの実行ユー・cgi-binもnobodyの権限で実行されるは、/etc/httpd/httpd.confという設定ファザー権限として継承されるということです。

・この権限は/etc/httpd/httpd.confのUser

イルにある「User」の設定と「Group」のこの関係がわかるようなテスト用cgi-binコマとGroupの設定で変更できる

設 定 がn o b o d y になっているためです。

ンドを作って実験すると理解できるでしょう（注意）この実験の終了後直ちに利用したnobodyという名前に特別な意味はありませ（図 2）。参考にこのcgi-binコマンドのコーcgi-binコマンドを削除しておいて下さい。

ん。/etc/passwdを見ればわかるのですが、ドを載せておきます（リスト34 ）
。この実

図1

図2

httpdの実行ユーザー

ps-stat.cgiの動き
サーバー
httpd

サーバー

（root）

リクエスト
httpd

httpd

（root）（nobody）

httpd

httpdブラウザー

cgi-binコマンド（nobody）（nobody）

cgi-binコマンド（nobody）

httpd（root）

httpdcgi-binコマンド（nobody）（root）

httpd（nobody）

他のプロセスファイル
ブラウザーからps-stat.cgiにリクエ

他のプロセスストが送られると、ps-stat.cgiはcgi-binコマンド（nobody）

ps-stat.cgi

httpd（root）

httpd（nobody）（root）

サーバー上で稼動しているプロセス

他のプロセスを調べ、その結果をブラウザーに戻起動しているhttpdプロセスの実行ユーザーはrootとnobodyとなっている。

す。実際にはリスト1 のpsコマンドと同じ内容が表示される。

リスト1

実行ユーザーを調べる$ ps axuf
USER
PID %CPU %MEM
....
root
5550 0.0 0.8
nobody5552 0.0 0.9
nobody5553 0.0 0.9nobody
5554 0.0 0.9
nobody5555 0.0 0.9

リスト2

リスト3
SIZE

RSS TTY STAT STARTTIME COMMAND

1860
1956
1956
1956
1932

1140
1264
1252
1252
1184

0:00 httpd0:00 \_ httpd0:00 \_ httpd0:00 \_ httpd0:00 \_ httpd

?
?
?
?
?

S
S
S
S
S

/etc/passwdの表示（部分）……
nobody:x:99:99:Nobody:/:……
（シャドウパスワード化されている）

15:56
15:56
15:56
15:56
15:56

ps-stat.cgi#!/bin/shecho Content-type: text/plain
echo

リスト4

ps-stat.cgiの表示結果（ブラウザー）$ ps axf
PID TTY STAT TIME COMMAND...
7042 ? S0:00 httpd7044 ? S
0:00 \_ httpd7057 ? S
0:00 |\_ sh /home/httpd/cgi-bin/ps-stat.cgi
7058 ? R
0:00 |\_ ps axf
7045 ? S
0:00 \_ httpd7046 ? S
0:00 \_ httpd7047 ? S
0:00 \_ httpd...

インターネットマガジン／株式会社インプレスR&D

ポート番号：送られてきたパケットの通信内容（サービス）が何なのかを区別するために使っている番号。0番から65535番まであり、特に0番から1024番はあらかじめ決められた通信用に使われている（例：WWWは80番）。
©1994-2007 Impress R&D

INTERNET magazine 2000/3

345

図3

作業用ユーザーとグループの作成

Step 1: グループを作成
Step2: ユーザーを作成

グループの作成:
グループ名
wwwadmin
グループID8080(任意のユーザーIDでかまいません)

ユーザー名ユーザーID
グループID
シェル
ディレクトリー# /usr/sbin/groupadd -g 8080 wwwadmin

www80 (任意のユーザーIDでかまいません)
wwwadminなし
なし# /usr/sbin/useradd -u 80 -d '/dev/null' -g wwwadmin -G wwwadmin-s '/dev/null' -c 'WWW working UID' www

Step 3: /etc/passwdと/etc/groupを確認/etc/passwdに次のようなエントリーがあればOK
www:x:80:8080:WWW working UID:/dev/null:/dev/null

Step 4: エントリーを削除したいとき/etc/groupに次のようなエントリーがあればOK＊まちがえて他のエントリーを消さないように注意すること
グループID

wwwadmin:x:8080:www# /usr/sbin/groupdel wwwadmin
ユーザID

Step 5: 作業者をwwwadminグループに加える#/usr/sbin/userdel www

hironobuをwwwadminグループに加える# /usr/sbin/usermod -G wwwadmin hironobu
すべてrootで作業

図4

httpdのディレクトリーの所有者を作業用グループに変更する

Step 1: 所有者をwwwとする
Step 2: グループをwwwadminにする# cd /home/httpd# chown -R www .

# chgrp -R wwwadmin .

Step 3: グループの書き込みを許可する# chmod -R g+rw

346 INTERNET magazine 2000/3

Step 4: ls -lで確認する# ls -altotal 6
drwxrwxr-x
drwxr-xr-x
drwxrwxr-x
drwxrwxr-x
drwxrwxr-x

5 www
5 root
2 www
4 www
2 www

wwwadminroot
wwwadminwwwadminwwwadmin

インターネットマガジン／株式会社インプレスR&D

1024 Apr 22 1999 .
1024 Aug 11 05:25 ..
1024 Dec 23 03:49 cgi-bin
1024 Jun 9 1999 html
2048 Apr 22 1999 icons

cgi（シージーアイ／common gateway interface）：ブラウザーが送った要求に対してWWWサーバー（httpd）が別のプログラム（たとえばcgi-binなど）を起動して、結果をブラウザーに返す処理を行うためのインターフェイス。
©1994-2007 Impress R&D最 小コストで最 大 限 の 不 正 行 為 対 策

作業用のユーザーを作っておくが簡単に特定されてしまうので危険です。そwebmasterにしておくといいでしょう。

こで、適当なメールアドレスを作り、このメServerAdmin webmaster@localhost

ールアドレスから実際の管理者にメールを転HTMLファイルやcgi-binコマンドをメンテ送するようにしましょう。方法としては、ナンスする場合、rootでログインして非常に「/etc/aliases」というファイルにたとえば煩雑な作業するようなことは、間違いも起こ「webmaster」というエントリーを作成してりやすいと言えるでしょう。このため、ウェブおきます。

サーバーのメンテナンス作業用のユーザーとグループを作成しておきましょう。このユーザーは実際にはログインするわけではなく、フ加減を見ながら設定する
ウェブサーバーにしてもそうですが、時間

webmaster:

hironobu@h2np.net（たとえばユーザーhironobu@h2np.netにメールを転送するとき）と手間さえ惜しまなければ、徹底してセキュリティーを追求できます。しかし、徹底したセキュリティーだからいいのかというと、必ずァイルやディレクトリーに対してユーザーのIDこのようにして、外部にはwebmasterのアしもそうではありません。無闇に敷居の高いを割り振るために利用します。また、グルードレスのみを公開します。ウェブサーバーの管セキュリティーを設定しようとすると、自分プは共同作業をしやすくするために作ります。

理者が増えればファイル「/etc/aliases」のでは運用できない範囲のセキュリティーになwebmasterのほうに追加しておきます。ってしまうからです。常にコストとセキュリテ

ここでは「 w w w 」 というユーザーと「wwwadmin」というグループを作成することにします（図3）。

またこのようなエントリーを作ったあとでは、ィーの現実的なバランスを考えましょう。

ウェブサーバーの設定ファイル「/etc/httpd/

次に、ディレクトリー「/home/httpd」とconf/httpd.conf」のサーバー管理者のアドレ

このディレクトリーより下にあるファイルやデスも直接誰かのアドレスを書くのではなく、次回はftpとbindについてお話ししたいと思います。

ィレクトリーの所有者を変更します。初期状
態では所有者はrootになっているはずです。
そこで、ウェブサーバーのメンテナンスをしや

参考1

cgi-binの実行ユーザー権限を変更する

今回説明した状態では、httpdから実行さユーティリティーが有効です。

すくするために、先ほど作成したユーザーれるcgi-binコマンドは常にnobodyのユーザ

suexecを使うためには、Apacheをソース

www を所有者とし、所有者のグループをー権限で実行されてしまいます。このためcgi-コードからコンパイルし、さらにsuexec用のbin経由でファイルに記録する場合などは、フ設定をする必要があります。高機能なcgi-bin

ァイルのオーナーがnobodyになってしまってコマンドを作成する場合は、このsuexecを使不都合が起こることがあります。このような場ってきめ細かい実行ユーザー権限の管理をす定をします（chmod g+w ファイル名）。こ合には、Apacheのソースコードディストリビるように心がけてください。

れでユーザー「hironobu」は、HTMLファイューションに含まれている「suexec」というwwwadminにします（図4）。
最後にグループに対する書き込み許可の設ルやcgi-binコマンドを書き込めるようになります。またディレクトリー「/home/httpd」

参考2

httpdを完全に一般ユーザー権限で動かすより下にあるディレクトリーやファイルを他のRedHat Linuxのインストール初期状態でで指定しておくといいでしょう。このほうユーザーが読めないように設定してしまえば、は、少なくとも1つはrootの実行ユーザー権が複数のApacheを一括管理できて楽にな

nobodyのユーザー権限で実行されている状限で動作するhttpdが必要だと説明しましります。

態のhttpdからは、これらのファイルやディレた。しかし、すべてのhttpdを一般の実行ユまた、ここまで徹底したセキュリティーをクトリーにアクセスできない状態になります。

ーザー権限で動作させておいたほうが、万が考えるならば、ウェブサーバーマシンではメ一のときは安心だと思う方もいるかもしれまールやネームサーバーなど一切のネットワーせん。その場合は、Apacheを別途コンパクサービスを動かさずにウェブサービスのみイルしてインストールする必要があります。に特化するほうが得策でしょう。

連絡先を整理しておく

さらに、インターネットのルーター側でIP最新のディストリビューションはApacheのここまでは実行ユーザー権限に関する設定から入手でき、コンパイマスカレードを行うことによって外部に見えについて解説してきました。今度はメールア

ルもLinux上であれば難しくはありません。

るIPアドレスとポート番号を変更すればセキドレスのエントリーを念のために設定しておApacheのホームとなるディレクトリーを用ュリティーが強化されます。

きましょう。

意しウェブサーバーの管理者のユーザーのメーウェブサイト

./configure --prefix
www.apache.org

ルアドレスを直接公開してしまうと、管理者

インターネットマガジン／株式会社インプレスR&D

グループ：ユーザーに特定の権限を一括して与えるためにユーザーを1まとめにする単位。これによってユーザーの管理がしやすくなる。

©1994-2007 Impress R&D

INTERNET magazine 2000/3347

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.