配置 CUPS 以密码保护具有 Windows 兼容性的 IPP 共享打印机

配置 CUPS 以密码保护具有 Windows 兼容性的 IPP 共享打印机

根据我当前的配置,可以在 Windows 上安装打印机,但向导不会提示输入凭据,并且无法进行打印。尽管在 url 中提供凭据( http://some_user:password@serverip:port/printers/myprinter),Windows 始终使用本地帐户名,并且似乎没有尝试基本身份验证(如链接帖子中所述)。

Denying user "local_windows_user" access to printer "myprinter"...
Print-Job client-error-not-authorized: Not allowed to print.
[Client x] Returning IPP client-error-not-authorized for Print-Job

我的配置中是否缺少某些内容,以便 Windows 客户端不会强制提示输入密码?即使在 Windows 中配置端口并指定凭据也不会改变结果。是否可以让 CUPS 仅查看 url 进行身份验证作为解决方法?

我已尝试在当前允许的位置上使用基本身份验证,但这导致安装失败,而不是到目前为止出现提示。

允许 some_user 通过 Web 界面使用 myprinter 进行打印。当提示凭据时,连接将升级为 https。测试并DefaultEncryption Never没有改变结果。


cupsd.conf

Listen localhost:631
Listen serverip:port

Browsing On
BrowseLocalProtocols dnssd

DefaultAuthType Basic

<Location />
  Order allow,deny 
</Location>
    
# Restrict access to the admin pages...
<Location /admin>
  AuthType Default
  Order allow,deny
  Require user @SYSTEM
</Location>

# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>

# Restrict access to log files...
<Location /admin/log>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>

# Set the default printer/job policies...
<Policy default>
  # Job/subscription privacy...
  JobPrivateAccess default
  JobPrivateValues default
  SubscriptionPrivateAccess default
  SubscriptionPrivateValues default

  <Limit Get-Printer-Attributes>
    #AuthType Default
    Order allow, deny
  </Limit>

  <Limit Create-Job Print-Job Print-URI Validate-Job>
    Order deny, allow
    AuthType Basic
  </Limit>

[ommitted]

版本

Server: Fedora 37 Server
Cups Version: cups-2.4.2-5.fc37
Windows Version: Windows 10 Pro 21H2 (tested, not working), Windows 10 Pro 22H2 (tested, not working)

笔记

在普通 Linux Mint 21.1 Live 上进行了测试。所有打印机都会自动检测并在打印时提示输入密码。在服务器上,用户登录为some_user


当需要基本身份验证时Get-Printer-Attributes

Windows 将显示一般错误“无法连接..验证打印机名称等...”

杯子日志:

POST /printers/myprinter HTTP/1.1
cupsdSetBusyState: newbusy="Active clients", busy="Active clients"
[Client 6] Read: status=200, state=6
[Client 6] No authentication data provided.
[Client 6] 2.0 Get-Printer-Attributes 6
Get-Printer-Attributes ipp://some_user:password@serverip:port/printers/myprinter
cupsdIsAuthorized: username=""
[Client 6] Returning HTTP not authorized for Get-Printer-Attributes (ipp://some_user:password@serverip:port/printers/myprinter
[Client 6] cupsdSendHeader: code=426, type="text/html", auth_type=1
[Client 6] HTTP_STATE_WAITING Closing for error 32 (Broken pipe)
[Client 6] Closing connection.
cupsdSetBusyState: newbusy="Not busy", busy="Active clients"

在浏览器中访问该 URL 时,我收到警告:“您即将使用用户名登录...,但该页面不需要身份验证”。如果继续,我会进入重定向页面,该页面会在约 1 秒后重新加载,然后系统会提示我输入凭据。也许基本身份验证提示之前的 html 响应是导致 Windows 崩溃的原因。

当尝试使用基本身份验证将 URL 添加到通用网络服务器时

在这种情况下,Windows(和浏览器)将立即提示输入密码。

答案1

http 连接的问题已解决,https 不确定。我相信自签名证书与 IP 地址的结合会导致问题。或许可以将其添加到受信任的根证书中,但 Windows 似乎并不满足于此。如果我能相信文档(可能已经过时),它仍然依赖于 Internet Explorer。因此,如果在此处打开且没有错误,则还应该连接打印机。

基本上,使用Require [user or group]AuthType Basic会导致 CUPS 立即提示输入凭据,但仅此还不够,因为 CUPS 会尝试将连接升级到 https(返回 html 页面而不是提示)。

在常规部分中添加DefaultEncryption IfRequested将阻止该行为,并且 Windows 会拾取提示。

相关内容