由于在 Oracle Solaris 发行版中设计了开放标准打印 API (Print API, PAPI) 实现,因此要与打印服务交互,不再需要提升的权限来运行应用程序、工具包和打印命令。
因此,以下打印命令不再是安装的 SUID 根:
/usr/bin/lp
/usr/bin/lpstat
/usr/bin/cancel
/usr/bin/lpmove
/usr/{ucb|bin}/lpr
/usr/{ucb|bin}lpq
/usr/{ucb|bin}/lprm
/usr/lib/print/printd
以前,上述命令是安装的 SUID root,因为这些命令需要提升的权限才能实现以下目的:
打开保留端口
分配连续的作业 ID 号
在 /var/spool/print 目录中处理文件
此功能现在已在小型帮助应用程序 /usr/lib/print/lpd-port 中进行了本地化。因此,任何使用 RFC-1179 PAPI 支持的应用程序不再需要提升的权限。lpd-port 帮助应用程序包含在保留端口上传递 RFC-1179 协议请求以及分配连续的作业 ID 号所需的最低支持。尽管帮助应用程序是安装的 SUID 根,但除非需要提升的权限,否则所有提升的权限都会被放弃。如有必要,会为必需的操作提升权限,然后再永久放弃提升的权限(如果不再需要提升的权限)。在 Oracle Solaris 发行版中,此过程是通过使用权限来完成的。在其他平台上,此过程是通过使用 setuid、seteuid 或 setreuid 函数来完成的。
如果您不希望在网络上共享本地打印机,则可以安全地禁用打印网络侦听程序。如果您运行的是 Oracle Solaris 发行版或 CUPS 服务器,则在使用 IPP 与这些服务器通信时,lpstat 命令可提供有关远程打印队列和打印作业及其功能的更多信息。
如果 IPP 正在使用中而且具有正确的授权,则可以对远程打印队列和打印作业执行以下操作:
accept
reject
enable
disable
move job
modify job
此外,如果 IPP 正在使用中,您现在还可以在打印服务器上的队列之间移动打印请求,并远程修改打印请求。
有关更多信息,请参见 privileges(5) 手册页。有关逐步操作过程,请参见使用 Internet 打印协议时管理网络上的打印机(任务图)。