11.6. SUSE Linux 中的特殊功能

已对 CUPS 的许多功能进行了调整以适用于 SUSE Linux。这里将介绍一些最重要的更改。

11.6.1. CUPS 服务器和防火墙

有多种方法可以将 CUPS 配置为网络服务器的客户机。

  1. 对于网络服务器上的每个队列,都可以配置一个本地队列,通过这个本地队列将所有作业转发到对应的网络服务器(转发队列)。通常,不建议使用此方法,原因是当网络服务器的配置更改时,必须重配置所有客户机。

  2. 也可以将打印作业直接转发到一个网络服务器。对于这种类型的配置,不要运行本地 CUPS 守护程序。lp 或其它程序的相应库调用可以将作业直接发送到网络服务器。但是,如果还要在本地打印机上打印,则此配置不起作用。

  3. CUPS 守护程序可以监听其它网络服务器发送以通知可用队列的 IPP 广播包。

    这是通过远程 CUPS 服务器进行打印的最佳 CUPS 配置。但是,这种方法存在的风险在于,如果攻击者向 IPP 广播发送队列,则本地守护程序将访问假冒的队列。如果它随后使用与本地服务器上的另一个队列相同的名称来显示该队列,则作业的拥有者可能认为作业已被发送到本地服务器,而实际上作业被发送到攻击者的服务器上。

通过扫描本地网络主机以查看其是否提供 IPP 服务或通过监听 IPP 广播,YaST 可以找到 CUPS 服务器。这要求防火墙允许端口 631/UDP(服务 IPP 客户机)上的入站信息包通过。将机器配置为处于内部防火墙区域时将自动启用此功能。在外部区域中打开端口来配置对远程队列的访问将引起安全问题,因为用户可能会接受攻击者广播的服务器。默认情况下外部区域中拒绝接受 IPP 广播。有关防火墙配置的详细信息请参见第 4.1.4.1 节 “使用 YaST 配置”

或者,用户可以通过主动扫描本地网络主机检测 CUPS 服务器或手工配置所有队列。但是由于本节开始处提及的原因,不推荐使用此方法。

11.6.2. CUPS 打印服务中的更改

这些更改最初应用于 SUSE Linux 9.1。

11.6.2.1. cupsd 以用户 lp 的身份运行

启动时,cupsd 从用户 root 更改为用户 lp。这提供了更高的安全性级别,因为 CUPS 打印服务不会以不受限制的权限运行,只以打印服务所需的权限运行。

但是,不能通过 /etc/shadow 执行鉴定(口令检查),因为 lp 没有对 /etc/shadow 的访问权限。而必须使用通过 /etc/cups/passwd.md5 执行的 CUPS 特定的鉴定。为此,必须在 /etc/cups/passwd.md5 中输入 CUPS 管理员以及 CUPS 管理组 sys 和 CUPS 口令。要执行此操作,必须以 root 用户身份输入以下内容:

lppasswd -g sys -a CUPS-admin-name

如果要使用管理 CUPS 管理万维网前端或 KDE 打印机管理工具,则必须使用此设置。

cupsdlp 运行时,不能生成 /etc/printcap,因为不允许 lp/etc/ 中创建文件。因此,cupsd 生成 /etc/cups/printcap。为了确保只能从 /etc/printcap 读取队列名的应用程序继续正常工作,/etc/printcap 是指向 /etc/cups/printcap 的符号链接。

cupsdlp 运行时,不能打开端口 631。因此,不能使用 rccups reload 重装载 cupsd。请改用 rccups restart

11.6.2.2. BrowseAllowBrowseDeny 的一般功能

BrowseAllowBrowseDeny 设置的访问权限适用于发送到 cupsd 的所有类型的包。/etc/cups/cupsd.conf 中的默认设置如下所示:

BrowseAllow @LOCAL
BrowseDeny All

and

<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 服务器上的 cupsdLOCAL 主机是其 IP 地址属于非 PPP 接口(未设置其 IFF_POINTOPOINT 标志的接口)并且其 IP 地址与 CUPS 服务器属于同一个网络的主机。将立即拒绝来自所有其它主机的包。

11.6.2.3. 默认激活 cupsd

在标准安装中,将自动激活 cupsd,从而可以方便地访问 CUPS 网络服务器的队列,而无需执行任何其它手工操作。在第 11.6.2.1 节 “cupsd 以用户 lp 的身份运行”第 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 文件

为 PostScript 级别 1 和级别 2 打印机调整的 Foomatic PPD 文件对 cups 包中的通用 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 包中。

如果带有项 *NickName:... Foomatic ...(建议)的 Foomatic PPD 文件与打印机型号匹配并且 manufacturer-PPDs 包不包含更合适的 PPD 文件,则 YaST 更倾向于 Foomatic PPD 文件:

11.6.3.3. cups-drivers-stp 包中的 Gimp-Print PPD 文件

Gimp-Print 中的 CUPS 过滤器 rastertoprinter(而不是 foomatic-rip)可用于许多非 PostScript 打印机。cups-drivers-stp 包中提供此过滤器和合适的 Gimp-Print PPD 文件。Gimp-Print PPD 文件位于 /usr/share/cups/model/stp/ 中并具有项 *NickName:... CUPS+Gimp-Print*cupsFilter:... rastertoprinter

11.6.3.4. manufacturer-PPDs 包中来自打印机制造商的 PPD 文件

manufacturer-PPDs 包中包含来自打印机制造商的 PPD 文件,这些文件是在充分自由的许可证下发布的。应该用打印机制造商的合适 PPD 文件配置 PostScript 打印机,因为此文件支持使用 PostScript 打印机的所有功能。如果满足以下条件,YaST 倾向于使用 manufacturer-PPDs 包中的 PPD 文件:

  • 硬件检测过程中确定的供应商和型号符合 manufacturer-PPDs 包的 PPD 文件中的供应商和型号。

  • 来自 manufacturer-PPDs 包的 PPD 文件是仅适用于此打印机型号的 PPD 文件或者存在具有 *NickName 的 Foomatic PPD 文件:... Foomatic/Postscript(建议)项也与此打印机型号匹配。

因此,在以下情况下,YaST 不使用 manufacturer-PPDs 包中的任何 PPD 文件:

  • manufacturer-PPDs 包中的 PPD 文件不符合供应商和型号。如果 manufacturer-PPDs 包只包含用于类似型号的 PPD 文件(例如,如果某个型号系列中的各个型号没有单独的 PPD 文件,而是在 PPD 文件中以类似于 Funprinter 1000 series 的形式指定型号名),则可能发生这种情况。

  • 不建议使用 Foomatic PostScript PPD 文件。这可能是因为该打印机型号在 PostScript 方式中不能充分有效地操作。例如,因为打印机内存太少而导致它在这种方式中不可靠,或者因为处理器太弱而导致打印机速度太慢。此外,因为 PostScript 支持只作为可选模块提供,所以打印机可能不默认支持 PostScript。

如果 manufacturer-PPDs 包中的 PPD 文件适合 PostScript 打印机,但 YaST 由于上述原因不能对其进行配置,则在 YaST 中手工选择相应的打印机型号。