Unix MINI-SAMBA-HOWTO Davide Giunchi (gdavide@mclink.it) v1.2, 21 Giugno 2000 Questo documento ha lo scopo di descrivere come installare e configurare Samba sulle piattaforme Unix. -------------------------- INDICE Introduzione A) Hp-Ux 1 Installazione 3 Accesso ai dischi 2 Accesso alle stampanti 4 Backup dei client 5 Samba via router 6 Sicurezza B) Sco 1 Differenze tra Hp-Ux e Sco 2 Note per altri Unix-Like C) Faq 1 Log principali 2 Problemi vari e di model con le stampanti 3 Stampanti in timeout dopo un po' di tempo 4 Problemi di protocolli sui clienti windows 5 Blocco di windows durante l'accesso alle share samba INTRODUZIONE: Questo Mino-HowTo sul Samba e' stato creato da me inizialmente come promemoria personale per l'uso, successivamente ampliato per spiegare ai miei colleghi di lavoro il samba ed infine ho deciso di divulgarlo alla comunita' linux nella speranza che la mia esperienza possa essere utile ad altri. Potra' essere considerato troppo pratico o troppo semplicistico, in effetti e' proprio cio' che ho inteso fare lasciando da parte la teoria e riducendolo al minimo per spiegare le parti che interesano alla nostra azienda (particolarmente importante e' la condivisione delle stampanti win a unix). Per questo consiglio di abbinare la lettura di questo documento al libro "Using Samba" scaricabile dal server ftp del samba (ftp://ftp.samba.org). Il presente documento e' stato scritto e "testato" per: Hp-Ux 10.20, 11.x Sco 5.0.x Linux 2.2.x Anche se puo' essere usato con piccole modifiche per tutti i sitemi Unix, per linux e' ancora piu' semplice perche' potrete usare altre utility grafiche o di configurazione automatica. A) -- HP-UX -- 1) Prendere il pacchetto samba-2.X.X.HPUX-X.XX.tar.gz, scompattarlo #cd samba-2.X.X #cd packaging/HPUX #./create_package.sh (crea il file samba.depot) #swinstall -s`pwd`/samba.depot Samba (installa samba in /opt/samba) Controllare la presenza dei demoni smbd e nmdb in /etc/inetd.conf come nell'esempio: netbios_ssn stream tcp nowait root /opt/samba/bin/smbd smbd netbios_ns dgram udp wait root /opt/samba/bin/nmbd nmbd swat stream tcp nowait.400 root /opt/samba/bin/swat swat controllare in /etc/services la presenza delle seguenti righe: netbios_ns 137/tcp netbios_ns 137/udp netbios_ssn 139/tcp netbios_ssn 139/udp swat 901/tcp creare un link: ln -s /opt/samba/lib/smb.conf /etc/smb.conf controllare la presenza dell'utente guestpc, se non e' presente crearlo (senza password e con shell nulla) Modificare il /etc/smb.conf a seconda delle esigenze, ecco una configurazione funzionante che permette di condividere a tutti la cartella /pub (solo lett) e la home directory dell'utente che si collega, soprattutto e' attiva la condivisione delle stampanti /etc/smb.conf: ~~~~~~~~~~~ cut here ~~~~~~~~~~~~ [global] workgroup = WORK #nome del workgroup al quale apparterra' il server null passwords = yes username map = /etc/smbusers logfile = /var/adm/smb guest account = guestpc printing = bsd print command = lp -c -d%p -s %s; rm %s lpq command = lpstat -o%p lprm command = cancel %p -%j [pubblic] comment = Directory pubblicamente accessibile path = /pub read only = no # Spazio per lo scambio file accessibile a tutti guest ok = yes [homes] comment = Home directory personale browsable = no read only = no #Home directory personale di ogni utente create mode = 0750 ~~~~~~~~~~~ cut here ~~~~~~~~~~ una volta modificato l'smb.conf rendere effettive le modifiche riavviando il processo dell'inetd: inetd -c Per prima cosa accertarsi della presenza del demone nmbd poi controllare che il server sia presente sotto risorse di rete (per adesso pero' non sara' accessibile). Testare il funzionamento del samba con il comando smbstatus se vi mostra a video lo stato del samba (versione, memoria utilizzata...) samba sta' funzionanado, in caso contrario consultate la sezione errori. 2) creare il file /etc/smbusers con la corrispondenza account unix<->nome utente da windows ~~~~ # Unix_name = SMB_name1 SMB_name2 vdt050 = pinco pallino prod1 = ufficio_prod1 produt = ufficio_prod2 ~~~~~~ Fatto questo quando dal computer windows si accedera' al server unix verra' richiesta una password, inserite la password del vostro account sotto unix, e potrete accedere alle risorse condivise indicate in smb.conf Le versioni di win95 dalla c in avanti, tutte le versioni di win98, winNT e 2000 non accettano la negoziazione delle password in chiaro(solo criptate) creando cosi' problemi di negoziazione delle password tra win e unix nelle installazioni di default di samba, per ovviare a questo inconveniente (forzando l'uso delle password in chiaro) applicare la patch relativa alla versione di windows usata presente nel pacchetto scompattato nella dir docs. Questo problema si puo' notare quando, cercando di accedere alle risorse condivise, vi verra' detto che la password e' errata anche se e' giusta, applicate la password e riavviate il computer windows e non avrete piu' problemi. NB!: In questo metodo le password passeranno in chiaro, questo e' un grosso buco per la sicurezza siccome tali password saranno facilmente intercettabili e leggibili con sniffer&c, probabilmente all'inzio vi bastera' che samba funzioni ma vi consiglio vivamente di consultare la sezione sicurezza. Una volta installato il samba e' possibile accedere dal server unix alle risorse condivise dei client windows come se sui win sia presente un server ftp (con gli stessi comandi dell'ftp) il comando per accedere e': /opt/samba/bin/smbclient \\\\davide\\c in questo modo si accede alla catella condivisa "c" del computer davide, a questo punto si possono traferire file come in una normale sessione ftp (naturalmente si avra' accesso in sola lettura a meno che non specificato diversamente sulle impostazioni di windows) 3) creare le stampanti sotto unix utilizzando il model apposta per il samba che trovate nel pacchetto prima scompattato. Per prima cosa modificare il model samba-2.X.X/examples/printing/smbprint.sysv a seconda della stampante da configurare, i campi da modificare sono: server= nome (in rete) del computer windows con la stampante collegata service= nome della stampante condivisa in rete collegata al server password= password per accedere al computer con win (in genere e' nulla) Nel caso in cui la stampante sia collegata ad un NT occorre modificare il comando del model per farlo accedere con l'utente Administrator: ) | /opt/samba/bin/smbclient "\\\\$server\\$service" $password -N -P -U Administrator > /dev/null e nella sezione password (sopra spiegata) inserire la password dell' Administrator. Ora installare la stampante normalmente attraverso il sam utilizzando il model appena creato oppure usare i comandi: /usr/lib/lpshut lpadmin -pnomestampante -v/dev/null -i/path/smbprint.sysv enable nomestampante accept nomestampante /usr/lib/lpsched modificare il model ed eseguire questi ultimi 2 passaggi per tutte le stampanti da configurare. 4) Per eseguire il backup dei client windows sul nastro del server si usa il seguente comando: /opt/samba/bin/smbtar -s "nomeclient" -x "nomecartella" -t "devicenastro" per "nomeclient" si intende il nome che il computer windows ha sotto risorse di rete per "nomecartella" si intende la cartella condivisa della quale effettuare il backup, quindi se si vuole copiare la directory c:\documenti bisogna che la cartella sia condivisa con il nome documenti per "devicenastro" si indica la device del dat (/dev/rct0 o /dev/dat) 5) Come vedete nello schema ci sono 2 server Unix collegati tra di loro tramite router ed ognuno con i propri client windows alcuni con una stampante collegata. Il nostro scopo e' fare in modo che un utente sul server 2 collegandosi via router al server 1 possa stampare possa stampare un documento presente su quest'ultimo server direttamente sulla stampante collegata al proprio pc windows; successivamente vedremo come fare in modo che un utente collegato al server 2 possa vedere sotto risorse di rete oltre al server 2 il server 1. win 192.168.0.1 192.168.1.1 win-stp \ _____ _____/ |Unix | ___ LINEA TEL ___ |Unix | win--|SMB |----|RTR|-------------|RTR|-----|SMB |--win-stp |__1__| o DEDICATA |__2__| / \win-stp win Una volta che samba e' installato e funzionante per riuscire ad accedere alle risorse remote tramite un router (e quindi le stampanti) e' sufficente una piccola aggiunta: create il file SAMBADIR/lib/lmhosts con la corrispondenza indirizzo ip <-> nomecomputer come nell'esempio: --- 192.168.4.16 pinco 192.168.4.14 pallino ... --- ora potrete accedere ai computer remoti come se fossero dei pc locali, quindi con il comando smbclient \\\\pinco\\nomestampante accederete direttamente alla stampate, quindi il model della stampante andra' fatto in modo assolutamente normale. Per il nostro secondo scopo introdurro' il concetto di Master Browser e Browse List: In una rete windows per ogni gruppo di lavoro vi e' un computer che funge da Mater Browser, questo computer mantiene la Browse list che e' la lista dei computer presenti nel gruppo (per intenderci sono tutti i computer presenti sotto risorse di rete), il computer Browse Master viene nominato a seguito di una "elezione" ogni qualvolta il Browse Master esistente viene spento. Ogni computer ha un proprio livello di NetBios ed il computer con il livello piu' alto vince l'elezione diventando Master Browser; Per fare in modo che il server SMB 1 sia visibile sotto risorse di rete dei pc di SMB 2 dobbiamo fare in modo che il server 2 sia master browser e che il server 1 gli mandi una segnalazione chiedendogli di entrare a far parte del suo gruppo di lavoro. Ora vediamo le modifiche all'smb.conf dell'SMB 1 ------- [global] os level = 34 preferred master = yes local master = yes ------- Con os level = 34 diamo al Samba livello 34 (di default e' 0) facendolo cosi' gareggiare nelle elezioni al livello di NT, le altre 2 opzioni non necessitano di commenti. ecco l'smb.conf dell'SMB 2 ------- [global] remote announce = 192.168.0.255/SIMPLE ------- in questo modo l'SMB 2 manda una segnalazione di broadcast alla sottorete 192.168.0.x nella quale il Master Browser e' (guardacaso) il nostro server SMB, in questo modo SMB 1 vede la segnalazione e aggiunge SMB 2 alla sua Browse List riuscendo cosi' nel nostro intento di vedere SMB 1 nella nostra rete locale. 6) Sicurezza: Sezione in allestimento :)) B) -- SCO UNIX -- 1) Siccome la maggiorparte dei server SCO non hanno il compilatore C occorre installare i binari precompilati; per fare cio'prendete il samba nella sezione gnu del sito sco www.sco.com/skunkware e scompattatelo (gunzip e tar) direttamente in / cosi' samba verra' posizionato automaticamente in /usr/local/samba e in /etc sara' presente lo script "samba" tramite il quale si potra' attivarlo e disattivarlo semplicemente con il comando /etc/samba start o /etc/samba stop Per quanto riguarda le stampanti il funzionamento e' identico ad HP, differisce solo per i comandi di installazione delle stampanti sotto riportati: #/usr/lib/lpadmin -p nomestampante -v /dev/null -m path/smbprint #accept nomestampante #enable nomestampante C) -- FAQ - Frequently Asked Question -- 1) Per qualsiasi errore o per controllare il comportamento del samba controllare i seguenti file di log /var/adm/smb log principale /var/adm/syslog Log file principale del sistema, contiene messaggi vari quindi anche dei demoni smbd e nmbd /opt/samba/var/log.smb contiene gli errori relativi al demone smbd /opt/samba/var/log.nmb contiene gli errori relativi al demone nmbd 2) Se non si riesce a stampare e' molto probabile che la stampante non sia condivisa o sia condivisa con nome/opzioni sbagliate, si puo' verificare cio' con il comando smbclient -L nomepc in questo modo verranno visualizzate le risorse condivise, controllare che sia presente la stampante quindi provare ad accederci con smbclient \\\\nomepc\\nomestampante se va' a prompt "smb:>\" allora la condivisione e' giusta. Se si e' sicuri che i dati nei client windows siano stati inseriti correttamente provate a collegarvi con smbclient alla stampante: /opt/samba/bin/smbclient \\\\nomepc\\nomestampante -P -N se una volta a prompt "smb:>\" digitando ls oltre a dire che ci sono 0 file da' uno strano messaggio di errore, provate a lanciare un stampa di prova con il comando "put /etc/passwd", se la stampa di /etc/passwd va' a buon fine allora e' necessario cambiare il model in modo che esegua questa operazione automaticamente, il model modificato per questo problema e' allegato a fine documento. 3) Un computer con Windows non vede il server samba e da smbclient non si riesce a vedere il pc con Windows il problema e' sicuramente nelle impostazioni di rete di windows, quindi preparatevi a sorbirvi le menate di windows: Eliminate tutti i protocolli superflui come Ipx/spx (serve solo per i videogiochi e per reti netware) e NetBeui (in teoria dovrebbe essere fondamentale per l'uso del samba, in pratica basta che il Domain master lo abbia installato) lasciando solo il Tcp/ip, dopodiche' riavviate e controllate che veda tutto bene in rete e il server samba. Se non lo vede ancora controllate: sotto proprieta' di rete/ controllo di accesso sia selezionato "cotrollo di acesso a livello condivisione", sotto configurazione e proprieta' di "client per reti microsoft"sia selezionato solo "connetti e ripristina le impostazioni di rete". Sotto le proprieta' del Tcp/ip controllate che sia settato bene ip e netmask e che in "binding" siano selezionate entrambe le casella (per la condivisione). Dopo ogni modifica ai protocolli di rete ricordatevi di riavviare per rendere effettivi i cambiamenti. Se anche dopo aver fatto questo non si vede il pc cancellate la scheda di rete e reinstallatela mettendogli solo il protocollo tcp/ip. 4) Stampanti che vanno in timeout dopo un po' di tempo: In questo caso il problema e' da ricercare nella configurazione della modalita' risparmio energetico del computer al quale e' collegata la stampante, infatti molti Bios di default sono configurati in modo che dopo un tot di tempo il computer vada in modalita' risparmio energetico rendendo la stampante inaccessibile a samba. Per risolvere questo problema e' opportuno modificare i settaggi del Bios disabilitando la modalita' risparmio energetico o, se proprio necessario, aumentare il tempo dopo il quale il computer va' in "riposo". 5) Pc windows che si blocca dopo la copia di un file al server samba: Normalmente il server samba e' impostato per chiudere la connessione dopo 30 secondi di inattivita', nel caso il client windows sia particolarmente lento nella copia/connessione il server chiudera' la connessione disconnettendo brutalmente il pc. Questo problema si puo risolvere aggiungendo l'opzione [global] change notify timeout = 60 nel file smb.conf, questo fara' funzionare bene samba anche se non risolvera' il vero problema che ha causato questo blocco: la cattiva impostazione dei protocolli di rete su windows, piu' precisamente la presenza del protocollo NetBeui nei protocolli di rete installati sul pc. Questo protocollo sul client e' inutile e rallenta notevolmente la connessione di rete (si puo' notare guardando sotto "risorse di rete" la lentezza della connessione), quindi se possibile e' meglio eliminare tale protocollo. Nel caso siano state apportate modifiche al file smb.conf e' consigliabile testarne la correttezza mediante l'utility /opt/samba/bin/testparm che mostrera' a video gli errori o i warning del file di conf. smbprintMOD: ------------------------------- CUT HERE ------------------------- #!/bin/sh # # @(#) smbprint.sysv version 1.0 Ross Wakelin # # Version 1.0 13 January 1995 # modified from the original smbprint (bsd) script # # this script is a System 5 printer interface script. It # uses the smbclient program to print the file to the specified smb-based # server and service. # # To add this to your lp system, copy this file into your samba directory # (the example here is /opt/samba), modify the server and service variables # and then execute the following command (as root) # # lpadmin -punixprintername -v/dev/null -i/opt/samba/smbprint # # where unixprintername is the name that the printer will be known as # on your unix box. # # the script smbprint will be copied into your printer administration # directory (/usr/lib/lp or /etc/lp) as a new interface # (interface/unixprintername) # Then you have to enable unixprintername and accept unixprintername # # This script will then be called by the lp service to print the files # This script will have 6 or more parameters passed to it by the lp service. # The first five will contain details of the print job, who queued it etc, # while parameters 6 onwards are a list of files to print. We just # cat these at the samba client. # # Set these to the server and service you wish to print to # In this example I have a WfWg PC called "lapland" that has a printer # exported called "printer" with no password. # # clear out the unwanted parameters shift;shift;shift;shift;shift # now the argument list is just the files to print #server=Nome del computer al quale e' collegato la stampante #service=Nome della stampante in condivisione sotto windows #password=Password di Windows all'avvio (di solito e' nulla) server=Paola service=hp_paola password="" ( # NOTE You may wish to add the line `echo translate' if you want automatic # CR/LF translation when printing. echo translate echo "put $*" ) | /opt/samba/bin/smbclient "\\\\$server\\$service" $password -N -P > /dev/null exit $? ---------------------- CUT HERE ---------------------- TODO: Revisione generica dello stile del documento, sicurezza e swat. RINGRAZIAMENTI: In questa sezione vorrei ringraziare tutte le persone che hanno reso possibile la stesura di questo documento aiutandomi nella mia formazione Unix/Linux. Siccome la lista sarebbe troppo lunga mi limitero' ringraziando: Tutta la comunita' linux con i suoi documenti e howto che mi hanno aiutato ad conoscere questo fantastico sistema operativo, Tutti i miei colleghi di lavoro che mi hanno dato fiducia e tempo per approfondire Samba che e' poi diventato un valido strumento da proporre alle aziende. Buon Divertimento.