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
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:
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
Recordemos que usando el comando find podemos buscar archivos; aquí podemos ver todos los archivos que cups ha creado en el equipo:
Los archivos principales de configuración de cups son:
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.
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.
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.
El error Forbidden en cups puede deberse a diversas razones:
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.
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:
El equivalente a este comando se puede encontrar en estas opciones en la interfaz grafica de cups a través del navegador:
*** 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.
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.
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
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.
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
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.
Si accedemos desde otro equipo de la red, obtenemos el error Forbidden en CUPS (prohibido):
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.
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:
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.
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.
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>
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.
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.
# Restrict access to the server...
<Location />
Order allow,deny
Allow from 192.168.8.0/24
</Location>
# Restrict access to the server...
<Location />
Order allow,deny
Allow from 192.168.8.104
</Location>
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
# 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:
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:
Estos son los archivos de registro de cups, que nos mostrarán los errores, los accesos, y las impresiones, respectivamente:
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
—> 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 :
Si queremos ver un resumen de la configuración aplicada a nuestro servidor cups, usaremos el comando
cupsctl
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)
Vamos a buscar una impresora de red con la segunda opcion, Find new printers:
Cups pide que seleccionemos el driver adecuado de la 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:
Descomprimimos el archivo tar.gz:
tar -xzvf driver.tar.gz
y ejecutamos la instalación del driver:
Y el driver quedará instalado finalmente:
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:
Podemos editar las opciones de la impresora:
Y ya podemos realizar una prueba de impresión con la impresora instalada en cups:
–> 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.