見出し画像

393.3 プリントサービス

主題393:Sambaの共有の設定
393.3 プリントサービス

LinuC300の試験範囲である主題390~397まであるうちの「主題393:Sambaの共有の設定」から「393.3 プリントサービス」についてのまとめ

  • 重要度:2

  • 説明:
    混在環境においてプリント共有の作成と管理を行えること。

  • 主要な知識範囲
    - プリンタ共有の作成と設定を行う
    - SambaとCUPSの連携を設定する
    - Windowsプリンタドライバの管理と、プリンタドライバをダウンロードするための設定を行う
    - [print$]を設定する
    - プリント共有に起因するセキュリティ問題を理解する
    - Windows の Add Print Driver Wizard を使用して、Point'n'Print ドライバ - インストール用のプリンタドライバをアップロードする

  • 重要なファイル、用語、ユーティリティ:
    - smb.conf
    - [print$]
    - CUPS
    - cupsd.conf
    - /var/spool/samba
    - smbspool
    - rpcclient
    - net


プリンタ共有の作成と設定を行う

(補足)印刷の仕組み
クライアントPCから印刷データをSambaに送信する。
 ↓
Sambaで印刷データを受け取りプリンタキューとしてスプール領域に格納する。
 ↓
CUPS、lprコマンド、lpコマンドを使ってスプールされた印刷データを順番にプリンタに送信する。
 ↓
印刷される。

~[grobal]セクション~

  • load printers = yes
    printcapファイルで定義したプリンタをブラウジング可能にする設定。

~[printers]セクション~
プリンタ共有の共通設定を定義する。
個別に定義したプリンタ共有セクションの設定が優先される。

★ 設定例 ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /usr/local/samba/lib/smb.conf
  :
[printers]
        comment = All Printers
        path = /usr/spool/samba
        printable = Yes
        print ok = Yes
        browseable = No
        guest ok = No
        writable = No
  :

~任意の共有セッション~

  • printable(print ok) = No
    任意のセクションがプリンタ共有である場合はYesにする。
    このパラメータがNoの場合はファイル共有となる。

  • printer name(printer) =
    Linux上のプリンター名を設定する。

  • printing = ※既定値はOSにより異なる
    プリンターの状態に関する情報をどのように解釈するかを設定する。
    印刷形式:
    Samba3.6 : BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ, CUPS
    Samba4 : BSD, AIX, LPRNG, PLP, SYSV, HPUX, QNX, SOFTQ, CUPS, IPRINT

  • print command =
    印刷に使うlprコマンドやlpコマンドを指定する。
    printing = cupsの場合は指定しない。

  • printcap name = /etc/printcap
    共有するプリンタを定義するファイルをしていする。
    printing = cups の場合はこのパラメータをcupsとする。
    lpstatコマンドが使える場合はこのパラメータをlpstatとする。

  • path =
    印刷データを一時ファイルとしてスプール(蓄積)するためのスプール領域となるディレクトリを指定する。
    印刷を利用するユーザーに対応するLinuxユーザーに書き込み権限が必要。
    ここに保存されたあと、順番にCUPSやlprコマンドでプリンタにデータを送信して印刷される。

  • min print space = 0
    印刷データをスプール領域の空き容量をキロバイト(KB)で指定する。

  • max print jobs = 1000
    印刷データを蓄積できる最大件数を指定する。


SambaとCUPSの連携を設定する

~CUPS(Common UNIX Printing System)とは~
UNIX環境で印刷をするための仕組み

CUPSは、標準的な方法で印刷ジョブをプリンターに送ることを可能とする機構を与えるものである。印刷データはまずスケジューラへと送られ、スケジューラはジョブをプリンターが理解できる形式へと変換するためフィルタシステムに送る。さらにフィルタシステムはデータを、デバイスやネットワークへと送るための特殊なフィルタであるバックエンドへと受け渡す。
 :
CUPSの最大の利点は、それが、印刷サーバ上で様々なデータ様式を処理できる標準的でモジュール化された印刷システムであることである。
 :

CUPS - Wikipedia

(補足)
Samba3をソースからインストール時にCUPSを有効にする場合はconfigureコマンドのオプションで--enable-cupsをつける。
smbd -b コマンドでHAVE_CUPSが表示さればCUPSをサポートしていることになる。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# smbd -b | grep HAVE_CUPS
   HAVE_CUPS_CUPS_H
   HAVE_CUPS_LANGUAGE_H
   HAVE_CUPS
[root@rocky9-samba31 ~]#

cupsパッケージをインストールするとWEB管理画面を備えた管理ツールが利用できる。

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# dnf -y install  cups
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# rpm -qa | grep -i cups | sort
cups-2.3.3op2-16.el9.x86_64
cups-client-2.3.3op2-16.el9.x86_64
cups-filesystem-2.3.3op2-16.el9.noarch
cups-filters-1.28.7-11.el9_2.1.x86_64
cups-filters-libs-1.28.7-11.el9_2.1.x86_64
cups-ipptool-2.3.3op2-16.el9.x86_64
cups-libs-2.3.3op2-16.el9.x86_64
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /etc/cups/cupsd.conf
   :
Listen localhost:631
    ↓ 変更
Listen 631
   :
# Restrict access to the server...
<Location />
  Order allow,deny
  Allow from all  <--- 追加
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow from all  <--- 追加
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow from all  <--- 追加
</Location>
    :

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl start cups
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# systemctl status cups
● cups.service - CUPS Scheduler
     Loaded: loaded (/usr/lib/systemd/system/cups.service; enabled; preset: ena>
    Drop-In: /usr/lib/systemd/system/cups.service.d
             mqserver.conf
             /run/systemd/system/service.d
             mqzzz-lxc-service.conf
     Active: active (running) since Mon 2023-06-12 17:41:12 JST; 22s ago
TriggeredBy: ● cups.socket
             ○ cups.path
       Docs: man:cupsd(8)
   Main PID: 1606 (cupsd)
     Status: "Scheduler is running..."
      Tasks: 2 (limit: 24384)
     Memory: 1.7M
     CGroup: /system.slice/cups.service
             mq1606 /usr/sbin/cupsd -l

 612 17:41:12 rocky9-samba31 systemd[1]: Starting CUPS Scheduler...
 612 17:41:12 rocky9-samba31 systemd[1]: Started CUPS Scheduler.
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ss -antl | grep 631
LISTEN 0      128          0.0.0.0:631       0.0.0.0:*
[root@rocky9-samba31 ~]#
ブラウザからアクセスする

Windowsプリンタドライバの管理と、プリンタドライバをダウンロードするための設定を行う

~rpcclientコマンド~
Samba の MS-RPC 機能をテストするために開発されたユーティリティである。
(別記事 Appendix rpcclientコマンド 参照)

# rpcclient server -U username -c <'command string'>
  • server
    操作する対象のプリントサーバー

  • -U | --user=username[%password]
    操作する対象のプリントサーバーの接続ユーザー

  • -c | --command=<'command string'>
    操作対象のプリントサーバーに送信するコマンド

~プリントサービスに関連するrpcclientコマンド~
rpcclient -c オプションで指定する <'command string'> の一例

  • adddriver <arch> <config> [<version>]
    プリンタードライバーをインストールする。

  • addprinter <printername> <sharename> <drivername> <port>
    プリンターを追加する。

  • deldriver <driver>
    インストールされているプリンタードライバーを削除する。

  • deldriverex <driver> [architecture] [version]
    インストールされているプリンタードライバーとドライバーファイルを削除する。

  • enumdata
    サーバー上に格納されているプリンターの設定情報を一覧表示する。

  • enumdrivers [level]
    インストールされているドライバーの一覧を表示する。

  • enumprinters [level]
    インストールされているプリンターの一覧を表示する。

  • getdriver <printername>
    指定されたプリンターのプリンタードライバーの情報を表示する。

  • setdriver <printername> <drivername>
    既にインストールされているプリンタードライバーを更新する。

~TDBファイル~
プリンタ関連のTDBファイル
(別記事 Appendix SambaのTDBファイル 参照)

  • $LOCKDIR/ntdrivers.tdb
    用途:インストールされたプリンタードライバー情報を格納する。

  • $LOCKDIR/ntforms.tdb
    用途:インストールされたプリンターのフォーム情報を格納する。

  • $LOCKDIR/ntprinters.tdb
    用途:インストールされたプリンター情報を格納する。

  • $LOCKDIR/printing ディレクトリ
    用途:キャッシュされた lpq 出力のプリントキュー毎の tdb ファイルを含むディレクトリ。


[print$]を設定する

プリンタドライバの自動ダウンロード機能を使うには [print$] を定義する必要がある。

★ [print$] を定義する ★

[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# vi /usr/local/samba/lib/smb.conf
     :
[print$]
   path = /usr/local/samba/lib/printerdrivers
   comment = Printer Drivers
   browseable = yes
   read only = yes
   write list = root
     :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# testparm -s
     :
[print$]
        comment = Printer Drivers
        path = /usr/local/samba/lib/printerdrivers
        write list = root
     :
[root@rocky9-samba31 ~]#

★ プリンタドライバを保存するディレクトリを作成する ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# mkdir /usr/local/samba/lib/printerdrivers
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -ld /usr/local/samba/lib/printerdrivers
drwxr-xr-x 2 root root 2 118 22:54 /usr/local/samba/lib/printerdrivers
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# ls -la /usr/local/samba/lib/printerdrivers
合計 3
drwxr-xr-x  2 root root  2 118 22:54 .
drwxr-xr-x 12 root root 43 118 22:54 ..
[root@rocky9-samba31 ~]#

プリント共有に起因するセキュリティ問題を理解する

・・・調査中・・・


Windows の Add Print Driver Wizard を使用して、Point'n'Print ドライバ インストール用のプリンタドライバをアップロードする

~Add Print Driver Wizard~
Windows10の場合 "プリンターとスキャナを追加" に相当する。
(設定 → デバイス → プリンターとスキャナ → プリンターとスキャナを追加)

Sambaの[print$]セクションを適切に設定すると、Windowsのプリンターの管理画面でドライバ追加の操作をすると[print$]セクションでpathに指定したディレクトリにドライバソフトウェアがアップロードされる。

~Point'n'Print~

ポイントアンドプリントと は、ユーザーがディスクやその他のインストールメディアを提供せずにリモートプリンターへの接続を作成できるようにする機能を指します。 必要なすべてのファイルと構成情報は、プリントサーバーからクライアントに自動的にダウンロードされます。

ポイント アンド プリントの概要 - Windows drivers | Microsoft Learn

smbspool

印刷ファイルをSMBプリンターに送るための とても小さい印刷スプール用プログラムである。


netコマンド

Samba およびリモート CIFS サーバーの管理ツールである。
(別記事 Appendix netコマンド 参照)

netコマンドは Samba における新しい機能の1つで、共通作業のために、 リモート管理操作用における主要な操作用に便利なツールを提供する試みである。net は自由度が高いデザインで、スクリプト制御アプリケーションのためと同様にコマンド行操作 でも使うように出来ている。

当初は同じ名前のMicrosoft Windows コマンドの模倣を狙って作られたが、net は、Sambaネットワーク管理者の道具箱の基本的な部分になる、非常に強力なツールに変貌した。 Samba Teamは、smbgroupeditとrpcclientのような ツールも提供していて、それらは本当に役に立つ能力がnetコマンドに集約 された。smbgroupeditコマンドは、いくつかの機能のみが rpcclientに集約された間、netコマンドに完全に移植された。 それらのユーティリティや機能に対する古いリファレンスを見つけた場合、それ以外を探す前に、 netコマンドを見るべきである。

Chapter 13. リモートとローカル管理:Netコマンド

~プリントサービスに関連するnetコマンド~

★ net ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help
   :
net printq          Modify printer queue
   :
net printing        Process tdb printer files
   :
[root@rocky9-samba31 ~]#

★ net rap printq ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help printq
Usage:
net rap printq
    List the print queue
net rap printq info [queue]
    Display info about print jobs in queue.
    If queue is not specified, all queues are listed
net rap printq delete
    Delete print job(s)
[root@rocky9-samba31 ~]#

★ net printing ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help printing
Usage:
net printing dump
    Dump tdb printing file
net printing migrate
    Migrate tdb printing files to new storage
[root@rocky9-samba31 ~]#


★ net ads ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help ads
   :
net ads printer
    List/modify printer entries
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help ads printer
Usage:
net ads printer search
    Search for a printer
net ads printer info
    Display printer information
net ads printer publish
    Publish a printer
net ads printer remove
    Delete a printer
[root@rocky9-samba31 ~]#

★ net rpc ★
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help rpc
   :
net rpc printer
    List/modify printers
   :
[root@rocky9-samba31 ~]#
[root@rocky9-samba31 ~]# net help rpc printer
Usage:
net rpc printer
    List printers
net rpc printer list
    List all printers on print server
net rpc printer migrate
    Migrate printer to local server
net rpc printer driver
    List printer drivers
net rpc printer publish
    Publish printer in AD
[root@rocky9-samba31 ~]#

参考文献


この記事が気に入ったらサポートをしてみませんか?