TeX を Web 上で提供する方法

はじめに

TeX を使ってみよう のように,TeX 形式で文章を打ち込めば PDF でダウンロードできるサービスを提供するための方法を解説します。 ぜひ各組織でこのようなサービスを立ち上げていただければ幸いです。

準備

まずサーバが必要です。 通常の Web サーバ上で運用することもできますが,心配なら独立したマシンを調達します。 最近の Pentium/Celeron クラスの PC に Linux や FreeBSD 等を載せれば,うまくすれば数万円でできます。

通常は Linux などをサーバ用にインストールすれば Apache や PHP が入るはずです。 これらについては特に手を加える必要はありません。

もし \ が \\ になるようなら,php.ini で magic_quotes_gpc = Off にしてください。 Mac OS X 10.2 では /usr/lib/php.ini を作ってそこに書き込めばいいようです。 Mac OS X 10.3 では /etc/httpd/httpd.conf の <IfModule mod_php4.c> ... </IfModule> の中に書き込めばいいようです。

pTeX(日本語版 TeX)については,日本語化が十分でないディストリビューションもあるようです。 特に,dvipdfm が日本語化されていないかもしれません。 ソースからコンパイルする方法は以下のページをご参照ください。

セキュリティ上の配慮

以下で $TEXMF と書いた部分は /usr/[local[/teTeX*]/]share/texmf のような名前のディレクトリを意味します。

TeX の設定ファイル $TEXMF/web2c/texmf.cnf が次のようになっていなかったら書き換えます。

% シェルにエスケープさせない
shell_escape = f
% 上位ディレクトリの読み書きを禁じる
openout_any = p
openin_any = p
% 1行めのコメントで TeX の種類を指定する機能を外す
parse_first_line = f

さらに,shell_escape_commands = ... の形で例外的に呼び出せるコマンドを列挙している場合がありますので,これも精査あるいは削除します。

テスト1

次のようなファイルを処理してみてください。 エラーになれば大丈夫です。

\documentclass{article}
\begin{document}
\obeylines
\input /etc/passwd
\end{document}

テスト2

次のようなファイルを処理してみてください。 カレントディレクトリに hoge というファイルができなければ大丈夫です。

\documentclass{article}
\begin{document}
\write18{touch hoge}
\end{document}

参考リンク:Are Text-Only Data Formats Safe?

スクリプトの準備

まず適当な Apache のドキュメントが置ける場所に適当なディレクトリを作ります。 このディレクトリ自体は Apache のプロセスに書き込みができないようにしておきます。

この中に次の二つのファイルを置きます。

また,空のファイル count.txt と空のディレクトリ work を作ります。 これらは Apache のプロセスに書き込みができるようにします(ファイルは 666,ディレクトリは 777 にすればいいでしょう)。

ビットマップフォントの自動生成を許すなら $TEXMF/fonts/pk というディレクトリも Apache のプロセスに書き込みができるようにします。 ただ,今は標準的なフォントは Type 1 形式で用意されていますので,この必要はほとんどありません。 cm-super もインストールしておけばなおさらです。 もっとも,tfm の生成もありますので,$TEXMF/fonts/tfm/jknappen も書き込み可にしておかなければならないでしょう。

do.php の中身は適当に直します(特に teTeX をインストールしたパス)。 次のようになっている部分も必要に応じて直します。 これは処理を10秒,1024Kバイトに制限する場合です。

ulimit -t 10 -f 1024



Last-modified: 2010-05-14 (金) 14:19:08 (77d)