Debian JP Project

(for vocal browsers: toc, main)

Google
WWW 全体 www.debian.or.jp 検索


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]


Debian ポリシーマニュアル
Chapter 11 - プログラムの個々の設定


11.1 アーキテクチャ指定のための文字列

もしプログラムに アーキテクチャを指定するための文字列 が必要な場合には、dpkg-architecture -L で提供される文字列の一つを使うべきです。この文字列は、 os-arch という書式になっています。 OS が Linux である場合には、OS 部分は省略されることがあります。

私たちは、他の Linux ディストリビューションとの互換性をなくすので、 architecture-vendor-os の場所に arch-debian-linux を使わないようにしています。また、unknown は見苦しいので、 arch-unknown-linux も使いません。


11.1.1 アーキテクチャワイルドカード

パッケージは、アーキテクチャワイルドカードを指定することができます。 アーキテクチャワイルドカードは、ant (全アーキテクチャにマッチします)、 os-any, または any-cpu の形式 [100] をとります。


11.2 デーモン類

設定ファイルのうち、/etc/services/etc/protocols/etc/rpcnetbase パッケージで管理されます。 ほかのパッケージはこれらに修正を加えてはいけません。

パッケージの都合でこれらのファイルに新エントリが必要な場合には、 メンテナは netbase パッケージのメンテナに連絡を取って、エントリを加えた新しい netbase パッケージをリリースしてもらうべきです。

設定ファイル /etc/inetd.confupdate-inetd スクリプトか、DebianNet.pm Perl モジュールを介さずにパッケージスクリプトから変更してはいけません。 エントリの追加に関してはそれらの説明文書を参照ください。

パッケージから /etc/inetd.conf に設定例としてエントリを挿入したい場合には、対象となるエントリは最初に一つだけのコメントキャラクタ (#) を置いてください。 そのように書かれた行は update-inetd からは『ユーザによってコメントアウトされた行』 として扱われ、変更されたりパッケージ更新時に有効化されたりすることはありません。


11.3 仮想 tty の使用、wtmp、utmp、lastlog 等の更新

一部のプログラムでは仮想 tty の作成が必要になります。これは C ライブラリのサポートがあれば Unix98 pty を使うことで実現できます。 このようなプログラムは、ほかの機能実現のために必要でなければ、 (仮想 tty の作成のためだけに) root に setuid してはいけません。

/var/run/utmp/var/log/wtmp/var/log/lastlog はグループ utmp に対して書き込み可能なようにインストールしなければなりません。 また、これらのファイルに書く必要があるプログラムは utmp に setgid してインストールしてください。


11.4 エディタとページャ

エディタやページャを、テキスト文書の編集や表示に使うプログラムがあります。 Debian ディストリビューションで利用できるエディタやページャにはたくさんの種類があるので、 システム管理者とユーザが好みのエディタとページャを選択できるようにすべきです。

さらに、各々のプログラムは、ユーザまたはシステム管理者が特定の選択を行っていない場合には、適切な標準のエディタとページャを選択すべきです。

上記の理由で、エディタやページャを利用する各プログラムは、 EDITOR および PAGER 環境変数を利用してエディタとページャを決めなければいけません。 これらの値が設定されていなければ、プログラムは /usr/bin/editor/usr/bin/pager を利用するようにすべきです。

これら 2 つのプログラムは dpkg の代替パッケージ機能 (alternatives) を通して管理されています。 このため、エディタとページャ機能を提供する各プログラムは update-alternatives スクリプトを呼んで、自分を /usr/bin/editor または /usr/bin/pager の適切な方の代替プログラムとして登録しておかなければいけません。 代替処理では、/usr/share/man/man1/editor.1.gz または /usr/share/man/man1/pager.1.gz が対応 man ページを指すよう、副代替指定 (slave alternative) を行うべきです。

EDITOR、PAGER 環境変数を参照して動作するようプログラムを修正するのが困難な場合は、 /usr/bin/sensible-editor/usr/bin/sensible-pager をエディタ及びページャのプログラムとして使うように設定してもかまいません。 これらは sensible-utils パッケージで提供されるスクリプトで、自動的に EDITOR と PAGER の各環境変数を調べて適当なプログラムを起動し、環境変数が未設定なら /usr/bin/editor/usr/bin/pager を起動します。

プログラムはユーザの好みのエディタを判断するのに VISUAL 環境変数を用いてもかまいません。この環境変数が定義されているならば、 EDITOR による設定より優先させるべきです。 /usr/bin/sensible-editor でもこの処理が行われています。

パッケージは editorpager に依存する必要はなく [101] 、パッケージからこの二つの仮想パッケージを提供する必要もありません。


11.5 Web サーバとアプリケーション

この節では Debian システムでの全ての web サーバと web アプリケーションから利用すべき場所 (ディレクトリ) といくつかの URL を説明します。

  1. cgi-bin 実行ファイルは次のディレクトリ、またはそのサブディレクトリにインストールしてください。

         /usr/lib/cgi-bin/cgi-bin-name
    

    そして次のようにして参照できるように

         http://localhost/cgi-bin/cgi-bin-name
    

    (または、cgi-bin-name の前にサブディレクトリ名がついたものに) 設定するべきです。

  1. (削除)

  1. 画像へのアクセス

    パッケージで使用する画像は、 /usr/share/images/package に格納し、 /images/ のエイリアスを用いて

                           http://localhost/images/<package>/<filename>
    

    として参照できるようにすることを推奨します。

  1. Web 文書ルートディレクトリ

    web アプリケーションは Web 文書ルートディレクトリにファイルを置かないように努めてください。 代わりに、文書類には /usr/share/doc/package ディレクトリを用い、doc-base パッケージ経由で web アプリケーションとして登録するべきです。 どうしても Web 文書ルートディレクトリを使わざるをえない場合には、

         /var/www
    

    を Web 文書ルートディレクトリとして使ってください。 これは、システム管理者が実際の Document Root として設定した場所へのシンボリックリンクかもしれません。

  1. httpd や httpd-cgi を提供すること

    ウェブサーバは、仮想パッケージ httpd を提供すべきです。ウェブサーバが CGI をサポートしている場合、 さらに仮想パッケージ httpd-cgi を提供すべきです。

    CGI スクリプトを含まないウェブアプリケーションは、httpd に依存すべきです。また、CGI スクリプトを 実際に 含むウェブアプリケーションは、 httpd-cgi に依存すべきです。


11.6 メール配送、配信、ユーザエージェント

電子メールを扱う Debian パッケージは、それがメールユーザエージェント (mail-user-agents、MUA) またはメール配送エージェント (mail-transport-agents、MTA) のいずれであれ、下記の設定基準に準拠していることを確認してください。 これが満たされない場合はメールを失ったり、From: 行がおかしかったり、他の流血の惨事を引き起こすかもしれません。

FHS に記載の通り、メールスプールは /var/mail であり、メールを送るインターフェースプログラムは /usr/sbin/sendmail です。 以前のシステムでは、メールスプールは物理的に /var/spool/mail に置き、すべてのメールスプールのアクセスを /var/mail シンボリックリンクを介して行っていた場合もありました。 メールスプールは基本システム (Base System) の 一部で、MTA パッケージの一部ではありません。

Debian システムの MUA、MTA、MDA およびその他のメールボックスを参照するプログラム (IMAP デーモンなど) はすべて NFS 環境下で安全な方法を使ってファイルロックを行わなければいけません。 すなわち、fcntl() によるロックはドットファイルによるロックと併用しなければなりません。 デッドロックを避けるため、プログラムではまず fcntl() を使って、その次にドットファイルロックを使うか、二つのロックをブロックしないやり方 [102] で使うべきです。 liblockfile*パッケージ [103] に含まれる maillockmailunlock を使うのが上記を実現するお勧めのやり方です。

メールボックスは、通常は user 所有でモード 600 か、user:mail 所有でモード 660 のいずれかとします [104]。 ローカルのシステム管理者は、これと異なったパーミッション手法をとることができます。 このため、パッケージは特定の要求 (例えば新規にメールボックスを作成するなど) がない限り、メールボックスのパーミッションと所有者について仮定を置くべきではありません。 MUA は必要に応じてメールボックスを削除してもかまいません (特殊なパーミッションになっていない場合)。 その場合には MTA や ほかの MUA は必要に応じてメールボックスを再作成しなければなりません。

メールスプールディレクトリは 2775 root:mail で、MUA は上記のロックを取得するため mail に setgid されているべきです。 当然、この特権を使って他の人のメールボックスにアクセスすることは避けなければなりません。

/etc/aliases がシステムのメールエイリアス (例えば、postmaster、usenetなど) が記載されたソースファイルで、システム管理者と postinst スクリプトからの編集が許されています。/etc/aliases をプログラムから、あるいは人手で編集した後には newaliases コマンドを呼び出さなければなりません。 全ての MTA パッケージは (実際には何もしないものであったとしても) newaliases プログラムを同梱していなければなりませんが 古い MTA パッケージにはこれがないものもありますので、たとえ newaliases が見つからなくてもプログラムが落ちな いようにするべきです。また、このため、全 MTA パッケージは mail-transport-agent 仮想パッケージに対して ProvidesConflictsReplaces: mail-transport-agent の三つの関連性の定義をコントロールフィールド中で行う必要があります。

メールボックスに転送先のアドレスを書く仕組みはサポートされていません。 代わりに .forward ファイルを使ってください。

UUCPで使われる rmail プログラムは /usr/sbin/rmail にしてください。同様に batch-SMTP-over-UUCP を受け取る rsmtp は、サポートされている場合は、/usr/sbin/rsmtp に置くべきです。

パッケージで、ローカルで作成された外部へのニュースやメールのメッセージに対して使う名前 (など) が必要な場合は、/etc/mailname ファイルを使うべきです。 そのファイル中にはそのマシンのユーザのメールアドレスとして、ユーザ名と @ の後に続く部分が書かれています (最後に改行が入ります)。

このようなパッケージはこのファイルの存在をチェックしなければなりません。 そのファイルが存在すれば、それ以上の質問なしにそのファイルを使ってください (MTAの設定スクリプト中では、このファイルが存在している場合にこれを使うかどうかの質問をしてもかまいません)。 このファイルが存在しなければ、パッケージの設定中にユーザに /etc/mailname に書くべき内容を問い合わせ (debconf を使うのが好ましいです)、その内容を書いてください。 ここでの問い合わせでは、今問い合わせている名前は、 ここで問い合わせを行っているパッケージだけで使うものではないことがはっきり分かるように質問を行うよう留意してください。 例えば、inn パッケージでは次のように質問しています。

     Please enter the "mail name" of your system.  This is the
     hostname portion of the address to be shown on outgoing
     news and mail messages.  The default is
     syshostname, your system's host name.  Mail
     name ["syshostname"]:

ここで syshostnamehostname --fqdn の出力結果です。


11.7 ニュースシステムの設定

NNTP (ニュース) サーバやクライアントに関係した設定ファイルはすべて /etc/news 以下に置かなければなりません。

一台のマシン上での複数のニュースクライアントやサーバパッケージで用いる設定上の留意点があります。 それらを次に説明します。

/etc/news/organization

当該マシンの NNTP クライアントから投稿された記事の Organization ヘッダに現れる (べき) 文字列を格納します。

/etc/news/server

上流の NNTP サーバの FQDN が書かれています。 自分自身がニュースサーバでもある場合には localhost と書かれています。

そのほかのパッケージ間で使用するニュース関連の設定は必要に応じて適宜追加してください。


11.8 X ウィンドウシステム用のプログラム


11.8.1 X サポートの提供とパッケージプライオリティ

X ウィンドウシステムに対応するよう構成可能なプログラムは X ウィンドウシステムへのサポートを含むように構成しなければいけません。 そして X ウィンドウシステム下で使用する際、実行時に必要な依存関係を満たすようにパッケージ依存関係を宣言しなければいけません。 また、このパッケージがそれが依存する X パッケージより高いプライオリティでインストールされる場合 (対象となるパッケージが standard またはより高いプライオリティでインストールされるものである場合) には、X 関連の部分を別パッケージに分離するか、X をサポートした別版のパッケージを作成するか、 パッケージのプライオリティを下げるかの何れかの対処を行う必要があります。


11.8.2 X サーバを提供するパッケージ

X サーバを提供するパッケージ、言い換えると直接または間接に実際の入力機器と表示ハードウェアを操作するパッケージは Provides コントロールフィールド中に仮想パッケージ xserverを提供することを [105] 宣言すべきです。


11.8.3 ターミナルエミュレータを提供するパッケージ

以下で記載する条件を満たすターミナルエミュレータを提供するパッケージは、Provides コントロールフィールド中に仮想パッケージ x-terminal-emulator を提供することを宣言すべきです。 また、このようなパッケージはまた自分自身をプライオリティ 20 で /usr/bin/x-terminal-emulator の代替とするよう宣言するべきです。代替パッケージでは、 /usr/share/man/man1/x-terminal-emulator.1.gz が対象マニュアルページを指すよう、副代替指定 (slave alternative) を行うべきです。

x-terminal-emulator であるためには、プログラムは次の条件を満たさなければいけません


11.8.4 ウィンドウマネージャを提供するパッケージ

ウィンドウマネージャを提供するパッケージは、Provides コントロールフィールド中に仮想パッケージ x-window-manager を提供することを宣言すべきです。 このようなパッケージはまた自分自身を次に説明するプライオリティで /usr/bin/x-window-manager の代替とするよう宣言するべきです。

代替パッケージでは、 /usr/share/man/man1/x-window-manager.1.gz が対象マニュアルページを指すよう、副代替指定 (slave alternative) を行うべきです。


11.8.5 フォントを提供するパッケージ

X ウィンドウシステムのフォント [107] を提供するパッケージでは X およびフォントサーバの変更なしにそれが有効になるように、また自分自身の情報を登録する際に他のフォントパッケージの情報を壊さないようにするため、いくつかの作業を行う必要があります。

  1. X ウィンドウシステムでサポートされるフォントはどの種類のものでもプログラムやライブラリや説明文書 (ライセンス情報など、そのフォントに対するものはのぞいて) とは別のバイナリパッケージにしなければいけません。 もし、あるパッケージが (別パッケージで) パッケージングされた一つないし複数のフォントを適切な動作のために必要とするなら Recommended を、単に拡張機能を提供するだけなら Suggests を問題のフォントパッケージに指定してください。 パッケージからフォントパッケージに対して Depend を指定してはいけません [108] 。

  1. BDF フォントは xutils パッケージ収録の bdftopcf ユーティリティを使って PCF フォントに変換し、gzip で圧縮し、解像度に応じたディレクトリに置かなければいけません。

    • 100 dpi のフォントは /usr/share/fonts/X11/100dpi/ に置かなければいけません。

    • 75 dpi のフォントは /usr/share/fonts/X11/75dpi/ に置かなければいけません。

    • 絵文字フォント、カーソルフォントやそのほかの低解像度のフォントは /usr/share/fonts/X11/misc/ に置かなければいけません。

  1. Type 1 フォントは /usr/share/fonts/X11/Type1/ に置かなければいけません。 もしメトリックファイルが提供されているなら、それも同じディレクトリに置かなければいけません。

  1. 上記で並べられた以外の /usr/share/fonts/X11/ 以下のサブディレクトリを作成したり使ったりしてはいけません。 PEXCIDSpeedocyrillic ディレクトリは歴史的経緯で例外扱いされていますが、これらディレクトリ中にファイルをインストールすることはやはり避けたほうがいいでしょう。

  1. フォントパッケージは上記の X フォントディレクトリに直接ファイルをおかず、 ファイルシステム中の実際の場所を指すシンボリックリンクをフォントディレクトリに置くようにしてもかまいません。 この場合、実際にフォントを置く場所は FHS 準拠の場所にしてください。

  1. フォントパッケージに 75dpi と 100dpi の両バージョンのフォントを収録すべきではありません。 もし両方の解像度のものがあるなら、そのフォントを収録したパッケージ名に -75dpi-100dpi とを付けた独立のバイナリパッケージを提供してください。

  1. misc サブディレクトリに収録されるフォントは、同じパッケージ中に 75dpi や 100dpi のフォントを収録していてはいけません。 その代わりに、そのフォントを収録したパッケージ名に -misc を付けた独立のバイナリパッケージを提供してください。

  1. フォントパッケージはフォントディレクトリ中に fonts.dirfonts.alias 及び fonts.scale の各ファイルを収録してはいけません。

    • fonts.dir ファイルはどのような形でも収録してはいけません。

    • fonts.aliasfonts.scale ファイルは必要なら /etc/X11/fonts/fontdir/package.extension ディレクトリに収録すべきです。ここで fontdir は関連フォントが収録される /usr/share/fonts/X11/ 以下のサブディレクトリ名 (つまり、75dpimisc など) で、package はそのフォントを収録したパッケージの名前です。 また、extension はファイルの内容に従い scalealias のどちらかになります。

  1. フォントパッケージは xfonts-utils への依存関係を Depends または Pre-Depends コントロールフィールドに宣言しなければいけません。

  1. 一つまたは複数の fonts.scale ファイルを収録するフォントパッケージでは、フォントをインストールした各ディレクトリで、 update-fonts-dir実行する前update-fonts-scale を当該ディレクトリに対して 実行しなければいけません。 この実行の起動は postinst (全引数で) と postrm (upgrade 以外の引数で) の両方で行わなければいけません。

  1. 一つまたは複数の fonts.alias ファイルを収録するフォントパッケージでは、フォントをインストールした各ディレクトリで update-fonts-alias を実行しなければいけません。 この実行の起動は postinst (全引数で) と postrm (upgrade 以外の引数で) の両方で行わなければいけません。

  1. フォントパッケージでは、フォントをインストールした各ディレクトリで update-fonts-dir を実行しなければいけません。 この実行の起動は postinst (全引数で) と postrm (upgrade 以外の引数で) の両方で行わなければいけません。

  1. フォントパッケージは、既にパッケージ化されている他のフォントで使用しているエイリアス名と衝突するエイリアス名でフォントを収録してはいけません。

  1. フォントパッケージは、既にパッケージ化されている他のフォントと同じ XLFD レジストリ名でフォントを収録してはいけません。


11.8.6 アプリケーションの標準設定ファイル

アプリケーション標準設定ファイルは /etc/X11/app-defaults/ にインストールしなければいけません (X Toolkit Intrinsics - C Language Interface マニュアル記載のように /etc/X11/ 下のサブディレクトリをローカルに使用することは許されます)。 これらは conffile であるとの属性を設定するか、設定ファイルとして扱わなければいけません。

X リソースを使ったプログラムの設定も /etc/X11/Xresources/ に置くパッケージと同じ名前のファイルを用意することで [109] サポートされています。このファイルは、conffile であるとの属性を設定するか、設定ファイルとして扱わなければいけません。


11.8.7 インストール対象ディレクトリに関する事項

歴史的には、X ウィンドウシステムを用いるパッケージは他のパッケージと独立したインストールディレクトリ群を用いていました。 このような運用は打ち切られ、X ウィンドウシステムを用いるパッケージは、一般的には他のパッケージと同じディレクトリにインストールされるようになっています。 特に、パッケージは /usr/X11R6/ 以下にファイルをインストールするよう設定してはいけません。 /usr/X11R6/ ディレクトリ階層は、 廃止になったと見なしてください。

以前 /usr/X11R6/include/X11/ にヘッダファイルをインストールしていたパッケージは、 /usr/include/X11/ にインストールを行うよう変更すべきです。以前 /usr/X11R6/lib/X11/ 以下のサブディレクトリにインストールを行っていた場合には、パッケージメンテナは /usr/lib//usr/share/ の何れかのサブディレクトリにインストールすることができるかを判断してください。 いずれも不適当な場合は、/usr/lib/X11/ 以下のサブディレクトリを使うべきです。

ウィンドウ、ディスプレイ、セッションマネージャや、それ以外でも X ウィンドウシステムに密接に統合されたアプリケーションについては、 /etc/X11/ 以下、対応するパッケージ名に合わせたサブディレクトリを利用することができます。 他の X ウィンドウシステムアプリケーションでは、ポリシィ制限 (例えば アプリケーションの標準設定ファイル, Section 11.8.6) などで必須となる場合を除いては、 /etc/ ディレクトリを用いてください。


11.9 Perl プログラムとモジュール群

Perl プログラムとモジュールは、現在の Perl ポリシーに従うべきです。

この Perl ポリシーは debian-policy パッケージに perl-policy ファイルとして同梱されています。また、 Debian ウェブミラーサイト /doc/packaging-manuals/perl-policy/ にもあります。


11.10 Emacs lisp プログラム

emacs lisp プログラムをパッケージングする際には『Debian Emacs Policy』を参照ください。

この Emacs Policy は emacsen-common パッケージに debian-emacs-policy.gz という名で収録されています。 また、Debian ウェブミラーサイトの /doc/packaging-manuals/debian-emacs-policy にも置かれています。


11.11 ゲーム

/var/games のパーミッションはモード 755、所有者 root、グループ root です。

各ゲームは個々にセキュリティ方針を決めてかまいません。

ハイスコアファイル、保存ファイルなどの保護され、アクセスに特権 が必要なファイルを持つゲームは、オーナ・グループを root:games にして 2755 で set-gid しておき、ファイルとディレクトリには適当なパーミッション (例えば、770 root:games) を与えてもかまいません。 set-user-id はセキュリティ上の問題が起きるのでしてはいけません (アタックする人は set-user-id されたゲームを破ることができたら、そのファイルを他の実行ファイルで上書きし、ほかのプレイヤーがトロイの木馬を実行してしまうことになります。 set-gid されたゲームでは、アタッカーはあまり重要ではないゲームのデータだけにアクセスできるようになるだけで、 ほかのプレイヤーのアカウントを手にいれることができるとしても、それには更にかなりの労力を費すことになるでしょう)。

一部のパッケージ、例えば fortune cookie プログラムでは、データファイルやその他の静的な情報を読み込み不可でインストールし、提供される set-id されたプログラムによってのみアクセスできるように、上流の開発者が設定しています。 このようなことを Debian パッケージでやるべきではありません。 なんとなれば誰でも .deb ファイルをダウンロードしてきて中身を読むことができますから、読み込み不可のファイルを使っても無意味なためです。 また、読み込み不可のファイルを作らないことは set-id されたプログラムをたくさん作る必要がなくなることを意味しますし、それによりセキュリティホールのリスクを減らすことにもなります。

FHS で規定されているように、ゲームのバイナリは /usr/games にインストールしてください。 X ウィンドウシステムを使うゲームもここに入れてください。 ゲームのマニュアル (X 用、X 不使用の両方とも) は /usr/share/man/man6 にインストールしてください。


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]


Debian ポリシーマニュアル

バージョン 3.9.5.0, 2014-07-03

The Debian Policy Mailing List