Configurar un servidor de impresión CUPS desde cero con y sin autorización de dominio en una red con diferentes sistemas operativos

Configurar un servidor de impresión CUPS desde cero con y sin autorización de dominio en una red con diferentes sistemas operativos


Entrada


Entonces Presumiblemente, el servicio de impresión CUPS es una solución poderosa que le permite organizar la administración centralizada de impresoras en la empresa. Así es, pero durante el proceso de configuración necesitará pasar algún tiempo buscando una solución a los muchos problemas pequeños y obvios de Google, especialmente si su necesidad va más allá de los manuales de configuración estándar.


El artículo describirá la instalación del servidor de impresión CUPS en Ubuntu Server en una red con un dominio activo de Active Directory, aunque su presencia no es necesaria y puede omitir con seguridad las instrucciones para configurar la interacción con él, configurarlo, así como configurar máquinas cliente Linux y Windows para interactuar con Este servidor de impresión.


En las instrucciones, el dominio se llamará example.com , el servidor de impresión en sí será cupsserver ( cupsserver.example.com ) con una dirección IP de 10.10.100.50, y las máquinas cliente linux1 , linux2 , linux3 , etc. para las máquinas cliente Linux y windows1 , windows2 , windows3 y etc. para máquinas cliente de Windows, respectivamente.


Configurar un servidor de impresión


En primer lugar, configuraremos el servidor de impresión, o mejor dicho, configuraremos el acceso administrativo al mismo, luego configuraremos la impresión en él y luego describiremos la configuración de las máquinas cliente.


Vamos al servidor de impresión de cualquier manera conveniente y actualizamos los paquetes en él:


root@cupsserver:~# apt update && apt uprgrade -y 

A continuación, verifique si CUPS está instalado en el servidor:


 root@cupsserver:~# which cupsd 

Si el resultado se parece a esto:


 /usr/bin/cupsd 

entonces se instala CUPS, si no hay salida, instale CUPS:


 root@cupsserver:~# apt install cups -y 

Ahora configure el acceso administrativo a la interfaz web de CUPS. Todos los archivos de configuración se encuentran en la ruta / etc / cups / . Para empezar, por si acaso, realizaremos una copia de seguridad de los principales archivos de configuración de 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 

Sin embargo, si no hizo esto, no importa, de manera predeterminada, los archivos de datos de muestra se encuentran a lo largo de la ruta / usr / share / cups . También vale la pena mencionar que puede verificar cualquier opción agregada en los archivos de configuración de CUPS con el comando:


 root@cupsserver:~# cupsd -t 

Si estropeó algo, lo selló o usó una opción que ya no es compatible con CUPS, la salida del comando reflejará estos errores.


Pero finalmente, comencemos con la configuración. Después de cualquier cambio en los archivos en la carpeta / etc / cups / , debe reiniciar el servicio CUPS para obtener el efecto:


 root@cupsserver:~# service cups restart  root@cupsserver:~# systemctl restart cups  root@cupsserver:~# /etc/init.d/cups restart 

Y si editó el archivo /etc/cups/cups-browsed.conf , entonces es responsable de él un servicio separado de tazas , que también debe reiniciarse:


 root@cupsserver:~# service cups-browsed restart  root@cupsserver:~# systemctl restart cups-browsed  root@cupsserver:~# /etc/init.d/cups-browsed restart 

Ejecuta el comando


 root@cupsserver:~# nano /etc/cups/cupsd.conf 

La primera opción sin comentar es


 LogLevel warn 

Determina el contenido mínimo de información de los registros de CUPS. Los archivos de registro de CUPS se encuentran en / var / log / cups / . En el momento de la instalación, configuración y depuración del servidor de impresión, sería aconsejable poner el registro en modo de depuración. Para hacer esto, cambie warn a debug2:


 LogLevel debug2 

De forma predeterminada, CUPS escucha las conexiones entrantes solo desde localhost , es decir, en la interfaz de bucle invertido. Para asegurarse de esto, puede ejecutar el comando


 root@cupsserver:~# netstat -plutn 

Una de las líneas se verá así:


 tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 737/cupsd 

Otras acciones dependen del grado de su paranoia. Puede agregar en el bloque, que comienza condicionalmente con el comentario #Solo escuche conexiones desde la máquina local, varias líneas con las direcciones IP o subredes, desde donde CUPS podrá escuchar las conexiones.


 # 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 

O puede permitir que CUPS escuche conexiones desde todas las direcciones


 # Only listen for connections from the local machine. Listen /run/cups/cups.sock Port 631 

El siguiente punto de configuración es el descubrimiento de la red y las impresoras compartidas.


 # Show shared printers on the local network. Browsing Off BrowseLocalProtocols dnssd 

En mi opinión, esta opción debe permanecer desactivada, ya que determina si la información de transmisión se enviará a través de la red sobre las impresoras conectadas al servidor de impresión. Pero todos estarán conectados a eso. Y en consecuencia, todas las máquinas cliente mostrarán inmediatamente todas las impresoras. Nuestro servidor de impresión debe buscar y detectar todas las impresoras en la red, pero no enviarlas sin pensar a través de la red.


Las siguientes son las configuraciones de autenticación:


 # Default authentication type, when authentication is required... DefaultAuthType Basic 

Define los derechos de acceso a la interfaz web de CUPS, así como a su parte administrativa. Para que el usuario tenga derecho a administrar CUPS, debe agregarse al grupo de sistemas lpadmin :


 root@cupsserver:~# usermod -a -G lpadmin user 

En general, los grupos que tienen acceso administrativo a CUPS se definen en el archivo de configuración cups-files.conf en el bloque


 # Administrator user group, used to match @SYSTEM in cupsd.conf policy rules... # This cannot contain the Group value for security reasons... SystemGroup lpadmin 

Si desea agregar derechos para administrar un servidor de impresión, por ejemplo, printadmins , a un determinado grupo de usuarios de Linux, simplemente agréguelos con un espacio para lpadmin . Si el grupo es dominio, entonces es un poco más complicado y se describirá más adelante.


Ahora pasemos al bloque <Ubicación /> :


 # Restrict access to the server... <Location /> Order allow,deny </Location> 

Orden permitir, denegar significa que las conexiones desde cualquier lugar están prohibidas a menos que el permiso se indique específicamente. Es decir, debe agregar direcciones IP, subredes, hosts o hosts por máscara ( .example.com ) en el formulario " Permitir desde [dirección permitida] *":


 # 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> 

Para una total confianza y depuración, puede dejar, hasta que configure todo lo demás, un diseño que permitirá imprimir desde cualquier lugar:


 # Restrict access to the server... <Location /> Order allow,deny Allow from all </Location> 

Configuremos el acceso administrativo a CUPS en el servidor de impresión. Decida a qué IP y / o subredes se va a conectar desde CUPS, y agréguelos por analogía con el bloque <Ubicación /> :


 # 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> 

Opcionalmente, puede agregar el idioma predeterminado de la interfaz. La lista de idiomas disponibles se puede ver con el comando:


 root@cupsserver:~# ls /usr/share/cups/locale 

Si la localización que necesita, por ejemplo ru , es, agregue una línea a /etc/cups/cupsd.conf :


 DefaultLanguage ru 

Para que su servidor de impresión cupsserver.example.com sea ​​accedido por su host (nombre de host), debe crear un archivo client.conf en la carpeta / etc / cups / con el siguiente contenido:


 ServerName _ 

De la manera más simple, esto se puede hacer así:


 root@cupsserver:/etc/cups# echo "ServerName $(cat /etc/hostname)" > /etc/cups/client.conf 

Dado que suponemos que hay un servidor DNS en la red, será preferible que pueda acceder al servidor de impresión por su nombre de dominio ( cupsserver.example.com ). Al servidor también se le puede asignar un alias CNAME en el servidor DNS, como print o cups . Para que el servidor de impresión acepte conexiones en tales llamadas, debe agregar la siguiente línea al archivo /etc/cups/cupsd.conf :


 ServerAlias cupsserver.example.com print cups 

Si desea que el servidor de impresión acepte cualquier llamada, o no desea molestarse, puede agregar esto:


 ServerAlias * 

También debe buscar dentro del archivo /etc/cups/cups-browsed.conf . Este archivo controla cómo el servidor de impresión busca impresoras en la red y difunde sus impresoras. Sugiero deshabilitar completamente la opción de boletín informativo. El servidor de impresión buscará la impresora en la red, pero desde allí las impresoras a las máquinas cliente se conectarán manualmente. A continuación se describirá por qué. Mientras tanto, encontramos la línea 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 

Gracias a esta opción, el servidor de impresión busca impresoras compartidas en la red. Lo dejamos encendido, ya que nos interesa que el servidor de impresión busque la impresora en la red. Pero no necesitamos absolutamente el servidor de impresión para enviar todas las impresoras conectadas a él, de lo contrario habrá mucha confusión. Para evitar este escenario, encuentre la siguiente opción #BrowseLocalProtocols none y descomente:


 # 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 

En esto, suspendemos la configuración del servidor de impresión y procedemos a la configuración de las máquinas cliente Windows y Linux. Los requisitos para ellos son los siguientes: permitir que los trabajos de impresión se envíen al servidor de impresión y enviar trabajos de impresión (y solo) al servidor de impresión si es necesario imprimir en una impresora de red.


Como ejemplo, configuraremos la impresión a través de un servidor de impresión entre dos máquinas cliente con Linux (nombre de host linux1 ) y Windows 8, respectivamente (nombre de host windows1 ). Comencemos configurando windows1 como receptor de impresión desde un servidor de impresión. Tengo una impresora Canon i-SENSYS MF4410 conectada y funcionando normalmente. El nombre de la impresora es Canon-MF4400. De hecho, la forma más fácil de garantizar la impresión desde un servidor de impresión en Windows1 es ir al Panel de control> Programas> Programas y características> Activar o desactivar las características de Windows . Allí activamos el componente Servicios de impresión y documentos> Servicio de impresión LPD . Esto le permitirá conectar esta impresora al servidor de impresión utilizando la dirección lpd: // windows1 / Canon-MF4400 . Por supuesto, la pregunta está madurando, ¿por qué no conectarse usando SMB? Nadie lo prohíbe. Si ha depurado este método, puede compartir la impresora de esta manera y conectarla al servidor de impresión utilizando el protocolo SMB. Las instrucciones para esta conexión, en mi opinión, están más allá del alcance de este artículo, que ya es bastante voluminoso. Mientras tanto, creemos que el lector se dirigió con éxito a la dirección http://cupsserver:631/admin hizo clic en el botón "Agregar una nueva impresora", y siguiendo la intuición, la lógica y los manuales leídos anteriormente, conectó con éxito la impresora con windows1 a través del protocolo LPD al cupsserver [ejemplo. com] y la página de la impresora está disponible en http://cupsserver:631/printers/Canon-MF4400 .


Ahora realizamos una operación similar en la máquina cliente Linux con el nombre de host linux1 . En general, esta parte será mucho más grande, ya que la máquina cliente tiene su propio servicio CUPS y también debe configurarse de la misma manera que un servidor de impresión, excepto por su papel subordinado en la organización de la impresión.


Corrección del error al acceder a CUPS mediante loopback por nombre de host


Hay un momento desagradable. Si ingresa linux1 en un dominio, configure CUPS en él de acuerdo con estas instrucciones, puede notar una situación absurda cuando puede acceder a la interfaz web de linux1 desde el exterior, ¡pero no puede hacerlo en el propio host! Y las aplicaciones gráficas para la configuración local de impresoras, como la aplicación system-config-printer en Linux Mint, se niegan a funcionar. Si intenta conectarse a su propio CUPS en la dirección http://linux1:631/ aparecerá un mensaje "Prohibido" o "Solicitud incorrecta". Este es un problema bien conocido y no resuelto en muchos foros de Internet.


En la mayoría de las instrucciones sobre la introducción de Linux en un dominio, uno de los puntos es hacer que el archivo / etc / hosts se vea así:


 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 

Por alguna razón, CUPS no puede asociar llamadas a través de 127.0.1.1, es decir, a través de la interfaz Loopback, con el nombre del host.


Este error se soluciona de dos maneras. Si las direcciones IP de su red son estáticas, en el archivo / etc / hosts, corrija 127.0.1.1 para la dirección IP de la interfaz de red externa de la máquina cliente, por ejemplo:


 127.0.0.1 localhost 192.168.1.50 linux1.example.com linux1 

O, dado que ingresa Linux en el dominio, se supone que DHCP y el servidor DNS de Active Directory se están ejecutando en su red. En este caso, solo comente esta línea:


 127.0.0.1 localhost # 127.0.1.1 linux1.example.com linux1 

Aún no se han detectado diferencias en el rendimiento o problemas de esta acción.


Configuración de direcciones de escucha de conexión CUPS en máquinas cliente Linux


Vamos a linux1 de cualquier manera conveniente. Edición del archivo /etc/cups/cupsd.conf :


 user@linux1:~$ sudo nano /etc/cups/cupsd.conf 

Encontramos, agregamos o modificamos líneas en él:


 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,      

Configuración de direcciones de escucha de conexión CUPS


En el bloque anterior, configuramos la capacidad de conectarse a CUPS. Ahora pasemos a configurar permisos para imprimir, así como a las páginas administrativas del servicio CUPS en el host linux1 . Reabrimos , si está cerrado, el archivo /etc/cups/cupsd.conf y procedemos a editar los bloques <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> 

Configuración de la distribución y difusión de impresoras de red.


Incluso en una máquina cliente Linux, en este caso linux1 , necesita editar el archivo /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 #     

Configurar acceso administrativo


Unas palabras más sobre el acceso administrativo, tanto en la interfaz CUPS WEB en un servidor de impresión como en cualquier máquina cliente Linux. Incluso si tiene 30-50 computadoras, debe unificar la autorización en CUPS y no tener en cuenta ni las contraseñas de cada máquina. Y esto es importante en todas las máquinas Linux, porque para agregar una impresora al servidor, primero debe instalarla localmente. Veo varias formas


El primero es crear un usuario de printeradmin en cada sistema Linux (por ejemplo) y agregar lpadmin al grupo:


 user@linux1:~$ sudo usermod -a -G lpamin printeradmin 

e inicie sesión en http://_:631/admin usando sus credenciales.


La segunda opción es casi idéntica y sugiere crear un grupo en el sistema, por ejemplo, printersadmins , agregando allí el administrador CUPS requerido ( printeradmin , usuario ):


 user@linux1:~$ sudo groupadd printersadmins user@linux1:~$ sudo usermod -a -G printersadmins printeradmin user@linux1:~$ sudo usermod -a -G printersadmins user 

Entonces necesita encontrar la línea en el archivo /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 

y agregue uno o más grupos de usuarios con el derecho de administrar CUPS a través de un espacio.


 # 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 

Y finalmente, la tercera opción. Haga que los administradores del servidor de impresión y las CUPS de las máquinas cliente sean un grupo de usuarios de dominio. Para hacer esto, el servidor de impresión y las máquinas cliente de Linux deben unirse al dominio AD. Existen varios métodos para conectar Linux al dominio de Windows, pero que yo sepa, los principales se conectan mediante winbind y SSSD (realmd). No se incluye una descripción de estos métodos en el artículo, por lo que me centraré solo en los puntos que se relacionan específicamente con CUPS.


Configuración del uso de grupos de usuarios de dominio para la administración de CUPS


Cada método de unirse a un sistema de autorización central en Linux crea un archivo especial "pipe" a través del cual las aplicaciones pueden ver la lista de usuarios del dominio. Para que CUPS pueda hacer esto, debe permitir que use pipe en AppArmor para autenticar a los usuarios. AppArmor es un módulo de control de acceso de seguridad de Linux. Limita ciertos programas al conjunto de archivos enumerados en sus políticas. Para agregar CUPS el derecho de usar usuarios y grupos de dominio a través de winbindd, agregue la siguiente línea al archivo /etc/apparmod.d/local/usr.sbin.cupsd :


 /var/lib/samba/winbindd_privileged/pipe rw 

Si se ingresa Linux en el dominio a través de SSSD, debe especificar la ubicación de su canalización en /etc/apparmod.d/local/usr.sbin.cupsd , agregando la línea allí:


 /var/lib/sss/pipes/private/pam rw 

Además, en el caso de SSSD, esto permite la autenticación (para averiguar quién inicia sesión), pero para autenticar (averiguar si el usuario tiene derecho a administrar CUPS), también debe agregar la línea al archivo de configuración SSSD /etc/sssd/sssd.conf :


 ad_gpo_map_interactive = +cups 

Esto, condicionalmente hablando, le da a CUPS el derecho de "mirar" en SSSD.


Además, debido al hecho de que CUPS ahora depende del servicio SSSD, debe decirle a CUPS que debe comenzar después de SSSD, de lo contrario, se caerá cuando se encienda y deberá encenderse manualmente cada vez.


Agregue instrucciones de CUPS para iniciar después de SSSD. Edite el archivo de servicio cups.service a lo largo de la ruta / lib / systemd / system / , agregando la instrucción After a la sección [Unidad] :


 [Unit] Description=CUPS Scheduler Documentation=man:cupsd(8) After=sssd.service 

Por lo tanto, CUPS se configura para la autorización básica a través de un dominio, es decir, la autorización al ingresar el inicio de sesión y la contraseña de un usuario de dominio con privilegio de administración de CUPS.


La autorización se puede configurar de manera diferente, pero el principio (archivo de tubería) es generalmente universal y existe la posibilidad de configurarlo por analogía para LDAP, FreeIPA y otros servicios de directorio.


Instalar una impresora en Linux


Instalar una impresora en Linux a menudo es una tarea específica, diferente para diferentes marcas e incluso modelos. Por lo tanto, no veo ninguna razón para describir la instalación de la impresora y asumo que el host linux1 tiene una impresora Kyocera-1024FP con el nombre Kyocera-1024FP instalado , y la página de la impresora está disponible en http://linux1:631/printers/Kyocera-1024FP .


Ahora que el servidor Linux y las máquinas cliente están configuradas, las impresoras están conectadas a algunas de ellas, y también hay máquinas Windows con las que imprimir, y todo este sistema debe ser estable, incluso si es necesario reemplazar la impresora en una de las PC , entonces esto no debería implicar la reconfiguración de una buena mitad de todas las PC, si no todas. Además, necesita la menor cantidad posible de problemas con los controladores. Y es bastante posible.


Grupos de impresoras (clases)


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-MF4400http://cupsserver:631/classes/printer-windows1 .


linux1 Kyocera-1024FP. HTTP. " (http)" [Internet Printing Protocol (http)], "Generic", "IPP Everywhere". , linux1Kyocera-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" , .., .


Conclusión


, - , . , , , , .

Source: https://habr.com/ru/post/443094/


All Articles