本節では, プリンタの利用に制約を与えるための情報を記して います. LPD システムでは, プリンタ (ローカル, リモートのいずれ に接続されていても) にアクセスできる人を制限する機能, 複数部の コピーの印字の可否を制御する機能, ジョブのサイズの最大値やプリ ンタキューに入るジョブの最大個数を制御する機能を提供しています.
LPD システムではユーザが複数部のコピーの印字を簡単におこなう
機能を提供しています. ユーザが, (例えば) lpr -#5
コマ
ンドを使ってジョブを印字すると, ジョブのそれぞれのファイルのコ
ピーを5部得ることができます. これがよい機能であると思うかどう
かは人それぞれでしょう.
複数部のコピーの印字によってプリンタが必要以上に消耗してしまう
と感じるならば, /etc/printcap
ファイルに sc
項
目を加えてください. これにより, -#
オプションの使用
が禁止されます. このオプションが指定されているにも関らず,
-#
オプションを使うと, 次のようなメッセージが表示され,
このオプションの利用できない旨を伝えます.
lpr: multiple copies are not allowed
リモートホストからプリンタをアクセスできる設定にしている場合 (この
設定については, 「
リモートホストに接続されたプリン タ」をご覧ください), その
リモートホストの /etc/printcap
にも同じように sc
項目を追加する必要があることに注意してください. そうしないと,
ユーザは別なホストから複数部のコピーの印字することができてしま
います.
例を使って説明しましょう. 次に示す /etc/printcap
ファ
イルは, ホスト rose のものです. プリンタ rattan
は極めて
頑丈なので, 複数部のコピーの印字は許可されています. しかし, レー
ザプリンタの bamboo
はもう少しデリケートで, このプリンタ
から複数部のコピーを印字することを sc
項目を追加すること
で禁止しています.
<hr>
# # /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:<hr> さらに, orchid の
/etc/printcap
にも sc
項目を
追加する必要があります (orchid でこの編集をおこなっているときに, つ
いでに, プリンタ teak
でも複数部のコピーの印字を禁止する
ことにしましょう).
<hr># # /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:<hr>
sc
項目を指定することにより, lpr -#
の使用を防
ぐことができます. しかし, この状態では lpr
を複数回起動し
たり, 1回のジョブで次のように同じファイルを複数個指定すること
を防ぐまでには至っていません.
lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign
このような悪用を防ぐ方法は (その指示を無視することも含めて) たく
さんあります. 各自で調べてみてください.
それぞれのプリンタを使用できる人を限定するには, UNIX の
グループ権限のメカニズムを利用し, さらに,
/etc/printcap
で rg
項目を指定することでおこないます.
あるプリンタにアクセスさせてもよいと思うユーザすべてを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
を示します.
<hr>
# # /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:<hr> これ以外の
/etc/printcap
ファイル (ホスト orchidのもの)
はそのままにしておくことにします. もちろん, orchid のユーザは
全員 bamboo
を利用することができます. これは, orchid に
は特定のユーザのみにしかアクセスさせておらず, そのユーザにはプ
リンタを利用させたいと思っているからなのかもしれませんし, そう
でないかもしれません.
注意: 1台のプリンタを複数グループのユーザに利用させること はできません.
たくさんのユーザからプリンタが利用される場合には, 多分, ユーザが印字要求を出すことができるファイルのサイズに上限値を置 く必要が生じるでしょう. 結局のところ, スプーリングディレクトリ が置かれているファイルシステムの空き容量がその上限値になる訳で すが, あるユーザがこれを独占的に使用すること避けるために, 他ユー ザからのジョブ用の空き容量を確保する必要もあります.
LPD では, mx
項目を指定することにより, ジョブ中の個々のファ
イルのサイズの上限値を制限する機能を提供しています. 指定される
ファイルサイズの単位は BUFSIZ ブロックで, 1 BUFSIZ ブロックは
1024バイトを表わします. この mx
項目の値として0が指定される
と, ファイルサイズの制限はなくなります. この制限はジョブ中の各
ファイルに対して適用されるものであり, ジョブ全体のサイズ
を制限するものではないことに注意してください.
ところで, プリンタに設定された上限値を超えるファイルサイズのファ イルが入力された場合でも, LPD はこれを拒否しません. その代わ りに, このファイルは, その先頭から上限値のファイルサイズまでし かキューに入れられません. そして, その部分までが印字され, 残り の部分は捨てられます. これが正しい動作といえるのかどうかは議 論の余地があるところです.
それでは, 設定例に登場しているプリンタ rattan
と
bamboo
の印字可能なファイルサイズに制限を加えてみましょう.
artists グループの人達が作る PostScript ファイルのサイズは
巨大になる傾向があるので, 上限値を5Mバイトとします. それから,
プレインテキスト用のラインプリンタは無制限とします.
<hr>
# # /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:<hr> この場合もそうですが, この制限はローカル (ホスト rose) のユーザ のみに適用されます. リモートホストからプリンタを利用できるよう に設定している場合は, そのリモートホストのユーザはこの制限を受 けません. これらのユーザにも制限を加える場合は, リモートホスト の
/etc/printcap
の mx
を指定する必要があります.
リモートホストから印字するための詳しい情報については, 「
リモートホストに接続されたプリンタ」を参照してください.
リモートホストに接続されたプリンタへのジョブのサイズを制限する 特別な方法は他にもあります. これについては, 「 リモートホスト からのプリンタの利用を制限する」を参照してください.
LPD スプーリングシステムでは, リモートホストから要求され たジョブの印字を制限するための方法がいくつか提供されています.
ローカルの LPD が印字要求を受け付けるリモートホストは,
ファイル /etc/hosts.equiv
と
/etc/hosts.lpd
によって制御することができます.
LPD では, あるホストから印字の要求がきたとき, このホス
トの名前がこれら2つのファイルのどちらかに含まれている
かどうかを調べます. これが含まれていない場合は, LPD
はこの要求を拒否します.
これらのファイルの形式は単純です. 各行にホストの名前を
1つずつ書いていきます. ファイル
/etc/hosts.equiv
の方は ruserok(3) プロトコル
でも利用され, rsh
や rcp
といったプログラム
の動作に影響するので注意が必要です.
/etc/hosts.equiv
の記述は慎重におこないましょう.
例として, 以下にホスト rose の /etc/hosts.lpd
を示します.
<hr>
orchid violet madrigal.fishbaum.de<hr> この例では, 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/printcap
の rs
項目を指定することで,
ローカルプリンタを利用できるリモートホストのユーザを制
限することができます. ローカルホストに接続されたプリン
タ用のエントリに rs
項目が指定されている場合,
LPD は印字を要求したユーザのアカウントと同じログイン名
がローカルホストに登録されている/em/場合に限り/, その
ジョブが受け付けられます. そうでないユーザからのジョブ
は LPD は拒否します.
この機能は, (例えば) 複数の部署がネットワークを共有して
おり, この内のあるユーザが部署の境界を越えて活動してい
る場合には特に有用です. そのようなユーザに対して, シス
テムのアカウントを与えるだけで, これらのユーザは自分が
所属する部署のシステムからそのシステムに接続されている
プリンタを使用することができます. これらのユーザにはむ
しろ, プリンタの使用だけを認め, その他のコンピュー
タ資源を利用させたくないときは, それらのユーザにはホー
ムディレクトリを与えず, ログインシェルはシェルとしては
何の役にも立たない /usr/bin/false
などを指定
して, これらのユーザのアカウントはプリンタ用の「形式的
な」ものとします.