11.6 SUSE Linuxの特別な機能

CUPSの多くの機能は、SUSE Linuxで使用できるように調整されています。ここでは、最も重要な変更点について説明します。

11.6.1 CUPSサーバとファイアウォール

CUPSをネットワークサーバのクライアントとして設定するには、複数の方法があります。

  1. ネットワークサーバ上のキューごとに、すべてのジョブを対応するネットワークサーバに転送するときに使用するローカルキューを設定できます(転送キュー)。ネットワークサーバの設定に変更があるたびに、すべてのクライアントマシンの再設定が必要になるため、通常、この方法はお勧めしません。

  2. 印刷ジョブを1つのネットワークサーバに直接転送することもできます。このタイプの設定では、CUPSデーモンを実行しないでください。lp(または他のプログラムの対応ライブラリコール)により、ジョブをネットワークサーバに直接送信できます。ただし、ローカルプリンタで印刷する必要がある場合、この設定は機能しません。

  3. CUPSデーモンは、使用可能なキューを通知するために他のネットワークサーバから送信されるIPPブロードキャストパケットをリスニングできます。

    これは、リモートCUPSサーバを介した印刷に最適のCUPS設定です。ただし、攻撃者がキューと共にIPP ブロードキャストを送信し、ローカルデーモンが偽のキューにアクセスする危険性があります。その場合、問題のキューがローカルサーバ上の別のキューと同じ名前で表示されると、ジョブが実際には攻撃者のサーバに送信されているのに、ジョブの所有者はローカルサーバに送信されていると考える可能性があります。

YaSTは、すべてのネットワークホストをスキャンして、このサービスが提供されているかどうかを確認するか、またはIPPブロードキャストをリスンして、CUPSサーバを検索できます。これには、ポート631/UDP(サービスIPPクライアント)上の着信パケットの通過を可能にするファイアウォールが必要です。このファイアウォールは、内部のファイアウォールゾーン内にマシンを設定すると、自動的に有効になります。外部ゾーンでポートをオープンしてリモートキューへのアクセスを設定する操作には、セキュリティ上のリスクを伴います。これは、ユーザが受け入れるサーバを攻撃者がブロードキャストする可能性があるからです。デフォルトでは、IPPブロードキャストは外部ゾーンで拒否されます。ファイアウォール設定の詳細については、4.1.4.1項 「YaSTによる設定」を参照してください。

または、ユーザがローカルネットワークホストをスキャンするか、すべてのキューを手動で設定することにより、CUPSサーバを検出することもできます。ただし、このセクションの始めのほうで述べられている理由から、この方法はお勧めしません。

11.6.2 CUPS印刷サービスの変更点

これらの変更は、初めにSUSE Linux 9.1に適用されました。

11.6.2.1 lpユーザとしてのcupsdの実行

起動時に、cupsdrootユーザからlpユーザへの切り替えを行います。これは、セキュリティをより高いレベルに引き上げます。CUPS印刷サービスは、無制限のパーミッションを使用する代わりに、印刷サービスで必要とされるパーミッションだけを使用して動作するためです。

しかし、認証(より正確に表現すると、パスワードのチェック)は、/etc/shadowを介して実行することはできません。lpには、/etc/shadowへのアクセス権がないためです。代わりに、/etc/cups/passwd.md5を介したCUPS特有の認証を使用する必要があります。この目的で、CUPS管理グループであるsysに所属していて、CUPSパスワードの割り当てを受けたCUPS管理者を、/etc/cups/passwd.md5ファイル内に記述する必要があります。この作業を行うには、rootとして、次のコマンドを入力します。

lppasswd -g sys -a CUPS-admin-name

この設定は、CUPS管理WebフロントエンドまたはKDEプリンタ管理ツールを使用して管理を行う場合にも重要です。

lpcupsdを実行した場合、/etc/printcapを生成することはできません。lpは、/etc/直下にファイルを作成することを許可されていないためです。そのため、cupsd/etc/cups/printcapを生成します。アプリケーションが/etc/printcapからキュー名の読み取りのみを実行して引き続き正常に動作できることを保証するために、/etc/printcapは、/etc/cups/printcapを指すシンボリックリンクになっています。

lpcupsdを実行した場合、ポート631をオープンすることはできません。そのため、rccups reloadを使用してcupsdを再ロードすることはできません。代わりに、rccups restartを使用してください。

11.6.2.2 BrowseAllowBrowseDenyの一般化された機能

BrowseAllowBrowseDenyに対して設定されたアクセスパーミッションは、cupsdに対して送信されたすべてのタイプのパッケージに適用されます。/etc/cups/cupsd.conf内にあるデフォルトの設定値は、次のとおりです。

BrowseAllow @LOCAL
BrowseDeny All

および

<Location />
  Order Deny,Allow
  Deny From All
  Allow From 127.0.0.1
  Allow From 127.0.0.2
  Allow From @LOCAL
</Location>

この方法では、LOCALホストだけが、CUPSサーバ上のcupsdにアクセスできます。LOCALホストとは、PPPインタフェース以外(より正確に表現すると、IFF_POINTOPOINTフラグがセットされていないインタフェース)に所属するIPアドレスを使用し、そのIPアドレスがCUPSサーバと同じネットワークに所属しているホストのことです。他のすべてのホストから着信したパケットは、即座に拒否されます。

11.6.2.3 cupsdがデフォルトで有効化

標準的なインストールでは、cupsdは自動的に有効になり、追加で手動の操作を行うことなく、CUPSネットワークサーバのキューに対して適切にアクセスすることができます。この機能を使用するには、11.6.2.1項 「lpユーザとしてのcupsdの実行」および11.6.2.2項 「BrowseAllowBrowseDenyの一般化された機能」内の項目が必須の前提条件になります。それらが満たされていない場合、cupsdを自動的に有効にする状況で、セキュリティが不十分になります。

11.6.3 各種パッケージ内のPPDファイル

YaSTのプリンタ設定機能は、システムの/usr/share/cups/model/内に記述されたPPDファイルのみを使用して、CUPS用のキューをセットアップします。プリンタモデルに適したPPDファイルを決定するために、YaSTはハードウェア検出の際に判断されたベンダおよびモデルを、システムの/usr/share/cups/model/内で使用可能なすべてのPPDファイル内にあるベンダおよびモデルと比較します。この目的で、YaSTのプリンタ設定機能は、PPDファイルから抽出したベンダおよびモデルの情報に基づいて、データベースを生成します。ベンダおよびモデルのリストから特定のプリンタを選択した場合、そのベンダおよびモデルに対応するPPDファイルを受け取ることになります。

PPDファイルのみを使用し、他の情報ソースを使用しない設定には、/usr/share/cups/model/内のPPDファイルを自由に変更できるという利点があります。YaSTのプリンタ設定機能は、変更結果を認識し、ベンダおよびモデルからなるデータベースを再生成します。たとえば、PostScriptプリンタのみを使用している場合、通常はcups-driversパッケージ内にあるFoomatic PPDファイルや、cups-drivers-stpパッケージ内にあるGimp-Print PPDファイルを必要としません。代わりに、使用中のPostScriptプリンタ用のPPDファイルを/usr/share/cups/model/へ直接コピーし(それらがまだmanufacturer-PPDsパッケージ内に存在していない場合)、使用中のプリンタに合わせて最適な設定を行うこともできます。

11.6.3.1 cupsパッケージ内のCUPS PPDファイル

cupsパッケージ内にある基本PPDファイルは、PostScript Level 1およびLevel 2プリンタに適応したFoomatic PPDファイルによって補足されます。

  • /usr/share/cups/model/Postscript-level1.ppd.gz

  • /usr/share/cups/model/Postscript-level2.ppd.gz

11.6.3.2 cups-driversパッケージ内のPPDファイル

通常、Foomaticプリンタフィルタのfoomatic-ripは、PostScript非対応プリンタ用のGhostscriptと組み合わせて使用されます。適切なFoomatic PPDファイルには、エントリ*NickName: ... Foomatic/Ghostscript driverおよび*cupsFilter: ... foomatic-ripがあります。これらのPPDファイルは、cups-driversパッケージ内にあります。

YaSTがFoomatic PPDファイルを採用するのは、Foomatic PPDファイルにエントリ*NickName: ... Foomatic ...(推奨)があり、そのファイルがプリンタモデルに一致し、manufacturer-PPDsパッケージにより適したPPDファイルが含まれない場合です。

11.6.3.3 cups-drivers-stpパッケージ内のGimp-Print PPDファイル

多くのPostScript非対応プリンタでは、foomatic-ripの代わりに、Gimp-Printから取得したCUPSフィルタrastertoprinterを使用できます。このフィルタと、適切なGimp-Print PPDファイルは、cups-drivers-stpパッケージ内に用意されています。Gimp-Print PPDファイルは /usr/share/cups/model/stp/ 内に配置されていて、そのファイル内にエントリ*NickName: ... CUPS+Gimp-Printおよび*cupsFilter: ... rastertoprinterが記述されています。

11.6.3.4 manufacturer-PPDsパッケージ内にあるプリンタメーカからのPPDファイル

manufacturer-PPDsパッケージには、十分自由なライセンスに基づいてプリンタメーカから提供されたPPDファイルが含まれています。PostScriptプリンタは、プリンタメーカの適切なPPDファイルを使用して設定するのが妥当です。 このファイルを使用すると、そのPostScriptプリンタの機能すべてを活用できるためからです。YaSTは、次の各条件が満たされている場合、manufacturer-PPDsパッケージから得られたPPDファイルを優先します。

  • ハードウェア検出の際に決定されたベンダおよびモデルが、manufacturer-PPDsパッケージから得られたPPDファイル内にあるベンダおよびモデルと一致しています。

  • manufacturer-PPDsパッケージから得られたPPDファイルは、そのプリンタモデルに適した唯一のPPDファイルです。または、同じくそのプリンタモデルに一致する*NickName:... Foomatic/Postscript (推奨)エントリがあるFoomatic PPDファイルです。

したがって、YaSTは次のような状況では、manufacturer-PPDsパッケージから得られたどのPPDファイルも使用しません。

  • manufacturer-PPDsパッケージから得られたPPDファイルが、プリンタのベンダおよびモデルに一致していません。これは、 manufacturer-PPDsパッケージに同様のモデル用にPPDファイルが1つしかない場合、たとえば、一連のモデルの個々のモデルに別々のPPDファイルがないが、PPDファイル内にFunprinter 1000 seriesのような形式でモデル名が指定されている場合に発生します。

  • Foomatic PostScript PPDファイルは、推奨されていません。プリンタモデルは、PostScriptモードでは十分効率よく動作しないことがあるからです(たとえば、メモリが少なすぎるためにこのモードではプリンタの信頼性が低い、またはプリンタ内蔵プロセッサの能力が低いために動作が遅すぎる、などです)。デフォルトでは、プリンタがPostScriptをサポートしていないこともあります。たとえば、PostScriptサポートがオプションのモジュールという形でしか使用できない場合などです。

manufacturer-PPDsパッケージから得られたPPDファイルが特定のPostScriptプリンタに適しているが、上記で説明された理由によってYaSTがそのファイルを設定できない場合、YaST内で該当のプリンタモデルを手動で選択してください。