我想买一台新打印机,因为我的旧打印机拒绝打印,除非我让它访问局域网之外的互联网。我无法真正控制它向其他组织透露我的打印作业,我不喜欢这样。这引发了下面的问题。
我将使用 GNU/Linux 机器的 USB 连接来连接新打印机。该驱动程序是专有的,包含在 deb 文件中
$ dpkg --contents /path/to/hll2350dwpdrv-4.0.0-1.i386.deb
drwxr-xr-x root/root 0 2017-07-18 03:36 ./
drwxr-xr-x root/root 0 2017-07-18 03:36 ./usr/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./usr/share/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./usr/share/doc/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./etc/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./etc/opt/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./etc/opt/brother/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./etc/opt/brother/Printers/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./etc/opt/brother/Printers/HLL2350DW/
drwxr-xr-x root/root 0 2017-07-18 03:34 ./etc/opt/brother/Printers/HLL2350DW/inf/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/
-rw-r--r-- root/root 20486 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/LICENSE_ENG.txt
-rw-r--r-- root/root 20799 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/LICENSE_JPN.txt
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/cupswrapper/
-rw-r--r-- root/root 18351 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/cupswrapper/Copying
-rw-r--r-- root/root 17840 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/cupswrapper/brother-HLL2350DW-cups-en.ppd
-rwxr-xr-x root/root 26369 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/cupswrapper/lpdwrapper
-rwxr--r-- root/root 7606 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/cupswrapper/paperconfigml2
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/inf/
-rw-r--r-- root/root 891 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/inf/brHLL2350DWfunc
-rw-r--r-- root/root 168 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/inf/brHLL2350DWrc
-rwxr-xr-x root/root 863 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/inf/setupPrintcap
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/lpd/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/lpd/armv7l/
-rwxr-xr-x root/root 31460 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/armv7l/brprintconflsr3
-rwxr-xr-x root/root 65940 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/armv7l/rawtobr3
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/lpd/i686/
-rwxr-xr-x root/root 28281 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/i686/brprintconflsr3
-rwxr-xr-x root/root 59014 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/i686/rawtobr3
-rwxr-xr-x root/root 6698 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/lpdfilter
drwxr-xr-x root/root 0 2017-07-18 03:36 ./opt/brother/Printers/HLL2350DW/lpd/x86_64/
-rwxr-xr-x root/root 35591 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/x86_64/brprintconflsr3
-rwxr-xr-x root/root 67752 2017-07-18 03:34 ./opt/brother/Printers/HLL2350DW/lpd/x86_64/rawtobr3
drwxr-xr-x root/root 0 2017-07-18 03:36 ./var/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./var/spool/
drwxr-xr-x root/root 0 2017-07-18 03:36 ./var/spool/lpd/
drw-r--r-- root/root 0 2017-07-18 03:34 ./var/spool/lpd/HLL2350DW/
- 我想知道驱动程序或打印机是否可以使用互联网连接(通过 USB 连接到的 GNU/Linux 机器)向第三方发送消息。我认为比我更了解操作系统和 CUPS 的人可以确定这个问题的答案。您能否解释一下驱动程序如何与机器交互,以便我了解它是否可以向互联网发送消息?
- 如果理论上驱动程序或打印机可以使用互联网连接向第三方发送消息,那么我可以通过哪些方式阻止其访问互联网?
答案1
CUPS 驱动程序通常包括筛选(转换器)是一个在受限用户帐户下运行的实际 Linux 程序。在此示例中,rawtobr3
似乎是 PPD 文件指定使用的过滤器(用于将 CUPS 提供的打印数据转换为 Brother“BR-Script3”格式)。由于它是一个完整的可执行文件,因此它可以执行操作系统允许其用户帐户执行的任何操作,包括网络访问。
您可以使用各种方法,例如 AppArmor、nft/iptables(使用基于 UID 的规则)、策略路由(再次使用基于 UID 的匹配)或 eBPF(cups.service 中 systemd 的“IPAddressDeny=”)来阻止 CUPS 及其运行的辅助进程的网络访问。
(注意不要禁止本地主机网络访问,因为 CUPS 是作为 IPP 服务器构建的 - 它甚至通过“localhost:631”接收本地打印作业。)
大多数现代打印机都支持 IPP Everywhere(作为 AirPrint 或 Mopria 等各种认证的一部分);这包括可以通过ipp-usb
守护进程使用的 IPP-over-USB。支持 IPP Everywhere 的打印机必须是“无驱动程序的”,即它们必须接受标准格式(如 PDF 或 PCLm)的作业,这意味着 Brother CUPS 驱动程序不需要打印。请参阅Debian Wiki 文章了解更多信息。
答案2
当然可以。此驱动程序附带了过滤程序和脚本,这些程序和脚本在打印过程中被调用。除了原来的工作外,它们还可以做任何事情。会吗?可能不会。
您可以使用 SELinux 之类的安全模块来限制程序可以执行的操作。这可以防止可执行文件访问任意文件并执行任意操作(例如连接到互联网或删除您的资料等)。SELinux 的设置并不容易(并且随着您更改系统,维护也不容易)。
一个更容易设置但同样笨重的解决方案就是仅仅将打印过程容器化,禁止容器进行任何和所有网络访问。
最好的办法可能是购买一台能够直接识别 PostScript 的打印机。这些打印机有通用驱动程序。它们不包含任何恶意软件。不过,您可能无法使用打印机的所有高级功能。