在具有不同操作系统的网络中,通过或不通过域授权从头开始设置CUPS打印服务器
参赛作品
这样啊 大概是,CUPS打印服务是一个功能强大的解决方案,可让您在公司中组织集中式打印机管理。 确实如此,但是在设置过程中,您将需要花费一些时间来寻找解决Google众多小问题的解决方案,尤其是如果您的需求超出了标准设置手册的范围。
本文将描述CUPS打印服务器在具有活动Active Directory域的网络上的Ubuntu Server上的安装,尽管它的存在是完全可选的,并且您可以安全地跳过有关与其进行交互,设置以及与Linux和Windows客户端计算机进行交互的说明。此打印服务器。
在说明中,该域将命名为example.com ,打印服务器本身将是IP地址为10.10.100.50的cupsserver ( cupsserver.example.com ),以及客户端计算机Linux和Windows1 , Windows1 , Windows2 , Windows3和Windows XP的客户端计算机linux1 , linux2 , linux3等。等 分别用于Windows客户端计算机。
设置打印服务器
首先,我们将配置打印服务器,或者更确切地说,在其上配置管理访问权限,然后在其上配置打印,然后描述客户端计算机的配置。
我们以任何方便的方式进入打印服务器并更新其中的软件包:
root@cupsserver:~# apt update && apt uprgrade -y
接下来,检查服务器上是否安装了CUPS:
root@cupsserver:~# which cupsd
如果输出看起来像这样:
/usr/bin/cupsd
然后安装CUPS,如果没有输出,请安装CUPS:
root@cupsserver:~# apt install cups -y
现在,配置对CUPS Web界面的管理访问。 所有配置文件都位于路径/ etc / cups /中 。 首先,以防万一,我们将备份主要的CUPS配置文件:
root@cupsserver:~# cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original root@cupsserver:~# cp /etc/cups/cups-files.conf /etc/cups/cups-files.conf.original root@cupsserver:~# cp /etc/cups/cups-browsed.conf /etc/cups/cups-browsed.conf.original
但是,如果您没有执行此操作-没关系,则默认情况下,示例数据文件位于/ usr / share / cups路径中。 还值得一提的是,您可以使用以下命令检查CUPS配置文件中的所有添加选项:
root@cupsserver:~# cupsd -t
如果弄乱,密封或使用了CUPS不再支持的选项,则命令的输出将反映这些错误。
但最后,让我们开始进行设置。 对/ etc / cups /文件夹中的文件进行任何更改后,您需要重新启动CUPS服务以获得效果:
root@cupsserver:~# service cups restart root@cupsserver:~# systemctl restart cups root@cupsserver:~# /etc/init.d/cups restart
并且,如果您编辑了文件/etc/cups/cups-browsed.conf ,则由单独的cups-browsed服务负责,该服务也需要重新启动:
root@cupsserver:~# service cups-browsed restart root@cupsserver:~# systemctl restart cups-browsed root@cupsserver:~# /etc/init.d/cups-browsed restart
运行命令
root@cupsserver:~# nano /etc/cups/cupsd.conf
第一个未注释的选项是
LogLevel warn
它确定CUPS日志的最低信息内容。 CUPS日志文件位于/ var / log / cups / 。 在安装,配置和调试打印服务器时,最好将日志记录设置为调试模式。 为此,将warn更改为debug2:
LogLevel debug2
默认情况下,CUPS仅侦听来自localhost的传入连接,即在回送接口上。 为了确保这一点,您可以运行以下命令
root@cupsserver:~# netstat -plutn
其中一行将如下所示:
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 737/cupsd
进一步的行动取决于您的偏执程度。 您可以在该块中添加,该块有条件地以以下注释开头:#仅侦听来自本地计算机的连接,几行指示IP地址或子网,将允许CUPS从中侦听连接。
# Only listen for connections from the local machine. Listen localhost:631 Listen /run/cups/cups.sock # IP Listen 10.10.100.67:631 # Listen 172.16.0.0:631
或者,您可以允许CUPS监听来自所有地址的连接
# Only listen for connections from the local machine. Listen /run/cups/cups.sock Port 631
下一个配置点是发现网络打印机和共享打印机。
# Show shared printers on the local network. Browsing Off BrowseLocalProtocols dnssd
我认为,此选项应保持关闭状态,因为它确定是否将通过网络发送有关连接到打印服务器的打印机的广播信息。 但是它们都将连接到它。 因此,所有客户端计算机将立即显示所有打印机。 我们的打印服务器应该搜索并检测网络上的所有打印机,但不要毫无顾忌地通过网络发送它们。
以下是身份验证设置:
# Default authentication type, when authentication is required... DefaultAuthType Basic
定义对CUPS Web界面及其管理部分的访问权限。 为了使用户用户有权管理CUPS,必须将其添加到lpadmin系统组中:
root@cupsserver:~# usermod -a -G lpadmin user
通常,在块中的cups-files.conf配置文件中定义了允许对CUPS进行管理访问的组。
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin
如果要向某些Linux用户组添加管理打印服务器(例如printadmins)的权限,只需在lpadmin中添加空格即可。 如果该组是域,则它会稍微复杂一些,将在后面进行描述。
现在让我们进入<Location />块:
# Restrict access to the server... <Location /> Order allow,deny </Location>
顺序允许,拒绝表示禁止从任何地方进行连接,除非特别指明允许。 也就是说,您需要以“允许来自[允许的地址] *” 的形式添加IP地址,子网,主机或掩码( .example.com )的主机:
# Restrict access to the server... <Location /> Order allow,deny Allow from cupsserver # Allow from cupsserver.example.com # FQDN Allow from localhost # loopback Allow from 10.10.100.* # Allow from linux4.example.com # Allow from 172.168.5.125 # , IP </Location>
为了完全放心并进行调试,您可以保留一个设计,该设计可以从任何地方进行打印,直到进行其他所有配置为止:
# Restrict access to the server... <Location /> Order allow,deny Allow from all </Location>
让我们在打印服务器上设置对CUPS的管理访问权限。 确定您要从CUPS连接到哪些IP和/或子网,并通过与<Location />块类似的方式添加它们:
# Restrict access to the admin pages... <Location /admin> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location> # Restrict access to configuration files... <Location /admin/conf> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location> # Restrict access to log files... <Location /admin/log> Order allow,deny Allow from localhost Allow from 10.10.100.* Allow from admin.example.com </Location>
(可选)您可以添加默认界面语言。 可以使用以下命令查看可用语言的列表:
root@cupsserver:~# ls /usr/share/cups/locale
如果您需要本地化(例如ru) ,请在/etc/cups/cupsd.conf中添加一行:
DefaultLanguage ru
为了使其主机(主机名)访问打印服务器cupsserver.example.com ,需要在/ etc / cups /文件夹中创建一个client.conf文件,其内容如下:
ServerName _
以最简单的方式,可以这样完成:
root@cupsserver:/etc/cups# echo "ServerName $(cat /etc/hostname)" > /etc/cups/client.conf
由于我们假设网络中存在DNS服务器,因此最好通过其域名( cupsserver.example.com )访问打印服务器。 还可以在DNS服务器上为服务器分配CNAME别名,例如print或cups 。 为了使打印服务器能够接受此类调用的连接,必须将以下行添加到/etc/cups/cupsd.conf文件中:
ServerAlias cupsserver.example.com print cups
如果要打印服务器接受任何呼叫,或不想打扰,则可以添加以下内容:
ServerAlias *
您还需要查看/etc/cups/cups-browsed.conf文件。 该文件控制打印服务器如何搜索网络上的打印机并广播其打印机。 我建议完全禁用新闻通讯选项。 打印服务器将在网络上搜索打印机,但是从该打印机到客户端计算机的打印机将被手动连接。 下面将描述原因。 同时,我们找到了BrowseRemoteProtocols dnssd cups行 :
# Which protocols will we use to discover printers on the network? # Can use DNSSD and/or CUPS and/or LDAP, or 'none' for neither. BrowseRemoteProtocols dnssd cups
由于使用了该选项,打印服务器可以在网络上搜索共享打印机。 我们将其保持打开状态,因为打印服务器在网络上搜索打印机符合我们的利益。 但是我们绝对不需要打印服务器发送与其连接的所有打印机,否则会造成很多混乱。 为防止出现这种情况,请找到以下#BrowseLocalProtocols none选项并取消注释:
# Which protocols will we use to broadcast shared local printers to the network? # Can use DNSSD and/or CUPS, or 'none' for neither. # Only CUPS is actually supported, as DNSSD is done by CUPS itself (we ignore DNSSD in this directive). BrowseLocalProtocols none
在此,我们暂停打印服务器的配置,然后继续配置客户端计算机Windows和Linux。 它们的要求如下:允许将打印作业发送到打印服务器,并在需要打印到网络打印机时将打印作业发送到(仅)打印服务器。
例如,我们将在两台分别具有Linux(主机名linux1 )和Windows 8(主机名windows1 )的客户机之间通过打印服务器配置打印。 首先,将Windows1配置为来自打印服务器的打印接收器。 我有一台佳能i-SENSYS MF4410打印机已连接并且可以正常工作。 打印机名称为Canon-MF4400。 实际上,确保从Windows1上的打印服务器进行打印的最简单方法是转到“ 控制面板”>“程序”>“程序和功能”>“打开或关闭Windows功能” 。 在那里,我们打开了打印和文档服务> LPD打印服务组件。 这将允许您使用lpd:// windows1 / Canon-MF4400 address将打印机连接到打印服务器。 当然,问题正在成熟,为什么不使用SMB连接? 没有人禁止。 如果已调试此方法,则可以通过这种方式共享打印机,并使用SMB协议将其连接到打印服务器。 我认为,有关此连接的说明超出了本文的范围,本文已经足够多了。 同时,我们认为读者成功地访问了地址http://cupsserver:631/admin
单击“添加新打印机”按钮,并且按照直觉,逻辑和早先阅读的手册,他通过LPD协议将Windows1打印机成功连接到cupsserver [示例。 com] ,打印机页面可从以下http://cupsserver:631/printers/Canon-MF4400
获得: http://cupsserver:631/printers/Canon-MF4400
。
现在,我们在主机名为linux1的Linux客户端计算机上执行类似的操作。 通常,这部分将更大,因为客户端计算机具有自己的CUPS服务,并且除了组织打印的从属角色外,还需要以与打印服务器几乎相同的方式进行配置。
通过主机名通过环回访问CUPS的错误的更正
有一个不愉快的时刻。 如果将linux1输入域,请按照以下说明在其上配置CUPS,当您可以从外部访问linux1 WEB接口时,您可能会注意到一种荒谬的情况,但是您不能在主机本身上执行此操作! 用于本地配置打印机的图形应用程序(例如Linux Mint中的system-config-printer应用程序)拒绝运行。 如果尝试在地址http://linux1:631/
上连接到自己的CUPS,将出现一条消息“ Forbidden”或“ Bad Request”。 在许多Internet论坛上,这是一个众所周知的但尚未真正解决的问题。
在关于将Linux引入域的大多数说明中,要点之一就是使/ etc / hosts文件看起来像这样:
127.0.0.1 localhost 127.0.1.1 linux1.example.com linux1 # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe02::2 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
由于某些原因,CUPS无法将通过127.0.1.1(即通过Loopback接口)的呼叫与主机名相关联。
此错误有两种解决方法。 如果您的网络IP地址是静态的,则在/ etc / hosts文件中,将 127.0.1.1更改为客户端计算机的外部网络接口的IP地址,例如:
127.0.0.1 localhost 192.168.1.50 linux1.example.com linux1
或者,由于您将Linux输入域,因此它假定DHCP和Active Directory DNS服务器正在网络上运行。 在这种情况下,只需注释掉这一行:
127.0.0.1 localhost # 127.0.1.1 linux1.example.com linux1
尚未发现此操作的性能差异或问题。
在Linux客户端计算机上设置CUPS连接侦听地址
我们以任何方便的方式进入linux1 。 编辑文件/etc/cups/cupsd.conf :
user@linux1:~$ sudo nano /etc/cups/cupsd.conf
我们在其中找到,添加或修改行:
DefaultLanguage ru # /usr/share/cups/locale ServerAlias linux1.example.com linux1 [CNAME DNS ] ServerAlias * # Listen /run/cups/cups.sock Listen localhost:631 # localhost Listen 10.10.100.50:631 # IP . Listen cupsserver:631 # . IP , Listen linux1:631 # Port 631 # Listen /run/cups/cups.sock Browsing off # . DefaultAuthType Basic # . Kerberos,
设置CUPS连接侦听地址
在上一个块中,我们配置了连接到CUPS的功能。 现在,让我们继续设置打印权限,以及linux1主机上CUPS服务的管理页面。 如果关闭,我们将重新打开/etc/cups/cupsd.conf文件,并继续编辑<Location /> , <Location / admin> , <Location / admin / conf> , <Location / admin / log>块:
# Restrict access to the server... <Location /> Order allow,deny # " , " Allow from localhost # linux1 Allow from linux1 # . Allow from cupsserver # CUPS DNS, . , Allow from cupsserver.example.com # FQDN Allow from 10.10.100.50 # IP **cupsserver** </Location> # Restrict access to the admin pages... <Location /admin> Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location> # Restrict access to configuration files... <Location /admin/conf> # Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location> # Restrict access to log files... <Location /admin/log> # Order allow,deny # Allow from localhost # Allow from linux1 # Allow from 10.10.101.71 # , IP Allow from 10.20.50.* # , IT AuthType Default # CUPS . Require user @SYSTEM # CUPS </Location>
配置网络打印机的分发和广播
即使在Linux客户机(在本例中为linux1)上 ,您也需要编辑/etc/cups/cups-browsed.conf文件:
user@linux1:~$ sudo nano /etc/cups/cups-browsed.conf BrowseRemoteProtocols none # none . BrowseLocalProtocols cups # . DNSSD , cupsd.conf BrowseOrder Allow,Deny # Order cupsd.conf - , BrowseAllow 10.10.100.50 # IP BrowseAllow cupsserver # BrowseAllow cupsserver.example.com #
配置管理访问
在打印服务器和任何Linux客户端计算机上的CUPS WEB界面上,有关管理访问的更多信息。 即使您拥有30到50台计算机,也需要统一CUPS上的授权,并且不要紧记每台计算机的密码或密码。 这在所有Linux机器上都很重要,因为要将打印机添加到服务器,必须首先在本地安装它。 我看到几种方法。
第一种是在每个Linux系统上创建一个printeradmin用户(例如),并将lpadmin添加到该组:
user@linux1:~$ sudo usermod -a -G lpamin printeradmin
并使用他的凭据登录到http://_:631/admin
。
第二个选项几乎相同,建议在系统中创建一个组,例如printersadmins ,在其中添加所需的CUPS管理员( printeradmin , user ):
user@linux1:~$ sudo groupadd printersadmins user@linux1:~$ sudo usermod -a -G printersadmins printeradmin user@linux1:~$ sudo usermod -a -G printersadmins user
然后,您需要在/etc/cups/cups-files.conf文件中找到该行。
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin
并添加一个或多个有权通过空格管理CUPS的用户组。
# Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin printersadmins somegroup
最后,第三种选择。 使打印服务器的管理员和客户端计算机的CUPS成为用户的域组。 为此,必须将打印服务器和Linux客户端计算机加入AD域。 有几种方法可以将Linux连接到Windows域,但据我所知,主要方法是使用winbind和SSSD(realmd)连接。 本文中未包含对这些方法的描述,因此,我将仅关注与CUPS特别相关的方面。
配置对CUPS管理使用域用户组
在Linux中,加入中央授权系统的每种方法都会创建一个特殊的“管道”文件,应用程序可通过该文件查看域用户列表。 为了使CUPS能够做到这一点,您需要允许它使用AppArmor中的管道对用户进行身份验证。 AppArmor是Linux安全访问控制模块。 将某些程序限制为其策略中列出的文件集。 要将CUPS授予通过winbindd使用域用户和组的权利,请将以下行添加到/etc/apparmod.d/local/usr.sbin.cupsd文件中:
/var/lib/samba/winbindd_privileged/pipe rw
如果Linux通过SSSD输入到域中,则必须在/etc/apparmod.d/local/usr.sbin.cupsd中指定其管道的位置,并在其中添加以下行:
/var/lib/sss/pipes/private/pam rw
另外,对于SSSD,这允许进行身份验证(找出谁在登录),但是为了进行身份验证(确定用户是否有权管理CUPS),还必须将该行添加到SSSD配置文件/etc/sssd/sssd.conf中 :
ad_gpo_map_interactive = +cups
从条件上来讲,这使CUPS有权“查看” SSSD。
此外,由于CUPS现在依赖于SSSD服务,因此您需要告诉CUPS它应在SSSD之后启动,否则它将在打开时脱落,并且每次都需要手动打开。
添加CUPS指令以在SSSD之后启动。 沿着路径/ lib / systemd / system /编辑cups.service服务文件 ,将After语句添加到[Unit]部分:
[Unit] Description=CUPS Scheduler Documentation=man:cupsd(8) After=sssd.service
因此,将CUPS配置为通过域进行基本授权,即通过输入具有CUPS管理特权的域用户的登录名和密码进行授权。
可以对授权进行不同的配置,但是原理(管道文件)通常是通用的,并且可以通过类推为LDAP,FreeIPA和其他目录服务配置授权。
在Linux上安装打印机
在Linux上安装打印机通常是一项特定的任务,对于不同的品牌甚至型号,该任务都不相同。 因此,我认为没有理由描述打印机的安装,并且假设linux1主机安装了名称为Kyocera-1024FP的Kyocera-1024FP打印机,并且打印机页面位于http://linux1:631/printers/Kyocera-1024FP
。
现在,已经配置了Linux服务器和客户端计算机,其中一些已连接了打印机,并且还具有用于打印的Windows计算机,即使必须在其中一台PC上更换打印机,整个系统也必须稳定。 ,那么这不应意味着对全部PC中的一半(如果不是全部)进行重新配置。 此外,您需要尽可能少的驱动程序问题。 这很有可能。
打印机组(类)
Canon-MF4400 c windows1 LPD. http://cupsserver:631/printers/Canon-MF4400
. cupsserver http://cupsserver:631/admin
. " " [Add Class]. . "", "", "", . . Canon-MF4400 , "" , printer-windows1 , "" "" , " ".
printer-windows1 Canon-MF4400 . Canon-MF4400 — http://cupsserver:631/classes/printer-windows1
.
linux1 Kyocera-1024FP. HTTP. " (http)" [Internet Printing Protocol (http)], "Generic", "IPP Everywhere". , linux1 — Kyocera-1024FP . http://cupsserver:631/printers/Kyocera-1024FP
. printer-windows1 printer-linux1 c Kyocera-1024FP . http://cupsserver:631/classes/printer-linux1
.
Kyocera-1024FP linux1 cupsserver windows1 Windows 8 (!) . " ". http://_c:631/classes/_
. — http://cupsserver:631/classes/printer-linux1
. "Generic", — "MS Publisher Imagesetter". , printer-linux1 http://cupsserver:631
. , Kyocera-1024FP.
Canon-MF4400 windows1 cupsserver linux1 Linux (!) . , Kyocera-1024FP cupsserver . linux1 " (http)", ( Canon-MF4400 ) — http://cupsserver:631/classes/printer-windows1
. "Generic", — "IPP Everywhere". , — printer-windows1 . linux1 http://linux1:631/printers/printer-windows1
, .
, , , , , . — , , , , . , . "IPP Everywhere" "MS Publisher Imagesetter" , .., .
结论
, - , . , , , , .