Cups Linux, un Servidor de impresión en Linux

Cups Linux nos permite configurar un equipo como servidor de impresión en Linux, además de poder instalar impresoras y compartirlas.

 
CUPS significa “Common UNIX Printing System” : Sistema común de impresión UNIX.

CUPS es compatible con impresoras Postscript y permite la detección automática de impresoras de red

 
servidor de impresion cups linux

 

Vamos a ver cómo instalar un servidor CUPS y configurarlo para instalar y compartir impresoras desde un equipo Linux que servirá como Servidor de Impresión.
 

En este artículo:

 

 

 

 

 

Instalar CUPS

 
Lo primero debemos instalar CUPS con

apt-get install cups

 

Luego activamos el servicio con

sudo systemctl start cups

o

sudo systemctl restart cups.service

 

Y si queremos que el servicio cups quede habilitado para cada inicio de la máquina:

sudo systemctl enable cups

o

sudo systemctl enable cups.service

 

 

Archivos de CUPS

 
Recordemos que usando el comando find podemos buscar archivos; aquí podemos ver todos los archivos que cups ha creado en el equipo:
 

archivos cups linux

 

Los archivos principales de configuración de cups son:
 

  • /etc/cups/cupsd.conf
  • /etc/cups/cups-files.conf

 

 

Administrar CUPS a través de GUI (Interfaz Web)

 
Podemos administrar cups a través de la interfaz Web, por medio de un navegador. Por defecto cups se activará en la interfaz loopback, accesible a través de localhost y el puerto 631.
 
cups linux gui
 

Si accedemos desde localhost (desde la propia maquina en la que hemos instalado CUPS) y con el usuario que lo instaló, podremos acceder sin problema.

De todas formas, hemos de revisar la seguridad de nuestro servidor cups para que no pueda entrar o ver las impresoras cualquiera.
 

 

Error Forbidden

 
Si tras instalar cups accedes a través de localhost con el super usuario que lo instaló, probablemente no tengas problemas.

Pero si recibes el error Forbidden (Prohibido), es que no tienes permisos para acceder.

error forbidden cups

 

El error Forbidden en cups puede deberse a diversas razones:

  • Tras instalar cups, estás intentando acceder desde otro equipo a la IP del servidor cups, sin antes haber configurado la directiva Listen : tienes que poner la IP del equipo donde está instalado cups y permitir el acceso a cups desde esa IP, para que el servidor de impresión escuche peticiones sobre esa interfaz y esa IP. A través de localhost deberías poder acceder sin problema para poder configurar todo esto.
  •  

  • La red o el equipo no están permitidas para acceder al servidor o administrarlo: directiva Location, directiva Location /admin/conf y directiva Location /admin.
  •  

  • El usuario Linux que estás utilizando no tiene permisos: revisar el grupo permitido en el archivo cups-files.conf, y las directivas anteriores mencionadas en cupsd.conf

 

 

CONFIGURAR CUPS

 
Aunque vamos a comenzar accediendo y administrando CUPS desde localhost, es importante que tengamos en mente los archivos de configuración principales de CUPS.

—> Comenzaremos con el archivo /etc/cups/cupsd.conf
 

—> También es importante el archivo  /etc/cups/cups-files.conf, en el que constará el grupo de usuarios que pueden administrar CUPS, que podemos modificar.

 
También en este último archivo aparecen las rutas de los archivos de log (registro) más importantes de CUPS.

Vamos a ver cómo configurar los archivos de configuración de cups y sus directivas para que el servidor de impresión cups funcione a nuestro gusto y tenga un cierto nivel de seguridad, además de registrar los errores y las impresiones que se realizan.
 

 

Administrar CUPS con la terminal con el comando cupsctl

 

Lo primero que podemos hacer si no podemos acceder al servidor cups, es utilizar el comando cupsctl para cups, con estos parámetros para activar la administración remota al admin, y activar la compartición de impresoras

cupsctl --remote-admin --remote-any --share-printers

 

Esto también podemos hacerlo poco a poco y de forma más granular editando las directivas del archivo cupsd.conf

Ya que este comando lo que hace es compartir todas las impresoras y además añadir

Allow all

o

Allow @LOCAL

 

( @LOCAL es mejor ya que se permite el acceso a todo pero solo desde localhost, así mantenemos el control; la opción de Allow all es un poco exagerada y peligrosa).

a las directivas de seguridad en el archivo cupsd.conf.

 

Y al añadir Allow all estamos permitiendo el acceso a TODO el mundo, no solo a la red LAN sino a Internet.
 

Vemos cómo queda el archivo principal de configuración de cups tras ejecutar el comando anterior:

permitir administracion remota cupe por terminal linux
 

 

El equivalente a este comando se puede encontrar en estas opciones en la interfaz grafica de cups a través del navegador:

cups gui permitir administracion remota
 

*** Es mejor que lo hagamos manualmente poco a poco editando las directivas de seguridad y acceso en cupsd.conf. *** (muy probablemente no deseamos que nuestro servidor cups y las impresoras compartidas sean accesibles desde Internet).

 

 

Opciones del comando cupsctl para cups, para ejecutar desde la terminal de Linux:

 

-E Cifra la conexión.

-U nombre_usuario Especifica el nombre de usuario.

-h servidor[:puerto] Especifica la dirección del servidor.



–[no-]debug-logging Activar/desactivar registro de depuración.

–[no-]remote-admin Activar/desactivar administración remota.

–[no-]remote-any Permitir/evitar acceso desde Internet.

–[no-]share-printers Activar/desactivar compartición de impresoras.

–[no-]user-cancel-any Permitir/evitar a usuarios que cancelen cualquier trabajo.

 

 

cups linux comando cupsctl
 

 

El archivo cupsd.conf

 
Podemos decir que cupsd.conf es el archivo principal de configuración de cups, junto con el archivo cups-files.conf.
 

Vemos resaltadas algunas opciones y directivas importantes para el servidor cups.

Vamos paso a paso.

archivo cupsd.conf

 

 

El archivo cups-files.conf

 
En este archivo podemos encontrar varias configuraciones importantes, como la configuración del grupo de sistema que puede acceder al servidor, y la configuración para los archivos de log de cups.

Podemos ver que por defecto el grupo con permiso para acceder al servidor cups es el grupo lpadmin, que se crea al instalar cups.

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

 

cups-files.conf systemgroup

 

Vamos a ver una a una y paso a paso las directivas que tenemos que ir retocando para configurar adecuadamente y con seguridad nuestro servidor de impresión cups.
 

 

Sobre qué IP o interfaces corre el servidor cups: Directiva Listen

 
Hemos accedido a través de localhost, en el mismo equipo que hemos instalado cups; pero si lo que queremos es que el servidor de impresión de CUPS esté disponible para acceder desde una de las interfaces de la máquina, cambiaremos y añadiremos la IP y el puerto correspondientes en la directiva Listen, así:

Listen 192.168.8.111:631

cups linux directiva Listen
 

De esta forma CUPS no solo funcionará sobre localhost, sino sobre una de sus IP´s en la red.

De nuevo accedemos a la IP de la otra interfaz (aparte de la interfaz loopback) sobre la que corre el servidor cups, pero desde el propio equipo en el que lo hemos instalado. A continuación veremos qué ocurre si accedemos desde otro equipo de la red a la IP de cups en la red.

 

cups linux listen ip puerto

 

Si accedemos desde otro equipo de la red, obtenemos el error Forbidden en CUPS (prohibido):

cups linux forbidden

 

Pues el error Forbidden en cups se debe a una de las primeras directivas que debemos revisar (aunque también puede deberse a un problema de permisos, por el grupo o los grupos de usuarios que estén permitidos para acceder al servidor; lo veremos después).
 


Esta directiva es la directiva Location.

 

 

Directivas para Autenticación y Seguridad de acceso en CUPS (Qué redes/IP´s y usuarios puede acceder al servidor de impresión)

 
Por defecto, CUPS configura que los usuarios que pueden acceder a las paginas de administracion son los usuarios dentro del grupo lpadmin.

Normalmente añadirá al usuario con permisos de super usuario que haya instalado cups.

 

Usaremos la directiva require para indicar que usuarios o grupos pueden acceder en cada una de las secciones de cups.

Require user @SYSTEM @lpadmin

 

Y la directiva

Allow from

para configurar las redes o los hosts que pueden acceder al servidor cups.

Allow from 192.168.8.0/24
Require user @SYSTEM @lpadmin

 

Aquí vemos cómo CUPS nos advierte de que se requiere autenticación para acceder a una de las secciones:

autenticacion usuarios cups
 

 

Añadir permisos y usuarios para administrar el servidor CUPS

 

Por defecto, CUPS configura que los usuarios que pueden acceder a las paginas de administracion son los usuarios dentro del grupo lpadmin.

normalmente añadirá al grupo lpadmin al usuario con permisos de super usuario que haya instalado cups, con lo cual dicho super usuario ya podrá administrar cups. Pero no hemos de olvidar que cups estará instalado con la configuración por defecto. Después veremos algunos cambios de seguridad para el acceso y permisos de usuarios para acceder y administrar cups,  en las directivas de cups.

 

Volvamos al tema de los usuarios y permisos para administrar el servidor.
 

 

Agregar usuarios al grupo de admin de cups: lpadmin

 
Tambien podemos agregar un usuario al grupo lpadmin para que pueda administrar el servidor cups linux.

 

Añadimos a un usuario al grupo lpadmin para que pueda acceder a las paginas de administracion:

sudo usermod -a -G lpadmin usuario

en este caso

sudo usermod -a -G lpadmin pruebas2

 

De esta forma hemos añadido al usuario pruebas2 al grupo lpadmin como grupo secundario, para que pueda acceder a las paginas de administracion.

modificar usuario grupo lpadmin cups

 

 

Restringir acceso al servidor : Directiva Location

 

Estas directivas las encontramos en el archivo cupsd.conf

Seguimos probando en la maquina donde instalamos CUPS, y vemos que accedemos sin problema desde Localhost. Pero debido a la directiva Location, por defecto no podrá acceder nadie más.
 

Vemos que por defecto esta directiva está así configurada:

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

 
directiva location acceso servidor cups
 

Por lo que nadie podrá acceder al servidor, a excepción del usuario que pertenezca al grupo lpadmin, y que acceda desde localhost.

Pero, ¿y si queremos que se pueda acceder al servidor desde otra IP, o desde toda la red?

Hemos de modificar la directiva.
 

  • Si queremos que todo el mundo pueda acceder al servidor (no a la administración de impresoras, eso lo veremos después) añadiremos:
Allow from all

 
Así

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

 
Claramente esto no es lo mejor ni mucho menos.
 

 

  • Así que otra opción más adecuada sería permitir el acceso a toda nuestra red local, así:
# Restrict access to the server...
<Location />
Order allow,deny
Allow from 192.168.8.0/24
</Location>

 

 

  • Y si quisiéramos que solo algunos equipos puedan acceder, cambiaremos el Allow anterior por:
# Restrict access to the server...
<Location />
Order allow,deny
Allow from 192.168.8.104
</Location>

 

 

Otras Directivas de seguridad para restringir o permitir el acceso desde ciertas redes, o a ciertos usuarios

 

Restringir el Acceso a las páginas de administración : Directiva Location /admin

 

De nuevo podemos usar las opciones anteriores, granulando un poco más, exigiendo que quien se conecte a la sección de administración pertenezca al grupo @sYSTEM o @lpadmin (recordemos que nuestro usuario ya pertenece a dicho grupo)

Para permitir el acceso desde nuestra LAN (192.168.8.0/24) pero exigiendo que el usuario sea parte del grupo lpadmin:

# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow from 192.168.8.0/24
Require user @SYSTEM @lpadmin
</Location>

 

Al usar la directiva Require user, el servidor cups nos mostrará un portal de autenticación de usuario y contraseña al intentar acceder a la página de administración:   IP_del_servidor_cups:631/admin

autenticacion cups location admin
 

 

Restringir el Acceso a los archivos de configuración : Directiva Location /admin/conf

 

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

 
Vemos la línea

Require user

 

y también podríamos permitir el acceso a un host concreto con:

Allow from 192.168.8.104

 

Si no editamos esta directiva adecuadamente, cualquier usuario que pueda encontrar la interfaz web de cups podría editar los archivos de configuración y provocar problemas en el servidor de impresión:

archivo configuracion cups interfaz web
 

 

Restringir Acceso a los archivos de registro : Directiva Location – admin – log

 
Controlamos el acceso a los archivos de registro de cups por medio de la directiva

<Location /admin/log>

en el archivo cupsd.conf.

 

<Location /admin/log>
AuthType Default
Allow from 192.168.8.104
Allow from 192.168.8.111
Require user @SYSTEM
Order allow,deny
</Location>

 

 
De nuevo para permitir el acceso a usuarios y grupos concretos utilizaremos

Require user

 

Y para permitir a hosts concretos o a ciertas redes usaremos

Allow from

 
El archivo de registro de acceso lo encontramos en

/var/log/cups/access_log

 
Y podemos modificar el nombre y la ruta del archivo en el archivo cups-files.conf, en la directiva

AccessLog /var/log/cups/access_log

 

 

Este es el archivo de registro de accesos de cups visto a través del navegador:

archivo registro accesos cups
 

 

Registros en CUPS

 

Estos son los archivos de registro de cups, que nos mostrarán los errores, los accesos, y las impresiones, respectivamente:

  • /var/log/cups/error_log
  • /var/log/cups/access_log
  • /var/log/cups/page_log

 

 

Error conocido: page_log aparece vacío en cups

 
Es bastante normal que si vamos a revisar por primera vez el archivos de registro de página page_log en cups aparece vacío (incluso después de haber impreso algunos documentos de prueba).

La directiva
 

PageLog /var/log/cups/page_log

se encuentra en el archivo cups-files.conf

 

 

—> Lo que tenemos que hacer primero es configurar correctamente la directiva  PageLogFormat en cups, para que registre adecuadamente los eventos de impresión, y todas las variables que queremos que aparezcan en el log.
 


La directiva PageLogFormat la encontramos en el archivo cupsd.conf. Aparecerá vacía por defecto.

 

Y hemos de rellenarla así para poder registrar la info de las impresiones que realice el servidor de impresión cups:

PageLogFormat "%p %u %j %T %P %C %{job-billing} %{job-originating-host-name} %{job-name} %{media} %{sides}"

 

 
—> También configuramos la opción de LogLevel y AccessLogLevel en el archivo cupsd.conf, así:

LogLevel debug
 
AccessLogLevel all
LogLevel debug2
MaxLogSize 32m

 

cups linux access log pagelogformat

 

 
—> Otro paso importante es que hemos de revisar la configuracion de rsyslog para que registre estos logs y realizar otras modificaciones en los archivos de cups para activar los registros:

 

En cups-files.conf:

le ponemos extension .log

PageLog /var/log/cups/page_log.log

 

Y finalmente en rsyslog:

page_log.* -/var/log/cups/page_log.log

 

Reiniciamos los servicios rsyslog y cups

sudo service rsyslog restart
systemctl restart cups.service

 

Ahora ya podremos enviar documentos a imprimir y comprobar como el fichero page_log.log comienza a llenarse con la info de las impresiones :

page_log cups registro
 

 

Ver la configuración de CUPS

 
Si queremos ver un resumen de la configuración aplicada a nuestro servidor cups, usaremos el comando

cupsctl

comando cupsctl ver configuracion cups
 

 

Instalar Impresoras en CUPS

 
Administrando CUPS a través de la interfaz web, podemos comenzar a instalar y administrar impresoras.

Vamos a ver cómo instalar una impresora.
 

Vamos a la pestaña administration, y vemos que tenemos la opción de

añadir una impresora (Add printer)

o

buscar impresoras (Find New Printers)

cups añadir impresora - add printer
 

 

Vamos a buscar una impresora de red con la segunda opcion, Find new printers:

cups linux find printers
 

Cups pide que seleccionemos el driver adecuado de la impresora:

cups driver impresora

 

Si no encontramos el modelo exacto de la impresora, lo buscaremos en la página oficial del fabricante y lo descargaremos, aunque también podemos utilizar la base de datos de drivers de impresoras en Open Printing.
 

 

En este caso descargamos el driver desde la terminal:

descargar driver impresora linux cups

 

Descomprimimos el archivo tar.gz:

tar -xzvf driver.tar.gz

 

y ejecutamos la instalación del driver:

cups instalar driver impresora por terminal
 

 

Y el driver quedará instalado finalmente:

driver impresora instalado en servidor cups
 

 

Tras la instalación del driver, volvemos a la interfaz de cups y continuamos con la instalación de la impresora.

 

Vemos que ahora CUPS ya detecta el driver adecuado para el modelo de impresora concreto:

cups linux driver correcto impresora de red

 

Podemos editar las opciones de la impresora:

cups opciones impresora

 

Y ya podemos realizar una prueba de impresión con la impresora instalada en cups:

prueba impresion impresora
 
–> Más info sobre CUPS
 
Hasta aquí el tutorial avanzado para configurar cups linux, instalar y compartir impresoras. Recuerda securizar tu servidor de impresión en Linux por medio del uso de las directivas, y revisar los permisos de usuarios y el grupo lpadmin.