MacOSX関連:Webサーバー設定ガイド

目次
1. サーバーの起動とホームページのURL
2. ログファイル
3. CGI の設置場所と設置例
4. sendmail
5. 外部からのサーバー管理


 本ノートは,Mac OS X を Web サーバーとして利用するためのガイドです。前提は,あなたが機械の管理者であること,そして,若干のUNIXの知識 の2つです。

*「Mac OS X Server」ではなく「Mac OS X」を前提としています。
 なお,Mac OS X El Capitan (10.11) で動作確認済み。

 また,次のアプリケーション「ターミナル.app(Terminal.app)」を使います。このアプリケーションは,UNIX の端末になります。「Macintosh HD/アプリケーション/ユーティリティ」内にあり,Double-Click すれば起動します。

Terminal.app

次は,ターミナル.app の起動後の画面です。

・・・:~ username$

本ノートでの username とは,上記の「username」を指します。

1. サーバーの起動とホームページのURL

1.1. Webサーバーの起動方法

ターミナル.app を起動し,次のコマンドを実行。
* 太字部分を入力し,リターン。パスワードが要求されるので,あなたのパスワードを入力。

$ sudo apachectl start

1.2. ホームページのURL

URL表示されるファイル
http://127.0.0.1/
http://YourDomainName/
/Library/WebServer/Documents/index.html

* ドメインネームないし固定IPをもつ場合は,それを YourDomainName に。持つか否かにかかわらず,127.0.0.1 は自機からは常時使用可。

1.3. ホームページの作成例

ターミナル.app を開き,次の作業を行いましょう。

$ cd /Library/WebServer/Documents
$ sudo nano first.html

テキストエディタ nano の画面になるでしょう。

  GNU nano 2.0.x     File: first.html                                 



nano(旧 pico)以外にも vivimemacs などのテキストエディタもあります。使い慣れたエディタをお使いください。

次を入力します。

  GNU nano 2.0.x     File: first.html                                 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>はじめてのホームページ</title>
</head>
<body>
<p>私のはじめてのホームページ</p>
</body>
</html>

入力が完了したら,Ctrl+Onanoでの書き込み),Ctrl+xnano終了)とすれば,/Library/WebServer/Documents 内に first.html が作成されます。ブラウザから http://127.0.0.1/first.html にアクセスすると,「私のはじめてのホームページ」と表示されます。

* この例は W3C推奨 HTML 4.01 に準拠しています。作成したページが W3C推奨に準拠するか否かは The W3C MarkUp Validation Service で確認できます。

2. ログファイル

サーバーへの接続記録(ログ)は,/var/log/apache2/access_log に残ります。

ログファイル一覧
サーバーへのアクセス記録/var/log/apache2/access_log
サーバーで発生したエラー記録/var/log/apache2/error_log
システムログ/var/log/system.log

コンソール.app(Macintosh HD/アプリケーション/ユーティリティ内にあるアプリケーション)を使えば,ファインダから見ることができます。

ターミナル.app からもログを確認できます。ターミナル.app を起動し,次の太字部分を入力後,リターンキーを押します。コマンド tail 部分は見たい部分にあわせて,headcat,または grep keyword などに変えて下さい。

$ tail /var/log/apache2/access_log

3. CGI の設置場所と設置例

3.0. CGIモジュール

作業の前に,一度,httpd(Webサーバー)を止めておきましょう。ターミナル.app から次のコマンドを入力します。

$ sudo apachectl stop

/etc/apache2/httpd.conf 内の mod_cgi を,念のため,確認します。

$ grep mod_cgi.so /etc/apache2/httpd.conf
#LoadModule cgi_module libexec/apache2/mod_cgi.so     -> #があったら外す

もし # が付されていたら,ターミナル.app 上で,次の作業を行って外します。

$ cd /etc/apache2
$ sudo cp httpd.conf httpd.conf~orig  # オリジナルをコピー
$ sudo nano httpd.conf  # nano で httpd.conf を開く
                        # エディタは,好みのものをお使いください。
(nano 上の作業)
 Ctrl+w
 mod_cgi.so(改行)
 (#を外す)
 Ctrl+o
 Ctrl+x(nano終了)

/etc/apache2/httpd.conf を修正したら,configuration が正しいか,ターミナル.app から次のコマンドを入力して確認します。

$ sudo apachectl configtest

エラーがなければ,httpd を起動します。

$ sudo apachectl start

3.1. CGI の設置場所

CGI の設置場所は,

/Library/WebServer/CGI-Executables

また,呼び出しは,

http://YourDomainName/cgi-bin/ファイル名

となります。(YourDomainName 部分は,CGI のテストであれば 127.0.0.1 で十分。)

3.2. CGI の設置例

ターミナル.app から,次の作業を行います。

$ cd /Library/WebServer/CGI-Executables
$ sudo nano hello.cgi  # エディタは,好みのものをお使いください。
エディタ(上記の場合,nano)の画面になったら,次を入力します。
#!/usr/bin/perl -w

print "Content-Type: text/html\n\n";
print <<"EOF";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello World!</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
EOF

書き込んでエディタを終了(nano の場合,Ctrl+oCtrl+x)すると,/Library/WebServer/CGI-Executables 内に hello.cgi というファイルが作成されます。ターミナル.app から,次を実行。

$ sudo chmod a+x hello.cgi

作成したスクリプトに文法エラーがなければ,http://127.0.0.1/cgi-bin/hello.cgiHello World! と表示されます。

[注意]スクリプトに文法エラーがあると,Internal Server Error が表示される。文法エラーは,サーバーのエラーログ /var/log/apache2/error_log に記録されるが,ターミナル.app から次を実行すれば直接エラーを読むことができる。
  $ ./hello.cgi
エラーが出た場合,次を確認。
・スクリプトの3行目の \n は,2つです。
・スクリプト内のダブルクォーテーション " やセミコロン ; を正しく入力したか否か。
なお,上記の $ ./hello.cgi で,ループに入った場合には,ターミナル.app で別ウィンドウを開き,次のコマンドを打つことで止めることができます。
  $ sudo killall perl

使わない CGI が出て来たら,実行権を取り除けば良いです。

$ sudo chmod a-x ファイル名

4. sendmail

■sendmail のテスト

ターミナル.app から,次の作業を行います。

$ sendmail username
From: username
To: username
Subject: test
Test.
.

ターミナル.app において,新しいウィンドウを開くと(Cmd+n),"You have a mail." というメッセージがあります。

■sendmail のログ

/var/log/mail.log に記録が残ります。ターミナル.app から

$ tail /var/log/mail.log

と打てば,sendmail の最新のログが読めます。

5. 外部からのサーバー管理

 外部からサーバーに接続して,サーバーを管理することができます。

5.1 リモートコントロール ssh とファイル転送 sftp

 サーバー側のコントロール・パネルの中の「共有」の中の「リモートログイン」をチェックすることで sshd が動きます。これによって外部より ssh での接続,sftp でのファイル転送が可能になります。外部からの接続方法は,ターミナル.app を使います。

$ ssh username@サーバーアドバイス

マニュアルは,ターミナル.app から閲覧できます。

$ man ssh

ssh のアクセス・ログは,/var/log/system.log に残ります。ターミナル.app から次を打てば,sshd のログのみを抽出できます。

$ grep sshd /var/log/system.log
留意点

 ファイア・ウォールの外部にポートを開放すれば,世界中から ssh 接続が可能になり,root などでの接続を試みるアクセスがいずれは増えることでしょう。管理者のアカウントが偶然にも見破られることが全くないとは言い切れません(幸いにも,本研究室ではありませんでしたが)。こうした危険を避けるためには,何かしらの手間,あるいは工夫が必要です。

[例]本研究室での対策例
大学外部にポート22を開放せず,大学に VPN 接続してから研究室のサーバーに ssh 接続(大学がファイア・ウォール)。

[ノート]Mac にも root は存在していますが,初期状態ではパスワードを持っていません。このため,root での ssh 接続は,すべて,失敗に終わります。とは言っても,悪意のあるアクセスが減ることはないでしょう。

5.2 「どこでも My Mac」

 「どこでも My Mac」とは,Apple 社が提供している,2台の Mac 間の画面共有サービスです。iCloud アカウントを使うため,サーバー側の username とパスワードだけでなく,iCloud のアカウントも知らなければ,接続できない構造になっています。iCloud のアカウントとサーバー側の管理者アカウントを異なるものにすることで,セキュリティが増します。設定も含めた詳細は,Apple の HP を参照ください。

留意点

 「どこでも My Mac」は,ポート88(Kerberos authentication system)とポート5900(VNC)の2つのポートを使います。これらのポートをファイア・ウォールの外部に開放しない限り,外部からの接続はできません。