Linux - Netzwerk und Serveradminstration Drucker Server: Unterschied zwischen den Versionen
(→Client) |
(→Server) |
||
| Zeile 58: | Zeile 58: | ||
;Installation | ;Installation | ||
*sudo apt install cups printer-driver-cups-pdf libreoffice | *sudo apt install cups printer-driver-cups-pdf libreoffice | ||
| + | ;Queue mit cups-pdf-Backend anlegen | ||
| + | Wichtig: die Device-URI muss explizit auf <code>cups-pdf:/</code> gesetzt werden. Ohne diesen Schritt bleiben Druckjobs im allgemeinen Spool <code>/var/spool/cups</code> hängen, statt vom cups-pdf-Backend verarbeitet zu werden. | ||
| + | *sudo lpadmin -p PDF -v cups-pdf:/ -m everywhere -E | ||
| + | ;Kontrolle | ||
| + | *lpstat -v PDF | ||
| + | Erwartete Ausgabe: | ||
| + | <pre> | ||
| + | device for PDF: cups-pdf:/ | ||
| + | </pre> | ||
| + | Steht hier etwas anderes, an dieser Stelle nicht weitermachen. | ||
;Freigabe aktivieren | ;Freigabe aktivieren | ||
| + | *sudo lpadmin -p PDF -o printer-is-shared=true | ||
*sudo cupsctl --share-printers --remote-any | *sudo cupsctl --share-printers --remote-any | ||
| − | |||
| − | |||
| − | |||
;Ausgabeverzeichnis festlegen | ;Ausgabeverzeichnis festlegen | ||
Die PDFs sollen direkt nach <code>/var/www/html</code> geschrieben werden (später Basis für einen Apache-Webserver). | Die PDFs sollen direkt nach <code>/var/www/html</code> geschrieben werden (später Basis für einen Apache-Webserver). | ||
| Zeile 72: | Zeile 80: | ||
Grp lpadmin | Grp lpadmin | ||
DecodeHexStrings 1 | DecodeHexStrings 1 | ||
| − | |||
</pre> | </pre> | ||
;Berechtigungen setzen | ;Berechtigungen setzen | ||
| − | *sudo rm /var/www/html/index.html | + | *sudo rm -f /var/www/html/index.html |
| − | *sudo chown root: | + | *sudo chown root:lpadmin /var/www/html |
| − | *sudo chmod | + | *sudo chmod 2775 /var/www/html |
| + | Statt <code>1777</code> wird hier <code>2775</code> mit gesetztem SetGID-Bit verwendet: Neue PDFs erben automatisch die Gruppe <code>lpadmin</code> (siehe <code>Grp lpadmin</code> in der Konfiguration oben), statt dass jeder Systembenutzer uneingeschränkten Schreibzugriff auf das komplette Verzeichnis hat. | ||
;AppArmor freigeben | ;AppArmor freigeben | ||
AppArmor blockiert standardmäßig Schreibzugriff von cupsd außerhalb von <code>/var/spool/cups-pdf</code>. Folgende Zeile in <code>/etc/apparmor.d/usr.sbin.cupsd</code> innerhalb des <code>profile /usr/sbin/cupsd {...}</code>-Blocks ergänzen: | AppArmor blockiert standardmäßig Schreibzugriff von cupsd außerhalb von <code>/var/spool/cups-pdf</code>. Folgende Zeile in <code>/etc/apparmor.d/usr.sbin.cupsd</code> innerhalb des <code>profile /usr/sbin/cupsd {...}</code>-Blocks ergänzen: | ||
| Zeile 85: | Zeile 93: | ||
</pre> | </pre> | ||
*sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.cupsd | *sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.cupsd | ||
| + | ;Kontrolle | ||
| + | *sudo aa-status | grep cupsd | ||
| + | Muss den <code>cupsd</code>-Eintrag im enforce-Modus zeigen, ohne Parser-Fehler. | ||
;CUPS neu starten | ;CUPS neu starten | ||
*sudo systemctl restart cups | *sudo systemctl restart cups | ||
| Zeile 91: | Zeile 102: | ||
*echo "Testseite" > test.txt | *echo "Testseite" > test.txt | ||
*lp -d PDF test.txt | *lp -d PDF test.txt | ||
| + | *sleep 3 | ||
*ls -la /var/www/html | *ls -la /var/www/html | ||
| + | *sudo journalctl -k --since "1 min ago" | grep -i DENIED | ||
| + | Erst wenn die PDF in <code>/var/www/html</code> liegt und keine AppArmor-DENIED-Zeile erscheint, weiter zum Client-Kapitel. | ||
= Client = | = Client = | ||
Version vom 24. Juli 2026, 09:13 Uhr
Vorarbeiten
- Im Nameserver eintragen und testen
cups.it2XX.int IN A 172.26.2XX.3
Debian Template klonen
DATEN
| Parameter | Wert | Erläuterung |
|---|---|---|
| Netzwerk (NIC) | LAN | Interface-Zuweisung in VirtualBox |
| IP | 172.26.2XX.3 | Statische IP |
| CIDR | 24 | Classless Inter-Domain Routing Präfixlänge |
| GW | 172.26.2XX.1 | GATEWAY |
| NS | 10.88.2XX.21 | Resolver |
| FQDN | cups.it2XX.int | Fully Qualified Domain Name |
| SHORT | cups | Short Name |
| DOM | it2XX.int | Domain Name |
Zertifikat holen
- Wir befinden uns auf dem CUPS-Server
- wget https://web.samogo.de/certs/it2XX.int.tgz -O it.int.tgz
- tar -C /tmp -xvzf it.int.tgz
- mv /tmp/fullchain.pem /etc/ssl/own.crt
- mv /tmp/privkey.pem /etc/ssl/own.key
Apache2
- Installation
- apt install apache2
- SSL Modul aktivieren
- a2enmod ssl
- Konfiguration
- vi /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:443>
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/own.crt
SSLCertificateKeyFile /etc/ssl/own.key
</VirtualHost>
- Restart und Kontrolle
- systemctl restart apache2
- ss -lntp | grep apache2
Server
- Installation
- sudo apt install cups printer-driver-cups-pdf libreoffice
- Queue mit cups-pdf-Backend anlegen
Wichtig: die Device-URI muss explizit auf cups-pdf:/ gesetzt werden. Ohne diesen Schritt bleiben Druckjobs im allgemeinen Spool /var/spool/cups hängen, statt vom cups-pdf-Backend verarbeitet zu werden.
- sudo lpadmin -p PDF -v cups-pdf:/ -m everywhere -E
- Kontrolle
- lpstat -v PDF
Erwartete Ausgabe:
device for PDF: cups-pdf:/
Steht hier etwas anderes, an dieser Stelle nicht weitermachen.
- Freigabe aktivieren
- sudo lpadmin -p PDF -o printer-is-shared=true
- sudo cupsctl --share-printers --remote-any
- Ausgabeverzeichnis festlegen
Die PDFs sollen direkt nach /var/www/html geschrieben werden (später Basis für einen Apache-Webserver).
- sudo vi /etc/cups/cups-pdf.conf
Out /var/www/html AnonDirName /var/www/html UserUMask 0000 Grp lpadmin DecodeHexStrings 1
- Berechtigungen setzen
- sudo rm -f /var/www/html/index.html
- sudo chown root:lpadmin /var/www/html
- sudo chmod 2775 /var/www/html
Statt 1777 wird hier 2775 mit gesetztem SetGID-Bit verwendet: Neue PDFs erben automatisch die Gruppe lpadmin (siehe Grp lpadmin in der Konfiguration oben), statt dass jeder Systembenutzer uneingeschränkten Schreibzugriff auf das komplette Verzeichnis hat.
- AppArmor freigeben
AppArmor blockiert standardmäßig Schreibzugriff von cupsd außerhalb von /var/spool/cups-pdf. Folgende Zeile in /etc/apparmor.d/usr.sbin.cupsd innerhalb des profile /usr/sbin/cupsd {...}-Blocks ergänzen:
- sudo vi /etc/apparmor.d/usr.sbin.cupsd
/var/www/html/** rw,
- sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.cupsd
- Kontrolle
- sudo aa-status | grep cupsd
Muss den cupsd-Eintrag im enforce-Modus zeigen, ohne Parser-Fehler.
- CUPS neu starten
- sudo systemctl restart cups
- Test
- lpstat -p PDF
- echo "Testseite" > test.txt
- lp -d PDF test.txt
- sleep 3
- ls -la /var/www/html
- sudo journalctl -k --since "1 min ago" | grep -i DENIED
Erst wenn die PDF in /var/www/html liegt und keine AppArmor-DENIED-Zeile erscheint, weiter zum Client-Kapitel.
Client
- sudo lpadmin -p PDF -E -v ipp://<server-ip>:631/printers/PDF -m everywhere
Linux (grafisch)
- Vorab
- Installation
- sudo apt install cups system-config-printer
- Drucker hinzufügen
- GNOME Settings → Printers öffnen
- Add Printer... anklicken
- Falls der Drucker nicht automatisch per Netzwerk-Discovery erscheint: Adresse manuell eingeben
ipp://<server-ip>:631/printers/PDF
- Drucker PDF bestätigen und hinzufügen
- Beliebige Datei öffnen (z. B. in LibreOffice)
- Drucken → Drucker PDF auswählen
Die fertige PDF landet auf dem Server unter /var/www/html.
Windows (grafisch)
- Drucker hinzufügen
- Einstellungen → Bluetooth & Geräte → Drucker & Scanner
- Gerät hinzufügen → Der gewünschte Drucker ist nicht aufgeführt
- Freigegebenen Drucker über den Namen oder die TCP/IP-Adresse auswählen
- URL eingeben:
http://<server-ip>:631/printers/PDF
- Als Treiber Generic → MS Publisher Color Printer oder Generic PostScript Printer auswählen (CUPS wandelt serverseitig sowieso über
cups-pdfin PDF um)
- Beliebige Datei öffnen (z. B. Word)
- Drucken → Drucker PDF auswählen
Die fertige PDF landet auf dem Server unter /var/www/html.