Menu Chiudi

Pillola #48: configurare server di stampa CUPS Pykota (quote utente) Active Directory

Ultimo aggiornamento: 06.11.2013 – sezione [printers] di smb.conf

Server di stampa Pykota

Da Documentazione Marconi.

Si deve installare un server di stampa che consenta l’integrazione con Active Directory, le quote utente, e l’invio mail a raggiungimento delle soglie di quota. Il sistema deve convivere con l’infrastruttura Windows esistente.

 

Operazioni preliminari

Configurazione della rete

  • Assegnare l’IP in /etc/network/interfaces
  • Verificare /etc/resolv.conf

Configurazione del servizio NTP

  • Dare apt-get install ntp
  • Configurare /etc/ntp.conf come segue:
# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift

# Specify one or more NTP servers.
server dc02.marconi.loc
#server ntp1.inrim.it
#server ntp2.inrim.it

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1
  • Riavviare il servizio con /etc/init.d/ntp restart
  • Dare ntpq -p per verificare la connessione ai peers, e date per verificare la correttezza dell’ora

Configurazione di SSH

  • Creare il gruppo per gli utenti SSH:
addgroup sshusers
usermod -a -G sshusers tuxadmin

Modifiche al file sshd_config

ListenAddress 192.168.0.239
StrictModes yes
AllowGroups sshusers
PermitRootLogin no

 

Join al dominio Windows

Configurazione Kerberos

  • Dare il comando apt-get install samba krb5-user winbind per installare i pacchetti necessari all’interfaccimaento con il dominio Active Directory

Quando richiesto il dominio Samba, specificare MARCONI

  • Configurare i file krb5.conf, smb.conf, nsswitch.conf

File /etc/krb5.conf

[libdefaults]
        default_realm = MARCONI.LOC

        ; for Windows 2008 with AES
        default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
        default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
        permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5

# The following krb5.conf variables are only for MIT Kerberos.
        krb4_config = /etc/krb.conf
        krb4_realms = /etc/krb.realms

[realms]
        MARCONI.LOC = {
                kdc = dc02.marconi.loc:88
                admin_server = dc02.marconi.loc
                default_domain = marconi.loc
        }

[domain_realm]
        .marconi.loc = MARCONI.LOC
        marconi.loc = MARCONI.LOC

[logging]
        kdc = FILE:/var/log/kdc.log
        admin_server = FILE:/var/log/kadmin.log
        default = FILE:/var/log/krb5lib.log

File /etc/samba/smb.conf

[global]
workgroup = MARCONI
server string = %h server
security = ads
realm = MARCONI.LOC
encrypt passwords = true
kerberos method = system keytab

# Disabilito tutte le funzioni di master browsing e pdc
os level = 0
dns proxy = no
local master = no
preferred master = no
domain master = no
domain logons = no
time server = no

socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
winbind separator = +
idmap uid = 10000-20000
idmap gid = 10000-20000
template shell = /bin/bash

winbind uid = 10000-20000
winbind gid = 10000-20000
winbind use default domain = yes
winbind enum users = yes
winbind enum groups = yes
winbind nested groups = yes
winbind cache time = 30

log file = /var/log/samba/log.%m
max log size = 1000

disable spoolss = no
load printers = Yes
printing = cups
printcap name = cups

;   include = /home/samba/etc/smb.conf.%m

[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
# Abilitare se durante l'accesso alle impostazioni stampante da W$ si blocca explorer.exe o lo spooler del client
# default devmode = yes
guest ok = no
read only = yes
create mask = 0700
printer admin = tuxadmin, @"MARCONI+GGTecnici"

# Windows clients look for this share name as a source of downloadable
# printer drivers
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
read only = no
force user = root
valid users = root, tuxadmin, @"MARCONI+Authenticated Users"
create mask = 0664
directory mask = 0775
write list = root, @"MARCONI+GGTecnici"

Modifiche al file /etc/nsswitch.conf

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
  • Riavviare i servizi
/etc/init.d/samba retart
/etc/init.d/winbind restart
  • Inizializzare e testare KRB5
kinit -V Nicola.Ferrari@MARCONI.LOC
kdestroy
  • Join al dominio
net ads join -U administrator
net ads testjoin

Configurazione del server di stampa

Installazione Cups

  • Installare i pacchetti CUPS:
apt-get install cups
apt-get install hplip
  • Abilito amministrazione remota di CUPS
Modifiche a cupsd.conf

Port 631
# Listen localhost:631
Listen /var/run/cups/cups.sock

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

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow from 127.0.0.1
  Allow from 192.168.7.16
</Location>
  • Riavvio CUPS: /etc/init.d/cups restart
  • Utilizzando l’interfaccia web, installo una stampante e testo il servizio

(Mantenere attiva l’opzione di condivisione della stampante)

  • Riavviare Samba per caricare la nuova stampante condivisa

/etc/init.d/samba restart

Installazione Pykota

  • Installazione delle dipendenze necessarie:
apt-get install wget bzip2 subversion pkpgcounter cups-client python-dev python-jaxml python-reportlab python-reportlab-accel python-osd python-egenix-mxdatetime python-imaging python-pysnmp4 python-chardet python-pam python-ldap
  • Installazione python psyco (solo per x86, per x64 non occorre):

apt-get install python-psyco

  • Installazione MySQL per db pykota

apt-get install mysql-server mysql-client python-mysqldb

  • Creo utenti MySQL per pykota

pykotauser è l’utente in sola lettura, pykotaadmin legge e scrive.

mysql -p
CREATE USER 'pykotauser' IDENTIFIED BY '<PASSWORD READ>';
CREATE USER 'pykotaadmin' IDENTIFIED BY '<PASSWORD FORTE>';
quit
  • Installazione pkipplib
cd /tmp
wget "http://www.pykota.com/software/pkipplib/download/tarballs/pkipplib-0.07.tar.gz"
tar xvzf pkipplib-0.07.tar.gz
cd pkipplib-0.07
python setup.py install
  • Download Pikota da svn unofficial
cd /tmp
svn export http://svn.pykota.com/pykota/branches/1.26_fixes pykota
cd /pykota
python checkdeps.py 
python setup.py install
  • Pulizia degli installers
cd /tmp
rm -R *
  • Creare utente di sistema “pikota”

adduser --system --group --home /etc/pykota --gecos pykota pykota

Assegno una password all’utente: passwd pykota

  • Copio la configurazione di default e cambio permessi
cd /etc/pykota
cp /usr/local/share/pykota/conf/pykota.conf.sample ./pykota.conf 
cp /usr/local/share/pykota/conf/pykotadmin.conf.sample ./pykotadmin.conf 

chmod 640 pykota.conf
chmod 640 pykotadmin.conf
chown pykota.lp pykota.conf
chown pykota.lp pykotadmin.conf
  • File pikota.conf:
# PyKota configuration file

[global]
storagebackend : mysqlstorage
storageserver : 127.0.0.1
storagename : pykota
storageuser : pykotauser
storageuserpw : <PASSWORD READ>
storagecaching: No
disablehistory: No
logger: system

# Mettere a no con sistema in produzione
debug : Yes

logourl : http://www.pykota.com/pykota.png
logolink : http://www.pykota.com/

usernamecase: lower
winbind_separator: +
reject_unknown: yes
policy : external(/etc/pykota/newuser.sh $PYKOTAUSERNAME)
privacy : yes
onbackenderror : nocharge
striptitle : smbprn.??????

directory : /var/spool/cups
keepfiles : no
skipinitialwait : yes
accountbanner: none
enforcement : strict
trustjobsize : yes
denyduplicates : no
duplicatesdelay : 0
noprintingmaxdelay : 60
statusstabilizationloops : 5
statusstabilizationdelay : 4.0
snmperrormask : 0x4FCC

accounter : software()
preaccounter: software()
onaccountererror: stop

poorman : 0.1
mailto: external(/etc/pykota/sendmail.sh %(username)s %(username)s@marconirovereto.it)
  • File pikotaadmin.conf
[global]
storagebackend : mysqlstorage
storageserver : 127.0.0.1
storagename : pykota
storageadmin : pykotaadmin
storageadminpw : <PASSWORD FORTE>
  • Edito il file pykota-mysql.sql con le password degli utenti appena creati e importo il db

 

cd /usr/local/share/pykota/mysql/
nano pykota-mysql.sql

-- Create the print quota database users
-- NOTE: Change the "IDENTIFIED BY" strings to the passwords you would like.
--
GRANT USAGE ON *.* TO 'pykotauser'@'localhost' IDENTIFIED BY '<PASSWORD READ>';
GRANT USAGE ON *.* TO 'pykotaadmin'@'localhost' IDENTIFIED BY '<PASSWORD FORTE>';

mysql -p < pykota-mysql.sql

(2 occorrenze)

Pykota è ora installato

Per testarlo pkusers -L deve rispondere “No users matching”

  • Agganciare Pykota a CUPS:
cd /usr/lib/cups/backend
ln -s /usr/local/share/pykota/cupspykota
chmod 750 /usr/local/share/pykota/cupspykota
chown root.lp /usr/local/share/pykota/cupspykota

Configurazione delle stampanti per Pykota

  • Modifico la stampante in printers.conf di cups per utilizzare pykota

cupspykota:socket://<ipstampante>:9100

  • Aggiungo la stampante CUPS a Pykota con relative quote

pkprinters -a -c 1 "<nomestampantecups>"

-a = aggiungi, -c = charge (costo per ogni facciata stampata. Dovendo contare i fogli senza necessità di una valuta, fisso a 1)

  • Aggiungo un utente a Pykota

L’utente può utilizzare tutte le stampanti ed ha limite di segnalazione a 160 (quota massima a 200)

pkusers -a -l balance -b 200 nicola.ferrari/nicola.ferrari@marconirovereto.it
edpykota --add nicola.ferrari
edpykota -S 160 -H 160 nicola.ferrari

NB: SEGNALAZIONE INTERMEDIA “SOFT LIMIT” NON ANCORA IMPLEMENTATA

Uso dei gruppi Pykota

E’ possibile attribuire configurazioni diverse, per gruppi di utenti.

  • Creo gruppo di utenti standard per l’attribuzione delle quote
pkusers --add -g UtentiStd
pkusers -g -L
  • Attribuisco al gruppo UtentiStd limite soft a 160 e limite hard a 200
edpykota --add -g -S 160 -H 200 UtentiStd
edpykota -g -L
pkusers --ingroups UtentiStd Nicola.Ferrari
  • Aggiungo un utente del dominio a UtentiStd

pkusers --add --balance 200 Nicola.Ferrari/Nicola.Ferrari@marconirovereto.it

Aggiunta automatica degli utenti

  • Creo uno script per l’aggiunta automatica degli utenti non presenti nel db

File /etc/pykota/newuser.sh

#!/bin/bash
# Lanciato quando un utente sconosciuto tenta una stampa.
# Creo l'utente in Pykota e attribuisco la quota iniziale.

PYKOTAUSERNAME=$1
INITIALBALANCE=400

pkusers -a -s -l balance -b $INITIALBALANCE $PYKOTAUSERNAME
edpykota -a -s $PYKOTAUSERNAME
  • Imposto i permessi allo script
cd /etc/pykota
chown pykota.lp newuser.sh
chmod 750 newuser.sh

Caricamento dei driver Windows sul server

  • Permessi sulla cartella [print$]
cd /var/lib/samba
chown -R root:"MARCONI+GGTecnici" printers
chmod -R 775 printers
  • Do permessi di “Print Operator” al gruppo GGTecnici

net rpc rights grant -U Administrator 'MARCONI\GGTecnici' SePrintOperatorPrivilege

  • Da un pc Windows, caricare i drivers delle stampanti, in modo che siano poi disponibili ai client, per l’installazione al momento della connessione della stampante.

Upload dei drivers da Windows XP

  • Da Pannello di controllo aprire Stampanti e fax.
  • Con il tasto destro in un’area bianca della finestra, selezionare Proprietà server
  • Nella scheda Driver aggiungere i driver necessari, per le varie architetture, per le stampanti sul server
  • Accedere al server di stampa mediante la sintassi \\nomeserver in Esplora risorse, e, per ogni stampante:
    • Entrare in tasto destro -> Proprietà
    • In Avanzate verificare che sia selezionato correttamente il driver da distribuire
    • Rinominare la stampante e pubblicarla in A.D. se necessario
    • Configurare le opzioni di stampa

Upload dei driver da Windows 7

  • Accedere al server di stampa mediante la sintassi \\nomeserver in Esplora risorse
  • Cliccare su Visualizza stampanti remote nella taskbar
  • Con il tasto destro in un’area bianca della finestra, selezionare Proprietà server
  • Nella scheda Driver aggiungere i driver necessari, per le varie architetture, per le stampanti sul server
  • Per ogni stampante:
    • Entrare in tasto destro -> Proprietà
    • In Avanzate verificare che sia selezionato correttamente il driver da distribuire
    • Rinominare la stampante e pubblicarla in A.D. se necessario
    • Configurare le opzioni di stampa

Per gestire il server di stampa locale sul client Windows 7, e relativi drivers installati, in Start -> Esegui digitare: rundll32 shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder

Aggiunta di una stampante dalla shell (più rapida rispetto ad utilizzare l’interfaccia web di Cups):

# lpadmin -p NOMESTAMPANTE -v socket://IP_DELLA_STAMPANTE:9100 -D "Descrizione della stampante" -L "Dove si trova la stampante" -E

Caricamento dei driver Windows sul server
Da un pc Windows, caricare i drivers delle stampanti, in modo che siano poi disponibili ai client, per l’installazione al momento della connessione della stampante.

Upload dei drivers da Windows XP
– accedere al server di stampa mediante la sintassi \\nomeserver in Esplora risorse
– doppio click su “Stampanti e fax su NOME_PRINT_SERVER”
– selezionare “File / Proprietà server”
– selezionare “Driver”
– aggiungere i driver

Upload dei driver da Windows 7
– eseguire dalla console il comando “mmc” ed aggiungere l’apposito snapin per la gestione delle stampanti
– selezionare il prinserver remoto
– aggiungere i driver eventualmente mancanti (es. 64bit)

Associare il driver corretto alla relativa stampante
– visualizzo l’elenco delle stampanti disponibili

# rpcclient localhost -U Administrator -c 'enumprinters'

– visualizzo l’elenco dei driver disponibili

# rpcclient localhost -U Administrator -c 'enumdrivers'

– associo il driver alla stampante

# rpcclient localhost -U Administrator -c 'setdriver "NOME_STAMPANTE" "NOME_DRIVER"'

Configurazione dell’invio mail

Configurazione del server exim4

  • Installare exim4: apt-get install exim4
  • Configurare exim4:
dpkg-reconfigure exim4-config
- sent by smarthost, no local mail
- system mail name: marconirovereto.it
- listen on: 127.0.0.1
- other destination: <blank>
- visible domain: localhost
- smarthost: smtp.gmail.com::587
- keep dns queries minimal: no
- split config into small files: no
  • Aprire il file /etc/exim4/exim4.conf.template
  • Individuare la riga .ifdef DCconfig_smarthost DCconfig_satellite, e aggiungere nella sezione:
send_via_gmail:
    driver = manualroute
    domains = ! +local_domains
    transport = gmail_smtp
    route_list = * smtp.gmail.com
  • Verificare se esistono altri smarthost con la direttiva "domains = ! +local_domains" ed eventualmente rimuoverli.
  • Individuare begin authenticators. Aggiungere, in quella sezione:
gmail_login:
    driver = plaintext
    public_name = LOGIN
    client_send = : <example>@gmail.com : LaPassword
  • Verificare che non esistano altri autenticatori con lo stesso public_name (LOGIN).

Eventualmente commentarli.

  • Individuare il commento "transport/30_exim4-config_remote_smtp_smarthost".

Aggiungere in quella sezione:

gmail_smtp:
    driver = smtp
    port = 587
    hosts_require_auth = $host_address
    hosts_require_tls = $host_address
  • Riavviare exim4
/etc/init.d/exim4 stop
rm /var/log/exim4/paniclog
cd /var/spool/exim4/db
rm -Rf *
/etc/init.d/exim4 start

Script per l’invio mail

/etc/pykota/pymail.sh

#!/bin/bash

# Ottengo il nome di battesimo dell'utente
human=$1
human=${human/./ }
human=( $human )
human=$(echo "${human[@]^}")
name=$(echo $human | cut -d" " -f1)

# Scrivo la mail su file temporaneo
echo 'From: "Marconi Rovereto | Assistenza" <assistenza@marconirovereto.it>' > /tmp/pymail.txt
echo "To: \"$human\" <$2>" >> /tmp/pymail.txt
echo 'MIME-Version: 1.0' >> /tmp/pymail.txt
echo 'Subject: manuzio: Quota stampe esaurita' >> /tmp/pymail.txt
echo 'Content-Type: multipart/alternative; boundary=089e0102eaf6ce3aa304d11b3484' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt

echo '--089e0102eaf6ce3aa304d11b3484' >> /tmp/pymail.txt
echo 'Content-Type: text/plain; charset=ISO-8859-1' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt
echo "Ciao $name." >> /tmp/pymail.txt
echo 'Hai ultimato le stampe a tua disposizione.' >> /tmp/pymail.txt
echo 'Se vuoi stampare ancora devi passare in vicepresidenza e richiederne altre.' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt
echo 'Visita www.marconirovereto.it' >> /tmp/pymail.txt
echo 'Questo servizio funziona al 100% con software libero' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt

echo '--089e0102eaf6ce3aa304d11b3484' >> /tmp/pymail.txt
echo 'Content-Type: text/html; charset=ISO-8859-1' >> /tmp/pymail.txt
echo '<html>' >> /tmp/pymail.txt
echo '<head>' >> /tmp/pymail.txt
echo '<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">' >> /tmp/pymail.txt
echo '</head>' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt
echo '<body bgcolor="#FFFFFF" text="#000000">' >> /tmp/pymail.txt
echo '<div align="center">' >> /tmp/pymail.txt
echo '<img src="http://www.marconirovereto.it/templates/marconi_red_white/images/style4/logo.png">' >> /tmp/pymail.txt
echo '<font face="arial,helvetica" size="6">' >> /tmp/pymail.txt
echo '<p><b>Manuzio - sistema di quota stampe<br></b></p></font>' >> /tmp/pymail.txt
echo "<font size="3"><p>Ciao <b>$name</b><br>" >> /tmp/pymail.txt
echo 'hai esaurito le stampe a tua disposizione.</p>' >> /tmp/pymail.txt
echo '<p>Per poter stampare ancora,<br>' >> /tmp/pymail.txt
echo 'devi rivolgerti in vicepresidenza e <b>richiederne altre</b></font>.</p>' >> /tmp/pymail.txt
echo '<p> </p>' >> /tmp/pymail.txt
echo '<font size="1"><p>Visita <a href="http://www.marconirovereto.it" target="_blank">MARCONIROVERETO.IT</a></p>' >> /tmp/pymail.txt
echo '<p>Questo servizio funziona al 100% con software libero.</p></font>' >> /tmp/pymail.txt
echo '</div>' >> /tmp/pymail.txt
echo '</body>' >> /tmp/pymail.txt
echo '</html>' >> /tmp/pymail.txt
echo '' >> /tmp/pymail.txt
echo '--089e0102eaf6ce3aa304d11b3484--' >> /tmp/pymail.txt

# Spedisco la mail
sendmail -t -- < /tmp/pymail.txt

# Rimuovo il file temporaneo
rm -f /tmp/pymail.txt
  • Impostare i permessi sullo script
chown pykota.lp pymail.sh
chmod 750 pymail.sh

Visualizzare sul pagina web la propria quota [non testata]

  • Installazione del webserver

apt-get install apache2

  • Copia dell’interfaccia di Pykota su Apache
mkdir /usr/lib/cgi-bin/pykota/
cp /usr/local/share/pykota/cgi-bin/* /usr/lib/cgi-bin/pykota/
cp /usr/local/share/pykota/stylesheets/pykota.css /var/www/
  • Installo PwAuth per evitare che gli utenti vedano le quote altrui
apt-get install pwauth
a2enmod authnz_external
  • Configurazione sito apache
cd /etc/apache2/sites-available
cp default pykota
a2dissite default
a2ensite pykota
  • Inserire queste righe nel sito “pykota” subito dopo la chiusura del gruppo <Directory “/usr/lib/cgi-bin”> … </Directory> group :
<Directory "/usr/lib/cgi-bin/pykota">
AllowOverride None
Options +ExecCGI -Multiviews +SymlinksIfOwnerMatch
Order allow,deny
AuthType Basic
AuthName "Restricted Server"
AuthBasicProvider external
AuthExternal pwauth
Require valid-user
Allow from all
</Directory>

<Directory /usr/share/pykota/stylesheets/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
# This directive allows us to have pretty PyKota CGIs
RedirectMatch ^/$ /usr/share/pykota/stylesheets/
</Directory>

AddExternalAuth pwauth /usr/sbin/pwauth SetExternalAuthMethod pwauth pipe

  • Riavviare Apache

/etc/init.d/apache2 restart

  • Verifica della configurazione
http://<serverstampa>/cgi-bin/pykota/pykotme.cgi
http://<serverstampa>/cgi-bin/pykota/printquota.cgi
http://<serverstampa>/cgi-bin/pykota/dumpykota.cgi

Comandi di uso quotidiano

  • Visualizzare la quota di un utente: pkusers -L nome.utente
# pkusers -L nicola.ferrari

nicola.ferrari - <nicola.ferrari@marconirovereto.it>
Limited by : balance
Account balance : 0.00   <--- QUOTA DELL'UTENTE
Total paid so far : 18.00
Overcharging factor : 1.00
  • Reimpostare la quota di un utente: pkusers -b <quota> nome.utente
# pkusers -b 400 nicola.ferrari

Extracting datas...
Modification...
Done. Average speed : 242.25 entries per second.

Fonti

  • Pykota mailing list
WordPress Appliance - Powered by TurnKey Linux