FreeBSD ハンドブック : プリンタの利用 : プリンタ設定上級編 : プリンタの利用に制約を与える
Previous: リモートプリンタからの出力
Next: プリンタの利用に対する課金

7.6.4. プリンタの利用に制約を与える

本節では, プリンタの利用に制約を与えるための情報を記して います. LPD システムでは, プリンタ (ローカル, リモートのいずれ に接続されていても) にアクセスできる人を制限する機能, 複数部の コピーの印字の可否を制御する機能, ジョブのサイズの最大値やプリ ンタキューに入るジョブの最大個数を制御する機能を提供しています.

7.6.4.1. 複数部のコピーの印字を制限する

LPD システムではユーザが複数部のコピーの印字を簡単におこなう 機能を提供しています. ユーザが, (例えば) lpr -#5 コマ ンドを使ってジョブを印字すると, ジョブのそれぞれのファイルのコ ピーを5部得ることができます. これがよい機能であると思うかどう かは人それぞれでしょう.

複数部のコピーの印字によってプリンタが必要以上に消耗してしまう と感じるならば, /etc/printcap ファイルに sc 項 目を加えてください. これにより, lpr-# オプションの使用 が禁止されます. このオプションが指定されているにも関らず, -# オプションを使うと, 次のようなメッセージが表示され, このオプションの利用できない旨を伝えます.

lpr: multiple copies are not allowed

リモートホストからプリンタをアクセスできる設定にしている場合 (この 設定については, 「 リモートホストに接続されたプリン タ」をご覧ください), その リモートホストの /etc/printcap にも同じように sc 項目を追加する必要があることに注意してください. そうしないと, ユーザは別なホストから複数部のコピーの印字することができてしま います.

例を使って説明しましょう. 次に示す /etc/printcap ファ イルは, ホスト rose のものです. プリンタ rattan は極めて 頑丈なので, 複数部のコピーの印字は許可されています. しかし, レー ザプリンタの bamboo はもう少しデリケートで, このプリンタ から複数部のコピーを印字することを sc 項目を追加すること で禁止しています.


#
#  /etc/printcap for host rose - restrict multiple copies on bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:

さらに, orchid の /etc/printcap にも sc 項目を 追加する必要があります (orchid でこの編集をおこなっているときに, つ いでに, プリンタ teak でも複数部のコピーの印字を禁止する ことにしましょう).
#
#  /etc/printcap for host orchid - no multiple copies for local
#  printer teak or remote printer bamboo

teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
	:lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\
	:if=/usr/local/libexec/ifhp:\
	:vf=/usr/local/libexec/vfhp:\
	:of=/usr/local/libexec/ofhp:

rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc:

sc 項目を指定することにより, lpr -# の使用を防 ぐことができます. しかし, この状態では lpr を複数回起動し たり, 1回のジョブで次のように同じファイルを複数個指定すること を防ぐまでには至っていません.
lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign 
このような悪用を防ぐ方法は (その指示を無視することも含めて) たく さんあります. 各自で調べてみてください.

7.6.4.2. プリンタを使用できる人を限定する

それぞれのプリンタを使用できる人を限定するには, UNIX の グループ権限のメカニズムを利用し, さらに, /etc/printcaprg 項目を指定することでおこないます. あるプリンタにアクセスさせてもよいと思うユーザすべてをUNIXのある グループに入れてください. そして, そのグループ名を rg で 指定します.

このとき, そのグループに含まれないユーザ (root も含む) が rg の指定がされたプリンタを使用すると, 次のようなメッセー ジが表示され, プリンタの使用はできません.

lpr: Not a member of the restricted group
sc (suppress multiple copies : 複数部のコピーの印字を禁止 する) を指定するときと同様に, rg が指定されたプリンタがリ モートホストからもアクセスでき (この設定については, 「 リモートホストに接続されたプリンタ」をご覧ください), かつ, そ のホストでもプリンタを使用できる人を限定するのが妥当であると思 う場合は, そのホストの /etc/printcap にも rg 指 定をおこなう必要があります.

例えば, プリンタ rattan は誰でも利用できるが, bamboo はグループ artists に属している人のみが利用で きるようにしてみましょう. 以下に, もうお馴染みとなったホスト rose の /etc/printcap を示します.


#
#  /etc/printcap for host rose - restricted group for bamboo
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:

これ以外の /etc/printcap ファイル (ホスト orchidのもの) はそのままにしておくことにします. もちろん, orchid のユーザは 全員 bamboo を利用することができます. これは, orchid に は特定のユーザのみにしかアクセスさせておらず, そのユーザにはプ リンタを利用させたいと思っているからなのかもしれませんし, そう でないかもしれません.

注意: 1台のプリンタを複数グループのユーザに利用させること はできません.

7.6.4.3. 入力可能なジョブのサイズを制限する

たくさんのユーザからプリンタが利用される場合には, 多分, ユーザが印字要求を出すことができるファイルのサイズに上限値を置 く必要が生じるでしょう. 結局のところ, スプーリングディレクトリ が置かれているファイルシステムの空き容量がその上限値になる訳で すが, あるユーザがこれを独占的に使用すること避けるために, 他ユー ザからのジョブ用の空き容量を確保する必要もあります.

LPD では, mx 項目を指定することにより, ジョブ中の個々のファ イルのサイズの上限値を制限する機能を提供しています. 指定される ファイルサイズの単位は BUFSIZ ブロックで, 1 BUFSIZ ブロックは 1024バイトを表わします. この mx 項目の値として0が指定される と, ファイルサイズの制限はなくなります. この制限はジョブ中の各 ファイルに対して適用されるものであり, ジョブ全体のサイズ を制限するものではないことに注意してください.

ところで, プリンタに設定された上限値を超えるファイルサイズのファ イルが入力された場合でも, LPD はこれを拒否しません. その代わ りに, このファイルは, その先頭から上限値のファイルサイズまでし かキューに入れられません. そして, その部分までが印字され, 残り の部分は捨てられます. これが正しい動作といえるのかどうかは議 論の余地があるところです.

それでは, 設定例に登場しているプリンタ rattanbamboo の印字可能なファイルサイズに制限を加えてみましょう. artists グループの人達が作る PostScript ファイルのサイズは 巨大になる傾向があるので, 上限値を5Mバイトとします. それから, プレインテキスト用のラインプリンタは無制限とします.


#
#  /etc/printcap for host rose
#

#
#  No limit on job size:
#
rattan|line|diablo|lp|Diablo 630 Line Printer:\
	:sh:sd=/var/spool/lpd/rattan:\
	:lp=/dev/lpt0:\
	:if=/usr/local/libexec/if-simple:

#
#  Limit of five megabytes:
#
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:

この場合もそうですが, この制限はローカル (ホスト rose) のユーザ のみに適用されます. リモートホストからプリンタを利用できるよう に設定している場合は, そのリモートホストのユーザはこの制限を受 けません. これらのユーザにも制限を加える場合は, リモートホスト の /etc/printcapmx を指定する必要があります. リモートホストから印字するための詳しい情報については, 「 リモートホストに接続されたプリンタ」を参照してください.

リモートホストに接続されたプリンタへのジョブのサイズを制限する 特別な方法は他にもあります. これについては, 「 リモートホスト からのプリンタの利用を制限する」を参照してください.

7.6.4.4. リモートホストからのプリンタの利用を制限する

LPD スプーリングシステムでは, リモートホストから要求され たジョブの印字を制限するための方法がいくつか提供されています.

ホストの制限

ローカルの LPD が印字要求を受け付けるリモートホストは, ファイル /etc/hosts.equiv/etc/hosts.lpd によって制御することができます. LPD では, あるホストから印字の要求がきたとき, このホス トの名前がこれら2つのファイルのどちらかに含まれている かどうかを調べます. これが含まれていない場合は, LPD はこの要求を拒否します.

これらのファイルの形式は単純です. 各行にホストの名前を 1つずつ書いていきます. ファイル /etc/hosts.equiv の方は ruserok(3) プロトコル でも利用され, rshrcp といったプログラム の動作に影響するので注意が必要です. /etc/hosts.equiv の記述は慎重におこないましょう.

例として, 以下にホスト rose の /etc/hosts.lpd を示します.


orchid
violet
madrigal.fishbaum.de

この例では, rose はホスト orchid, violet, そして madrigal.fishbaum.de からの要求を受け付けることになり ます. その他のホストが rose の LPD にアクセスしようと しても, LPD はこれを拒否します (訳注:拒否されるのは, そのホストが /etc/hosts.equiv にも含まれてい ない場合です).

サイズの制限

スプーリングディレクトリがあるファイルシステムに残して おく必要がある空き容量の大きさを制御することができます. ローカルプリンタ用のスプーリングディレクトリに minfree という名前のファイルを作成します. そして, そのファイルの中にリモートホストからのジョブの要求を受 け付けるために必要な空き容量のディスクブロックサイズ (1 ディスクブロック=512バイト) を記します.

これで, リモートホストのユーザにファイルシステムを満杯 にされないことが保証されます. この機能を使うと, ローカ ルホストのユーザに対してある種の優先権を与えることもで きます. ローカルホストのユーザは, minfree ファイ ルで指定された値よりもディスクの空き容量が下回った後で もずっと, ジョブをキューに入れることができるのです.

例えば, プリンタ bamboo 用の minfree を作っ てみましょう. このプリンタのスプーリングディレクトリを 調べるために, /etc/printcap を調べてみましょ う. 以下に, bamboo のエントリ部分を示します.

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
	:sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\
	:lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:mx#5000:\
	:if=/usr/local/libexec/psif:\
	:df=/usr/local/libexec/psdf:
スプーリングディレクトリは sd で指定されます. LPD がリモートホストからのジョブを受け付けるために必要 なファイルシステムの空き容量を3Mバイト (=6144ディスクブ ロック) にすることにしましょう.
echo 6144 > /var/spool/lpd/bamboo/minfree

利用ユーザの制限

/etc/printcaprs 項目を指定することで, ローカルプリンタを利用できるリモートホストのユーザを制 限することができます. ローカルホストに接続されたプリン タ用のエントリに rs 項目が指定されている場合, LPD は印字を要求したユーザのアカウントと同じログイン名 がローカルホストに登録されている/em/場合に限り/, その ジョブが受け付けられます. そうでないユーザからのジョブ は LPD は拒否します.

この機能は, (例えば) 複数の部署がネットワークを共有して おり, この内のあるユーザが部署の境界を越えて活動してい る場合には特に有用です. そのようなユーザに対して, シス テムのアカウントを与えるだけで, これらのユーザは自分が 所属する部署のシステムからそのシステムに接続されている プリンタを使用することができます. これらのユーザにはむ しろ, プリンタの使用だけを認め, その他のコンピュー タ資源を利用させたくないときは, それらのユーザにはホー ムディレクトリを与えず, ログインシェルはシェルとしては 何の役にも立たない /usr/bin/false などを指定 して, これらのユーザのアカウントはプリンタ用の「形式的 な」ものとします.


FreeBSD ハンドブック : プリンタの利用 : プリンタ設定上級編 : プリンタの利用に制約を与える
Previous: リモートプリンタからの出力
Next: プリンタの利用に対する課金