Ultimo aggiornamento: 06.11.2013 – sezione [printers] di smb.conf
Server di stampa Pykota
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, edate
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