ユーティリティ設定

前回までの設定でOSをパブリックネットワークに公開しても、比較的安全を保てるように設定しました。

次は、デフォルト状態よりも便利に使うための設定を行いたいと思います。

電源を落とすための設定

スーパーユーザーであれば、電源を落としたり、リブートするためのコマンドを入力することは簡単ですが、OS管理には興味がなく、通常は放置しているサーバーをリブートするときだけ shutdown コマンドの使い方を思い出すのは苦痛でしょう。そのために電源停止と再起動専用のアカウントを設置することにします。

電源停止用・再起動用アカウント

/root の下に bin ディレクトリを作成し、その下に電源停止用の shut コマンドと、再起動用の reboot コマンドを作ります。そして、パーミッションを 750 で設定します。最後に、/etc/passwd ファイルに shut と reboot ユーザーを追加します。
shut と reboot にはパスワードを付けません。shut でログインしたらいきなり電源が停止しますし、reboot ならば再起動します。ただし、このアカウントにはコンソールからしかログインできなくなっています。

mkdir /root/bin

</root/bin/shut>
#!/bin/sh
/sbin/shutdown -p now

</root/bin/reboot>
#!/bin/sh
/sbin/shutdown -r now

chmod 750 /root/bin/shut /root/bin/reboot

</etc/passwd>
shut:*:0:0:shutdown account:/root:/root/bin/shut
reboot:*:0:0:shutdown account:/root:/root/bin/reboot

<etc/group>
operator:*:5:root,shut,reboot

この設定を行った後は、管理者以外であっても、FreeBSDサーバーのキーボードを直接操作できる人であれば簡単にシャットダウンを行うことができるようになります。

Webページアクセスログ

本サーバーの構築目的はWebサーバーですから、運営者としてはどんな人がどんなページをアクセスしているのか知りたいはずです。幸いWordPressのプラグインには統計情報を提供してくれるものがありますので、Wordpress 設定後に適切なプラグインを入れれば目的の半分は達成です。

私の好みとしては、

  • Jetpack by wordpress.com
  • Statpress Visitors

があります。前者はWordPressが提供しているユーティリティです。後者は検索エンジンの検索ワードとアクセスページの対応がわかるように表示してくれるのが便利です。
これらのプラグインでサイト全体への大雑把なアクセス動向を把握することは出来ますが、利用者一人一人がどいう動きをするのかを把握するには少し難があります。

ということで、Apacheのアクセスログから、必要なポイントだけ切り出すスクリプトを作って、cgi-bin の下に置くことにします。そのために、/home/wordpress/cgi-bin/ の下に置いた”.cgi”拡張子のCGIが動くように httpd.conf を再度編集します。

#LoadModule suexec_module libexec/apache24/mod_suexec.so
LoadModule cgi_module libexec/apache24/mod_cgi.so  # コメントを解除
#LoadModule cgid_module libexec/apache24/mod_cgid.so

コメントアウトした後に Apache を再起動します。
設定に問題がないかどうかは、apacheに付属しているcgiを、コピーして動かしてみれば確認できます。

cp /usr/local/www/apache24/cgi-bin/test-cgi /home/wordpress/cgi-bin/
cd /home/wordpress/cgi-bin/
chmod 755 test-cgi

test-cgi の第一行目を編集して、

#!/bin/sh

を追加します。セキュリティー強化のために、デフォルトではコマンドパスを外してあるようです。

#!/bin/sh

# To permit this cgi, replace # on the first line above with the
# appropriate #!/path/to/sh shebang, and set this script executable
# with chmod 755.
#

その後、http://wordpress server name/cgi-bin/test-cgi をアクセスして、以下のように変数が表示されれば完了。これで、ユーザーが作成するCGIが

CGI/1.0 test script report:

argc is 0. argv is .

SERVER_SOFTWARE = Apache/2.4.6 (FreeBSD) PHP/5.4.17
SERVER_NAME = wordpress.lifewithunix.jp
GATEWAY_INTERFACE = CGI/1.1
SERVER_PROTOCOL = HTTP/1.1
SERVER_PORT = 80
REQUEST_METHOD = GET
HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
PATH_INFO = 
PATH_TRANSLATED = 
SCRIPT_NAME = /cgi-bin/test-cgi
QUERY_STRING = 
REMOTE_HOST = pc100.lifewithunix.jp
REMOTE_ADDR = 192.168.1.100
REMOTE_USER =
AUTH_TYPE =
CONTENT_TYPE =
CONTENT_LENGTH =

テスト後、動作確認用CGIスクリプトは削除します。

次にhttp-access.logを処理する簡単なスクリプトを書きます。

#!/bin/tcsh

set accesslog=/home/wordpress/log/httpd-access.log

echo "Content-type: text/html"
echo
echo "<html><head><title>Log View</title></head><body><pre><tt>"
date
echo

tail -8000 $accesslog | awk ' ($7 ~/\.html/ || $7 ~/\.cgi/ || $7 ~/\/$/ || $7 ~/\.php/ || $7 ~/\.shtml/ || $7 ~/\.txt/ || $7 ~/\.gz/ || $7 ~/\.xml/) {print $4"]",$2,$3,$1," ",$6,$7,$8,$9,$10," ",$11}' | tail -600 | sort | cat -n

echo "</tt></pre></font>"
echo "</body></html>"

大したスクリプトではありません。10行目くらいにある tail コマンドで始まる行が全てです。
tail で始めているのは、通常見たいのは最新のアクセスログだからです。アクセスログの頭の方を処理するのは無駄なので、ログ後方8000行だけを処理しています。そしてグラフィックスファイルなどは無視し、ページとして認識されるファイル拡張子とホスト情報、リファラーだけを抜き出して、600行分時系列に並べて表示します。

このスクリプトを access.cgi というファイル名で、cgi-bin ディレクトリの下に保存し、実行形式を与えてアクセスログを確認するためのCGI作成は完了です。実行すると次のようになります。

Thu Dec 12 14:36:59 JST 2013

     1	[07/Dec/2013:11:21:54] - - pc17.lifewithunix.jp    "GET / HTTP/1.1" 302 -       "-"
     2	[07/Dec/2013:11:21:55] - - pc17.lifewithunix.jp    "GET /wp-admin/install.php HTTP/1.1" 200 4392       "-"
     3	[10/Dec/2013:15:58:43] - - pc17.lifewithunix.jp    "GET / HTTP/1.1" 302 -       "-"
     4	[10/Dec/2013:15:58:43] - - pc17.lifewithunix.jp    "GET /wp-admin/install.php HTTP/1.1" 200 4392       "-"
     5	[10/Dec/2013:16:39:39] - - pc17.lifewithunix.jp    "GET / HTTP/1.1" 302 -       "-"
     6	[10/Dec/2013:16:39:39] - - pc17.lifewithunix.jp    "GET /wp-admin/install.php HTTP/1.1" 200 4392       "-"
     7	[11/Dec/2013:14:58:02] - - pc17.lifewithunix.jp    "GET / HTTP/1.1" 302 -       "-"
     8	[11/Dec/2013:14:58:05] - - pc17.lifewithunix.jp    "GET /wp-admin/install.php HTTP/1.1" 200 4392       "-"
     9	[11/Dec/2013:20:29:07] - - pc17.lifewithunix.jp    "GET / HTTP/1.1" 302 -       "-"
    10	[11/Dec/2013:20:29:09] - - pc17.lifewithunix.jp    "GET /wp-admin/install.php HTTP/1.1" 200 4392       "-"
    11	[12/Dec/2013:13:36:42] - - pc17.lifewithunix.jp    "GET /cgi-bin/ HTTP/1.1" 404 1089       "-"
    12	[12/Dec/2013:13:37:08] - - pc17.lifewithunix.jp    "GET /cgi-bin/printenv.cgi HTTP/1.1" 200 820       "-"
    13	[12/Dec/2013:13:38:22] - - pc17.lifewithunix.jp    "GET /cgi-bin/printenv.cgi HTTP/1.1" 200 834       "-"
    14	[12/Dec/2013:13:44:33] - - pc17.lifewithunix.jp    "GET /cgi-bin/printenv.cgi HTTP/1.1" 200 1537       "-"

 

関連項目