已对 CUPS 的许多功能进行了调整以适用于 SUSE Linux。这里将介绍一些最重要的更改。
有多种方法可以将 CUPS 配置为网络服务器的客户机。
对于网络服务器上的每个队列,您都可以配置一个本地队列,通过该本地队列将所有作业转发到对应的网络服务器。通常,不建议使用此方法,原因是当网络服务器的配置更改时,必须重配置所有客户机。
也可以将打印作业直接转发到一个网络服务器。对于这种类型的配置,不要运行本地 CUPS 守护程序。lp 或其他程序的相应库调用可以将作业直接发送到网络服务器。但是,如果还要在本地打印机上打印,则此配置不起作用。
CUPS 守护程序可以监听其他网络服务器发送以通知可用队列的 IPP 广播包。要使用此方法,必须为进入的包打开端口 631/UDP。
这是通过远程 CUPS 服务器进行打印的最佳 CUPS 配置。但是,这种方法存在的风险在于,如果攻击者向 IPP 广播发送队列,则本地守护程序将访问假冒的队列。如果它随后使用与本地服务器上的另一个队列相同的名称来显示该队列,则作业的拥有者可能认为作业已被发送到本地服务器,而实际上作业被发送到攻击者的服务器上。
通过扫描所有网络主机以查看其是否提供 CUPS 服务并监听 IPP 广播,YaST 可以找到 CUPS 服务器。第二种方法用于在系统安装期间为建议查找 CUPS 服务器。它要求对进来的包打开端口 631/UDP。使用第二种方法打开端口来配置对远程队列的访问将引起安全问题,因为用户可能会接受攻击者广播的服务器。
显示在建议对话框的防火墙默认设置拒绝在任何接口上执行 IPP 广播。因此,用来检测远程队列的第二种方法和用来访问远程队列的第三种方法不能工作。因此,必须通过将接口之一(该接口默认打开端口)标为 internal 或通过显式打开 external 接口的端口来修改防火墙配置。出于安全原因,这些端口都不会默认打开。
必须修改建议的防火墙配置以在安装过程中启用 CUPS 检测远程队列,并在正常操作过程中从本地系统访问远程服务器。或者,用户可以通过主动扫描本地网络主机检测 CUPS 服务器或手工配置所有队列。但是由于本节开始处提及的原因,不推荐使用此方法。
这些更改最初应用于 SUSE Linux 9.1。
启动时,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),则必须使用此设置。
当 cupsd 以 lp 运行时,不能生成 /etc/printcap,因为不允许 lp 在 /etc/ 中创建文件。因此,cupsd 生成 /etc/cups/printcap。为了确保只能从 /etc/printcap 读取队列名的应用程序继续正常工作,/etc/printcap 是指向 /etc/cups/printcap 的符号链接。
当 cupsd 以 lp 运行时,不能打开端口 631。因此,不能使用 rccups reload 重装载 cupsd。请改用 rccups restart。
为 BrowseAllow 和 BrowseDeny 设置的访问权限适用于发送到 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 服务器上的 cupsd。LOCAL 主机是其 IP 地址属于非 PPP 接口(未设置其 IFF_POINTOPOINT 标志的接口)并且其 IP 地址与 CUPS 服务器属于同一个网络的主机。将立即拒绝来自所有其他主机的包。
在标准安装中,将自动激活 cupsd,从而可以方便地访问 CUPS 网络服务器的队列,而无需执行任何其他手工操作。在第 31.6.2.1 节 “cupsd 以用户 lp 的身份运行”和第 31.6.2.2 节 “BrowseAllow 和 BrowseDeny 的一般功能”中的项目是此功能的重要前提,因为如果不是这样,安全性将不足以自动激活 cupsd。
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 包中)以实现打印机的最佳配置。
为 PostScript 级别 1 和级别 2 打印机调整的 Foomatic PPD 文件对 cups 包中的通用 PPD 文件进行了补充:
/usr/share/cups/model/Postscript-level1.ppd.gz
/usr/share/cups/model/Postscript-level2.ppd.gz
通常,Foomatic 打印机过滤器 foomatic-rip 与非 PostScript 打印机的 Ghostscript 一起使用。适用的 Foomatic PPD 文件应具有项 *NickName:... Foomatic/Ghostscript driver 和 *cupsFilter:... foomatic-rip。这些 PPD 文件位于 cups-drivers 包中。
如果具有项 *NickName: ... Foomatic ... (recommended) 的 Foomatic PPD 文件符合打印机型号并且 manufacturer-PPDs 包不包含更合适的 PPD 文件,则 YaST 倾向于使用 Foomatic 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。
manufacturer-PPDs 包中包含来自打印机制造商的 PPD 文件,这些文件是在充分自由的许可证下发布的。应该用打印机制造商的合适 PPD 文件配置 PostScript 打印机,因为此文件支持使用 PostScript 打印机的所有功能。如果满足以下条件,YaST 倾向于使用 manufacturer-PPDs 包中的 PPD 文件:
硬件检测过程中确定的供应商和型号符合 manufacturer-PPDs 包的 PPD 文件中的供应商和型号。
manufacturer-PPDs 包中的 PPD 文件是唯一适合该打印机型号的 PPD 文件,或者有一个具有 *NickName: ... Foomatic/Postscript (recommended) 项的 Foomatic PPD 文件,该项也符合该打印机型号。
因此,在以下情况下,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 中手动选择相应的打印机型号。