Springe zum Hauptinhalt

Archiv

CUPS - Administration eines LINUX-Clusters

Linux-Klienten mit CUPS sind heute in der Regel so eingerichtet, dass die Benutzer ohne zusätzliche Konfiguration lokal drucken können, sofern CUPS-Drucker im Netz gefunden werden. Soll ein lokales Netz mit speziellen Rechten eingerichtet werden, dann müssen Server und Klienten entsprechend konfiguriert werden. Einige wichtige Grundlagen sollen hier beschrieben werden.

Konfiguration eines CUPS-Servers

  • unter CUPS-Server versteht man einen Rechner, der direkt mit einem Drucker kommuniziert (entweder lokal angeschlossen oder über Netz)
  • dazu läuft ein Daemon cupsd (i.allg. als root), der Funktionalität eines WEB-Servers hat und an Port 631 lauscht
  • Die Konfiguration des CUPS-Servers (Daemon cupsd) erfolgt in /etc/cups/cupsd.conf
    ACHTUNG: vor Beginn von Änderungen immer eine Sicherungskopie der zuvor funktionierenden cupsd.conf anfertigen !
  • zur Anpassung der Optionen gibt es mehrere Möglichkeiten:

Servereinstellungen konfigurieren

Aufbau Server-Konfiguration

  • Konfigurationsdaten für Server stehen in /etc/cups/cupsd.conf (Beispiel aus SL5)
    die Optionen sind im Referenz-Manual zu cupsd.conf beschrieben
  • besteht aus einzelnen Direktiven im Stile des Apache-WEB-Servers
  • jede Direktive beschreibt bestimmte Eigenschaften, von denen einige wichtige im Folgenden diskutiert werden.

Logging

  • Größe der Log-Dateien und Menge der Informationen (error_log) ist konfigurierbar
MaxLogSize 2000000000	# Dateien werden bei Erreichen rotiert (5 Zyklen)
MaxLogSize 1m           # 0 bedeutet kein Rotate
LogLevel info           # Logging des cupsd
  • AccessLog : logged alle HTTP-Reqests
    default: /var/log/cups/access_log
  • ErrorLog : Fehler und Warnungen von cupsd
    default: /var/log/cups/error_log
    1. Byte der Meldungen gibt LogLevel an:
x  Emergency (emerg)
A  Alert (alert)
c  kritischer Fehler (crit)
E  Fehler aufgetreten (error)
W  Warning - Server konnte eine Aktion nicht ausführen (warn)
N  Nachricht (notice)
I  Information (info)
D  Debug Nachricht (debug)
d  detaillierte Debug Nachricht (debug2)
  • PageLog : seitenweises Jobprotokoll
    default: /var/log/cups/page_log
    printer user job-id date-time pagenum numcopies billing

Zugriffskontrolle

  • Server lauscht am Port 631 - per default nur lokal:
    Listen localhost:631
    Freischaltung als Server für andere Klienten erfolgt mit:
    *Listen *:631
  • bevor Freischaltung des Ports erfolgt, sollte genau überlegt werden, welche Hosts oder Nutzer Zugriff haben - Steuerung mit Allow und Auth... in einzelnen Direktiven
  • Zugrifssmechanismen:
<Location /ressource>
  AuthClass     admin
  AuthGroupName admgroup
  AuthType      Basic    # oder Digest
  Order         allow,deny
  Allow         localhost
  Deny          134.109.2.*
</Location>
  • folgende Ressourcen sind möglich:
  /admin              # Admin-Interface
  /classes            # alle Drucker-Klassen
  /classes/name       # Name einer Klasse
  /jobs               # alle Jobs
  /jobs/id            # eine spezielle Job-Nr.
  /printers           # alle Drucker-Queues
  /printers/name      # Name einer Queue
  /printers/name.ppd  # zugehörige PPD
  • die angeg. Ressourcen sind alle im WEB-Broswer im URL angebbar

Authentisierung für Benutzer

  • Benutzerauthentisierung: per Passwort oder Zertifikat (AuthType)
  • Basic : mit UNIX-Name und Passwort aus /etc/passwd und PAM
  • Basic + Encryption : zur verschlüsselten PW-Übergabe !
# Typ der Authentifizierung festlegen:
DefaultAuthType Basic
<Location /pinters/pr1>
  AuthType Basic
  Encryption Required
</Location>
  • Digest : CUPS-eigene MD5-sum Passworte (nutzen wir zur CUPS-Admin.)
  • Digest-Auth. verlangt anlegen von Nutzern (Gruppen) für CUPS
  • Digest-Daten stehen unter /etc/cups/passwd.md5
  • Beispiel Gruppenauthentisierung:
# Benutzer der CUPS-Gruppe SYSTEM festlegen
# vgl. Direktive Require
SystemGroup sys root
<Location /pinters/pr1>
  AuthType Digest
  AuthClass Group
  AuthGroupName cupsadm
  Encryption Required
</Location>

Zugriffskontrolle für Hosts

  • Host-basiert in Location oder Policy: Allow 134.109.200.*
<Location /pinters/pr1>
  Deny all
  Allow 134.109.200.*
  Allow *.hrz.tu-chemnitz.de
</Location>
  • letzte Angabe erfordert Einschalten des DNS (Performance !)
    HostnameLookups on

Zugriffskontrolle zu Printer-Queues

  • neben den bisher beschriebenen Methoden gibt es eine Direktive Policy zur detaillierten Zugriffssteuerung der IPP-Requests

Verteilung von Drucker-Informationen

  • mittels Browsing kann Server seine lokalen Drucker im Netz bekannt machen (Broadcast)
  • dazu dienen verschiedene Browse* Direktiven:
# Show shared printers on the local network.
Browsing On	# Browsing/Broadcast einschalten (Empfang)
BrowseOrder allow,deny
# (Change '@LOCAL' to 'ALL' if using directed 
#    broadcasts from another subnet ??? ) 
BrowseAllow @LOCAL  # Broadcast in lokales Subnetz (Senden)
  • bei Einschalten des Browsing sollte immer Zugriffskontrolle zu Druckerqueues geprüft werden !

Verschlüsselung

  • Cups unterstützt 128-Bit Verschlüsselung
  • CUPS kann auf 2 Arten mit Verschlüsselung arbeiten:
    1. als verschlüsselter WEB-Server: SSLPort 443
    2. Verschlüsselung für bestimmte Dienste wie Passwort-Abfragen
      vgl. später in <Location> : "Encryption Required"
  • /etc/cups/ssl/server.crt enthält ein Standard-Zertifikat
  • diese Konfiguration wird i.allg. noch nicht benutzt

Konfiguration verteilter CUPS-Klienten

CUPS-Klient ist jeder Rechner, der Jobs zu anderen Rechnern zum Drucken schickt.

Methoden der Konfiguration

  1. manuelle Konfiguration von Drucker-Queues
  2. Spezifikation eines einzelnen CUPS-Servers zum Drucken
  3. automatische Konfig. von Print-Queues
  4. Spezifikation mehrerer Server zum Drucken
  5. Relaying - Vermittlung von Serverinformationen

  1. manuelle Konfiguration
    • per Kommando:
      lpadmin -p pr1 -E -v ipp://server/printers/pr1
    • rel. hoher admin. Aufwand bei großen Netzen
    • Single Point of Failure
  2. Spezifikation eines einzelnen Servers
    • in /etc/cups/client.conf : ServerName hostname
    • es wird kein lokaler cupsd benutzt (auch wenn er läuft nicht !)
    • Jobs werden nicht lokal gespoolt, sofort zum Server geschickt
  3. automatische Konfiguration von Queues
    • hierunter versteht man das Browsen und Pollen von Drucker-Informationen
    • es gibt 2 Arten:
      1. passiv: Browsen im gleichen Subnetz (Broadcast):
        Server: BrowseAddress 134.109.201.255:631
        Klient: Browsing On (ist per default gesetzt)
      2. aktiv: Pollen - Klient fragt explit CUPS-Server ab:
        Klient: BrowsePoll server1
  4. Spezifikation mehrerer Server
    • durch Angabe mehrerer BrowsePoll Direktiven
      BrowsePoll server1
      BrowsePoll server2
  5. Relaying
    • bei vielen Subnetzen ist Pollen ineffizient
    • Relaying heißt die Methode, mit der man einzelne Klienten veranlassen kann, das Pollen für ein Subnetz zu übernehmen und die gepollten Informationen dann im Subnetz zu verteilen (Browsing/Broadcast):
      BrowsePoll server
      BrowseRelay 127.0.0.1 134.109.x.255

Load Balancing und Failsafe

  • basiert auf den Methoden des Polling und Browsing
  • relisiert durch Implizite Klassen
    • gleiche Drucker auf mehreren Servern vorhanden CUPS-Ann.:
      gleicher Name == gleicher Drucker
      pr1@server1 == pr1@server2
      damit wird automatisch eine implizite Klasse pr1 gebildet
    • automatische Lastverteilung: ist server1 aktiv, dann sende Job zu server2
    • Ausfall von server1 : disable pr1@server1
    • wird in diesem Fall die Bildung von impliziten Klassen NICHT gewünscht:
      cupsd.conf: ImplicitClass off

Setzen von Default-Optionen

  • Default-Optionen sind an Drucker-Queues gebunden
  • es gibt mehrere Möglichkeiten, solche Optionen zu setzen:
    1. auf Server in printers.conf (per WEB oder lpadmin -o ...)
      diese Optionen gelten global für alle Klienten
    2. auf Klienten in printers.conf (wie auf Server)
      die Optionen gelten dann nur für Klienten
    3. auf Klienten mit lpoptions als root (/etc/cups/lpoptions)
      gilt für alle Nutzer auf Klienten
    4. lpoptions als Benutzer
      erzeugt Eintrag in $HOME/.lpoptions
      VORSICHT: im URZ KEINEN Default-Drucker eintragen

Drucken von externen Klienten

LPD-Klienten

  • CUPS unterstützt das Drucken von lpd-Klienten
  • wird realisiert per cups-lpd per inetd:
    printer stream tcp nowait lp /usr/lib/cups/daemon/cups-lpd cups-lpd
  • cups-lpd besitzt eingeschränkte Funktionalität:
    keine automatische Klienten-Konfig.; keine lpd-Optionen, damit auch keine Verschlüsselung

Windows-Klienten

  • es gibt umfangreiche Unterstützung per Samba : smb.conf
cups server = hostname
cups options = "raw,secret"
printing = cups
printcap name = cups
printing = sysv
print command = lp -d%p -oraw %s; rm -f %s
  • Samba unterstützt Bereitstellung von CUPS-Druckertreibern
    cupsaddsmb -a # erzeugt Treiber in print$ Share
    Vor. ist Einrichten einer print$-Share in smb.conf
[print$]
   comment = Printer Drivers
   path = /etc/samba/drivers
   browseable = yes
   guest ok = yes
   read only = yes
   write list = root
  • neuere Windows-Versionen (ab Win98) haben IPP-Protokoll implementiert
  • es gibt eigene IPP-Implementation in IIS (Internet Information Service)
  • CUPS-Drucker können direkt als Netzdrucker angelegt werden durch Angabe des CUPS-URI :
    http://cupsserver:631/printers/pr1
  • im gleichen Subnetz wird für einfache SW-Postscript-Drucker von CUPS ein Default-Treiber bereitgestellt (Windows 2000), der auch explizit installiert werden kann
  • mit diesem Treiber sind allgemeine PPD's nutzbar:
    generische Postscript-PPD
    generische PCL6-PPD

Filter-Programme

  • Filterprogramme dienen Formatumwandlung und Jobauswertung
  • Filter arbeit nach Pipeline-Prinzip (UNIX-like)
  • Basis sind mime.types (Typerkennung) und mime.convs (Filterauswahl)
  • benutzen CLI - Argumente sind:
    printer job user title copies options [filename]
  • benutzen ggf. Menge von Environment-Variablen, z.B.
CHARSET                benutzter Code für Job
CONTENT_TYPE           Original Dokument Format (application/postscript)
DEVICE_URI             URI der benutzten Drucker-Queue
PPD                    Dateiname der benutzten PPD
PRINTER                Name der Drucker-Queue
USER                   Name des Filter-Nutzers
...

Printer Treiber

  • sind spezielle Filterprogramme, die Konvertierung der Daten in druckerspezifisches Format realisieren
    • bei NICHT-Postscript-Drucker Wandlung von Raster Image in Printer Image
    • bei PS-Druckern z.B. Wandlung PS Level 3 in 2
  • Grundlage sind Angaben in PPD des Druckers
    in den PPD's stehen umfangreiche Spezifikationen und Optionen (s.o.)
  • Filter stehen unter /usr/lib/cups/filter
  • spezielle Angabe in PPD (CUPS-Erweiterung) kann weitere Filter auswählen:
cupsFilter: "text/* 0 texttohp"
cupsFilter: "application/vnd-cups-raster 0 rastertohp"

CUPS Backends

  • Spezialfilter die direkt mit physischem Drucker kommunizieren (eigtl. Datenausgabe)
  • VORSICHT: laufen i.allg. mit root-Rechten
  • Aufruf OHNE Argument: dient sogenanntem "discovery"
    Aufruf liefert Funktionalität des Backends
    siehe: lpinfo -v
  • Backends stehen unter /usr/lib/cups/backends
    VORSICHT: JEDE DATEI in diesem Verzeichnis wird von Browser angezeit !
  • bei fehlerhaftem return (RC=1) stopped Scheduler die Queue
  • Beispiel accurz (nicht veröffentlicht)

CUPS Notification

  • CUPS bietet Möglichkeiten, in speziellen Situationen Nachrichten per E-Mail an Benutzer zu senden
  • für Nutzer z.B. bei Jobende
  • für Admin z.B. als Warnung in Fehlerfällen
  • hier nicht weiter betrachtet

CUPS-Programmierung

  • CUPS liefert 2 Bibliotheken zur Kommunikation mit CUPS:
    • libcups zur Kommunikation mit Server
    • libcupsimage für RIP-Filter
  • Header-Files beschreiben Interface (API)
cups.h      common CUPS Definitionen
http.h      HTTP-Interface
image.h     RIP Image Infos
ipp.h       IPP-Interface
language.h  I18N Internationalisierung
md5.h       digest Interface - CUPS passwd
ppd.h       PPD Datei-Interface
raster.h    RIP Raster Definitions
  • Bibl-Rufe der Art:
cupsGetDefault();     liefert Default Drucker
cupsGetPrinters();    liefert Liste aller Drucker
  • Übersetzung:
    gcc -o output -l cups -l nsl -l socket input.c

Übersicht zu Server-Optionen

  • die folgenden Optionen werden alle in /etc/cup/cupsd.conf spezifiziert
  • Serveroptionen
ServerName cupsserver.hrz.tu-chemnitz.de
ServerAdmin cupsadmin@hrz.tu-chemnitz.de
DefaultLanguage de
Printcap /etc/printcap.cups
  • Netzwerkoptionen
HostnameLookups On      # DNS (default off)
KeepAliveTimeout 60     # Trennen nichtaktiver Verbindungen
MaxClients 100          # gleichzeitige CUPS-Klienten
MaxRequestSize 0m       # max. Job-Size (unbegrenzt)
Timeout 300             # Timeout aktiver HTTP-Requests
Listen *:631            # öffnen des Netzzugangs (lauschen nach CUPS-Servern) !!
Listen *:443            # lauschen am https port
  • Sicherheit
RemoteRoot admin        # erlaubt unauthenticated root requests
SystemGroup sys root
ServerCertificate /etc/cups/ssl/server.crt
ServerKey /etc/cups/ssl/server.key
defaultauthtype Basic
  • Zugriff auf spezielle Queues

AuthType Basic          # PAM-Auth. aller Nutzer
Require user @SYSTEM    # Zugang für alle Nutzer in /etc/passwd
Encryption Required     # Verschlüsselung gefordert
Satisfy All             # alle Zugriffs-Kriterien sind zu erfüllen
Order allow,deny        # alles verboten, außer explizit erlaubt
Allow 134.109.200.*     # erlaubt ist Zugriff von Domaine hrz

  • Protokolle
AccessLog /var/log/cups/access_log # http-log
ErrorLog /var/log/cups/error_log   # cupsd error messages
PageLog /var/log/cups/page_log     # PS Page Accounting
MaxLogSize 9999m        # 0 = unbegrenzt
LogLevel info           # none, error, warn, info, debug, debug2
  • Druckaufträge
PreserveJobHistory On   # Jobinformationen aufheben
PreserveJobFiles Off    # Jobdaten aufheben (Speicherplatz !)
MaxJobs 0               # Anzahl auf dem Server gespeicherter Jobinformationen
MaxJobsPerPrinter 0     # max. Anzahl aktiver Jobs pro Drucker
MaxJobsPerUser 0        # max. Anzahl aktiver Jobs pro Nutzer
LimitRequestBody 50m    # max. Jobgröße
  • Filter
User lp                 # ID unter der cups-Programme laufen (außer cupsd)
Group lp1               # GID ...
RIPCache 8m             # Cache Size für RIP Programme
FilterLimit 0           # fiktiver Kostenfaktor für laufende Jobs
  • CUPS-Verzeichnisse auf Server
DataDir /usr/share/cups         # z.B. Treiber-PPDs (model); Testpage (data)
DocumentRoot /usr/share/cups/doc # WEB-Help-Dokumente
FontPath /usr/share/cups/fonts  # Standard-CUPS-Fonts für PS-Konvertierung
RequestRoot /var/spool/cups     # Job-Queues
ServerBin /usr/lib/cups         # Serverprogramme: Filter, Backends, CGI, ...
ServerRoot /etc/cups            # Konfigurationsverzeichnis (cupsd.conf)
TempDir /var/spool/cups/tmp     # temp. Verz. für Konvertierungsprogramme
  • Browsing (IPP Suchfunktionen)
Browsing On             # sucht im Netz nach IPP-Druckern
BrowseProtocols CUPS    # benutzte Protokolle: CUPS (LDAP, SLP)
BrowsePort 631          # Portnr. 631 (443 https)
BrowseInterval 30       # max. Zeit zwischen browse updates
BrowseTimeout 300       # Zeit zum Löschen nicht antwortender IPP-Drucker
BrowseAllow @LOCAL      # Netzmaske für Hosts von denen IPP-Drucker erlaubt sind
BrowseOrder allow,deny  # alle Requests verboten, nur explizit erlaubte o.k.
BrowseShortNames Yes    # erlaubt kurze IPP-Namen anstelle printer@server1
ImplicitClasses On      # Druckerklassen gleichen Typs zulassen (Auswahl erster freier)
ImplicitAnyClasses Off  # anlegen von ImplicitClasses erlaubt
HideImplicitMembers Yes # Drucker in ImplicitClasses sind nicht sichtbar
  • Policies - Zugriffskontrolle für IPP Operationen
    ist umfangreiches Kapitel detaillierter Zugriffsmechanismen, z.B.
<policy default>
<limit Cancel-Job CUPS-Authenticate-Job>
require user @OWNER @SYSTEM
order deny,allow
</limit>
</policy>

-- Main.MatthiasEhrig - 18 Apr 2007