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
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:
- Configurar el servidor de Impresión CUPS
- Administrar CUPS con la terminal con el comando cupsctl
- El archivo cupsd.conf
- El archivo cups-files.conf
- Sobre qué IP o interfaces corre el servidor cups: Directiva Listen
- Directivas para Autenticación y Seguridad de acceso en CUPS (Qué redes/IP´s y usuarios puede acceder al servidor cups)
- 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
- Restringir el Acceso a los archivos de configuración : Directiva Location / admin/conf
- Restringir Acceso a los archivos de registro : Directiva Location / admin/ log
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:
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.
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.
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:
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.
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.
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 |
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 |
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.
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:
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.
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> |
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
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:
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:
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 |
—> 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 :
Ver la configuración de CUPS
Si queremos ver un resumen de la configuración aplicada a nuestro servidor cups, usaremos el comando
cupsctl |
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)
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.