|
|
Riga 1: |
Riga 1: |
| {{File_System}}{{Versioni compatibili}}{{SAMBA}} | | {{File_System}}{{Versioni compatibili}}{{SAMBA}} |
| | |
| == Introduzione == | | == Introduzione == |
| Samba è un diffusissimo software open-source, ideato nel 1991 da Andrew Tridgell e rilasciato sotto licenza GPL, che permette la condivisione di risorse come directory e stampanti fra gli host di una rete. Si avvale sostanzialmente del protocollo SMB (''server message block'') originario Microsoft, basato a sua volta sul protocollo NetBios (''network basic input output system'') sviluppato da IBM nel 1984. | | Samba è un diffusissimo software open-source, ideato nel 1991 da Andrew Tridgell e rilasciato sotto licenza GPL, che permette la condivisione di risorse come directory e stampanti fra gli host di una rete. Si avvale sostanzialmente del protocollo SMB (''server message block'') originario Microsoft, basato a sua volta sul protocollo NetBios (''network basic input output system'') sviluppato da IBM nel 1984. |
Riga 5: |
Riga 6: |
|
| |
|
| Si sceglie solitamente l'uso di Samba per poter condividere file e stampanti in una rete mista (''macchine GNU/Linux, MS-Windows, Mac OS..''), in modo da sfruttare un unico protocollo e un unico sistema di autenticazione. | | Si sceglie solitamente l'uso di Samba per poter condividere file e stampanti in una rete mista (''macchine GNU/Linux, MS-Windows, Mac OS..''), in modo da sfruttare un unico protocollo e un unico sistema di autenticazione. |
|
| |
| == La suite ==
| |
| Analizziamo i programmi che otteniamo dall'installazione della suite Samba per Debian GNU/Linux:
| |
|
| |
| <pre># apt-get update && apt-get install samba smbfs cifs-utils</pre>
| |
|
| |
| In breve:
| |
| *'''smbd''': questo demone è sostanzialmente il cuore di Samba; in ascolto sulla 445/tcp, gestisce le autenticazioni e dà accesso ai filesystem e allo spooler di stampa.
| |
|
| |
| *'''nmbd''': questo demone in ascolto sulla 139/udp, rende note le risorse condivise tutte le volte che viene interrogato dai client. Per fare un esempio è quel demone che permette la visualizzazione dei serventi Samba in Risorse di Rete nei sistemi MS-Windows. È il primo dei due demoni ad avviarsi.
| |
|
| |
| *'''smbpasswd''': strumento per la creazione utenti Samba. Un utente Samba dovrà essere anche un utente presente sulla macchina.
| |
|
| |
| *'''testparm''': strumento per la verifica del file <code>/etc/samba/smb.conf</code>.
| |
|
| |
| *'''nmblookup''': risolve i nomi host di un domain Samba (''NetBIOS name'') in indirizzi IP (es: nmblookup ''nomehost'').
| |
|
| |
| *'''winbindd''': fornisce funzionalità aggiuntive a ''smbd'' (installato dal pacchetto <code>cifs-utils</code>)..
| |
|
| |
| *'''mount''' e '''umount''', non sono strumenti forniti da SAMBA, ma applicativi già presenti in linux; supportano un'ampia gamma di filesystem, tra cui anche ''SMBFS'' e ''CIFS'' grazie rispettivamente ai pacchetti <code>smbfs</code> e <code>cifs-utils</code>.
| |
|
| |
| *'''smbmount''', '''smbumount''': strumenti alternativi a mount e umount utilizzati per montare/smontare filesystem smbfs (installati dal pacchetto <code>smbfs</code>).
| |
| Per i client si veda la sezione loro dedicata.
| |
|
| |
| == Configurazione del server ==
| |
| Si compone di due fasi principali:
| |
| * Composizione del file <code>'''/etc/samba/smb.conf'''</code>.
| |
| * Creazione degli utenti che avranno accesso alle risorse condivise tramie <code>'''smbpasswd'''</code>.
| |
|
| |
| === Il file smb.conf ===
| |
|
| |
| E' sostanzialmente un elenco di sezioni sotto ognuna delle quali si definiscono uno o più parametri. Ci sono due tipi principali di sezioni:
| |
| * '''GLOBALE''', dove semplicemente si definisco sia i parametri di "sistema" sia quelli comuni e/o più usati;
| |
| * '''RISORSA''', dove sono definiti tutti quei parametri specifici e funzionali ad una certa risorsa (directory, lettore, stampante ecc.) che si vuole condividere o per abilitare specifiche funzionalità avanzate di samba.
| |
| In ogni file di configurazione andrà definita una sola sezione globale, mentre dovranno essere scritte tante sezioni risorse quante sono le risorse da condividere e/o funzionalità avanzate da abilitare. Il file <code>smb.conf</code> avrà dunque un aspetto di questo tipo (al netto degli eventuali commenti):
| |
| <pre>
| |
| [global]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| [Condivisione1]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| ...
| |
|
| |
| [CondivisioneM]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| [Periferica1]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| ...
| |
|
| |
| [PerifericaM]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| [printers]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| [Stampante1]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| ...
| |
|
| |
| [StampanteM]
| |
| parametro1 = valore
| |
| ...
| |
| parametroN = valore
| |
|
| |
| ecc.
| |
|
| |
| </pre>
| |
|
| |
| {{Box|Nota|Data la moltitudine di parametri configurabili in questa guida ci si limiterà a trattarne solo una piccola parte. Per una panoramica completa si invita il lettore a fare riferimento alla pagina (man5) di [http://www.samba.org/samba/docs/man/smb.conf.5.html Samba]. }}
| |
|
| |
| {{ Warningbox | Esistono parametri che devono essere dichiarati nella sola sezione <code>global</code>, parametri che devono essere dichiarati solo nelle sezioni dedicate alle singole risorse e infine parametri che possono essere definiti in entrambi i tipi di sezione. }}
| |
|
| |
| In relazione ai parametri utilizzati in questa guida (spiegati nelle successive sezioni):
| |
| * ''GLOBALI'', ovvero che possono essere inseriti nella sola sezione <code>global</code>
| |
| ** <code>workgroup</code>
| |
| ** <code>server string</code>
| |
| ** <code>netbios name</code>
| |
| ** <code>netbios aliases</code>
| |
| ** <code>include</code>
| |
| ** <code>security</code>
| |
| ** <code>guest account</code>
| |
| ** <code>map to guest</code>
| |
| ** <code>username map</code>
| |
| ** <code>printing</code>
| |
| ** <code>load printers</code>
| |
| * ''GENERICI'', ovvero che possono essere dichiarati in entrambi i tipi di sezioni; in linea generale se un parametro viene definito sia nella sezione <code>global</code> che in una specifica allora per quanto riguarda la suddetta risorsa sarà utilizzato come valore quanto dichiarato localmente.
| |
| ** <code>allow hosts</code>/<code>hosts allow</code>
| |
| ** <code>guest ok</code>/<code>public</code>
| |
| ** <code>guest only</code>/<code>only guest</code>
| |
| ** <code>create mask</code>
| |
| ** <code>directory mask</code>
| |
| ** <code>browseable</code>/<code>browsable</code>
| |
| ** <code>read only</code>
| |
| ** <code>writeable</code>/<code>writable</code>
| |
| ** <code>valid users</code>
| |
| * ''SPECIFICI'', ovvero che possono essere inseriti nelle sole sezioni dedicate alle singole risorse
| |
| ** <code>comment</code>
| |
| ** <code>path</code>
| |
| ** <code>printable</code>
| |
| ** <code>preexec</code>
| |
| ** <code>postexec</code>
| |
|
| |
| ==== Parametri globali ====
| |
| <pre>
| |
| [global]
| |
| allow hosts = 127.0.0.1 192.168.1.0/24
| |
| workgroup = debianizzati
| |
| server string = server@debianizzati.org
| |
| security = user
| |
| guest account = ospite
| |
| map to guest = Bad User
| |
| username map = /etc/samba/utenti.map
| |
| netbios name = debianizzati
| |
| netbios aliases = alias1 ... aliasN
| |
| include = /etc/samba/smb.conf.%L
| |
|
| |
| passwd program = /bin/passwd %u
| |
| pam password change = yes
| |
| obey pam restrictions = yes
| |
| passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
| |
| unix password sync = Yes
| |
| </pre>
| |
| * <code>'''allow hosts'''</code>: range di IP ai quali è permesso l'accesso a tutte le risorse specificate nel seguito del file di configurazione; in questo caso vengono accettati tutti gli indirizzi compresi tra 192.168.1.1 e 192.168.1.254. Si noti che è possibile specificare più indirizzi e/o gruppi di indirizzi semplicemente separandoli con uno spazio, ad esempio <code>allow hosts = 127.0.0.1 192.168.1.0/24</code>. Qualora l'utente non volesse rendere disponibile tutte le risorse agli stessi range di indirizzi allora il parametro <code>allow hosts</code> non dovrebbe essere definito qui, ma in ciascuna delle sezioni dedicate alle singole risorse condivise. Il parametro è sostanzialmente additivo, ovvero il gruppo di indirizzi ammissibile per ogni risorsa è dato dalla somma di quelli specificati in questa sezione e da quelli definiti per la singola risorsa. Questo parametro è del tutto equivalente a <code>hosts allow</code>.
| |
| * <code>'''workgroup'''</code>: nome del gruppo di lavoro; non è un parametro critico, nel senso che anche se viene definito un nome differente da quello cui appartengono tutte le altre macchine della rete il risultato è che in windows il nome del server comparirà sotto un differente gruppo di lavoro.
| |
| * <code>'''server string'''</code>: stringa che identifica il server.
| |
| * <code>'''security'''</code>: definisce il "modo" con cui samba gestisce l'autenticazione degli utenti.
| |
| ** ''user'': è il valore predefinito, implica che sia il nome delle risorse sia il loro contenuto risultano indisponibili all'utente fintanto che questi non si è autenticato con successo; deroga a questo principio il caso in cui l'utente venga automaticamente autenticato come ospite (si veda ''map to guest'').
| |
| ** ''share'': è il valore storico, usato come predefinito nelle versioni di samba precedenti la terza; semplificando si può dire che gli utenti possono vedere le risorse, ma non accedervi, anche senza essersi autenticati con successo (quindi chiunque è in grado di vedere l'elenco delle risorse).
| |
| ** ''domain'' e ''server'': sono modalità specifiche per reti dove è configurato un dominio e non semplicemente un gruppo di lavoro.
| |
| * <code>'''guest account'''</code>: permette di definire l'utente da usare come utenza guest (il valore predefinito è ''nobody''), in questo esempio l'utente ''ospite'' (che come ogni altro utente deve esistere sia in linux che in samba).
| |
| * <code>'''map to guest'''</code>: questo parametro torna principalmente utile se si vuol creare una condivisione accessibile a chiunque tramite l'utenza guest (ovvero se si vuole permettere l'accesso ad una o più risorse senza che vengano richieste username e password) quando sia stato impostato <code>security = user</code> o <code>security = domain</code>. Ci sono quattro valori possibili di questo parametro:
| |
| ** ''Never'', valore di default, prevede che qualsiasi richiesta in cui username o password fornite siano errati venga respinta.
| |
| ** ''Bad User'', apre una serie di casistiche a seconda delle situazioni specifiche; sinteticamente vale quanto detto nel manuale, ovvero che gli utenti che in windows hanno uno username inesistente in samba vengono automaticamente autenticati come ospiti ("guest", si veda il paragrafo "Creazione utenti e autenticazione - L'utenza guest ovvero le condivisione pubbliche").
| |
| ** ''Bad Password'' e ''Bad Uid'', si veda il manuale.
| |
| * <code>'''username map'''</code>: indica un file testuale contenente la mappatura di uno più utenti, ovvero permette di ''trasformare'' un nome utente in un altro. Ogni riga di tale file (''utenti.map'' nell'esempio) deve contenere il nome linux dell'utente seguito da un uguale e poi dal (o dai) nome windows dello stesso, ad esempio le righe <code>root = admin administrator</code> e <code>mario = "Mario Rossi"</code> mappano i nomi ''admin'' e ''administrator'' a root, mentre "Mario Rossi" a mario. La mappatura dei nomi può tornare ad esempio utile per impedire che uno o più utenti dotati di nome linux differente da quello windows possano accedere inizialmente come guest al server.
| |
| * <code>'''netbios name'''</code>: stringa che sostituisce nella maggior parte dei casi (si veda il manuale) l'hostname della macchina (solo per quantoriguarda la visualizzazione da parte dei client).
| |
| * <code>'''netbios aliases'''</code>: permette di identificare un server samba attraverso più nomi. Quest'opzione risulta particolarmente utile in congiunzione con il parametro <code>include</code>.
| |
| * <code>'''include'''</code>: permette di includere nel file di configurazione <code>smb.conf</code> un altro file di configurazione (e quindi le relative impostazioni). Nell'esempio riportato viene importato il file /etc/samba.smb.conf.alias, dove ''alias'' è uno degli alias definiti attraverso il parametro <code>netbios aliases</code> (il carattere %L serve proprio a leggere l'imput dell'utente). Questo artificio è utile in quei casi dove può essere necessario caricare impostazioni parzialmente differenti a seconda del gruppo di utenti che accede al server, basta cioè che ciascuno di questi gruppi acceda al server sfruttando un diverso alias, ad esempio ''commerciale'', ''amministrazione'', ''tecnico'', ecc.
| |
|
| |
| * <code>'''passwd program'''</code>: questo parametro ha essenzialmente senso se usato in congiunzione con <code>unix password sync = yes</code> poiché definisce che applicativo usare per modificare automaticamente le password unix.
| |
| * <code>'''pam password change'''</code>: se impostato su yes il sistema userà PAM invece dell'applicativo definito in <code>passwd program</code> per cambiare automaticamente le password unix (quindi è inutile definire contemporaneamente sia <code>passwd program</code> che <code>pam password change = yes</code>).
| |
| * <code>'''obey pam restrictions'''</code>: impostare su yes solo nel caso in cui sia anche <code>pam password change = yes</code>.
| |
| * <code>'''passwd chat'''</code>: definisce la stringa che samba passerà a linux per cambiare una password unix. Non cambiare il valore indicato a meno di non sapere quel che si sta facendo. Questo parametro può essere omesso se non si è definito <code>passwd program</code> oppure impostato <code>pam password change = yes</code>.
| |
| * <code>'''unix passwd sync'''</code>: impostare questo parametro su yes fa si che quando la password di un utente samba viene cambiata anche la password linux è modificata.
| |
|
| |
| ====Parametri generici====
| |
| <pre>
| |
| guest ok = no
| |
| guest only = yes
| |
| browseable = yes
| |
| public = yes
| |
| valid users = utente1, utente2, utenteN
| |
| read only = yes
| |
| create mask = 0750
| |
| directory mask = 0750
| |
| </pre>
| |
|
| |
| * <code>'''guest ok'''</code>: equivalente al parametro <code>public</code> definisce se una condivisione è accessibile o meno all'utenza guest, posto che questa sia abilitata (si veda la sezione dedicata alla creazione degli utenti). Attribuire ''no'' come valore a questo parametro nella sezione global è di norma inutile, visto che tale è proprio il suo valore predefinito, tuttavia ciò non è vero nel caso in cui il parametro <code>map to guest</code> sia impostato su un valore diverso da ''never'', come in questo esempio. Omettere di specificare ''no'' in questo caso comporterebbe l'impossibiiltà di accedere con utente diverso da guest a tutte quelle risorse per cui non è stato esplicitamente definito <code>guest ok = no</code>.
| |
| * <code>'''guest only'''</code>: se impostato su ''yes'' restringe l'accesso alla risorsa alla sola utenza guest;
| |
| * <code>'''browseable'''</code>, se impostato su ''yes'' rende visibile la condivisione nell'elenco delle risorse disponibili; dichiarare esplicitamente questo parametro con valore ''yes'' è utile solo qualora nella sezione global sia stato dichiatato esplicitamente <code>browseable = no </code>, essendo ''yes'' il valore predefinito;
| |
| * <code>'''public'''</code>, se impostato su ''yes'' rende la risorsa di libero accesso; è del tutto equivalente all'opzione <code>'''guest ok'''</code>;
| |
| * <code>'''valid users'''</code>, definisce un elenco di utenti abilitati ad accedere alla/e risorsa/e in esame; specificando una stringa vuota si ottiene di garantire l'accesso a tutte le utenze definite tramite <code>smbpasswd</code>. Se un utenza è indicata sia in <code>valid users</code> che in <code>invalid users</code> prevale la seconda, ovvero all'utente è precluso l'accesso.
| |
| * <code>'''read only'''</code>, imposta la risorsa condivisa in sola lettura, è l'esatto opposto dell'opzione <code>writeable</code>, ovvero porre <code>read only = yes</code> equivale a <code>writeable = no</code> e viceversa; dichiarare esplicitamente questo parametro con valore ''yes'' è utile solo qualora nella sezione global sia stato dichiatato esplicitamente <code>read only = no </code>, essendo ''yes'' il valore predefinito.
| |
| {{Box|IMPORTANTE|I successivi due parametri NON devono essere dichiarati nelle sezioni dedicate alle stampanti. }}
| |
| * <code>'''create mask'''</code>: definisce lo schema di permessi in stile UNIX che i file (e non delle cartelle) creati dai client windows avranno. Si noti che questo parametro non altera in alcun modo i permessi dei file eventualmente già presenti in una cartella condivisa oppure creati al di fuori di samba, per esempio da un utente che si è collegato tramite SSH;
| |
| * <code>'''directory mask'''</code>: parametro identico a <code>create mask</code>, ma riguarda le cartelle invece dei file.
| |
|
| |
| ====Parametri specifici====
| |
| Essendo difficile una discussione unitaria si adotta un approccio caso per caso. Si noti dunque che inevitabilmente nei seguenti esempi potranno essere utilizzati anche parametri generici e non solo specifici.
| |
|
| |
| ===== Condivisione di una directory =====
| |
| Adesso sempre dentro il nostro <code>/etc/samba/smb.conf</code>, creiamo la sezione specifica per la risorsa che vogliamo condividere. In questo esempio condivideremo una directory.
| |
| <pre>
| |
| [shared]
| |
| comment = Directory Shared
| |
| path = /dir/da/condividere
| |
| </pre>
| |
| * <code>'''comment''' </code>= commento per la directory;
| |
| * <code>'''path'''</code> = percorso della directory condivisa;
| |
|
| |
| ===== Condivisione di una stampante =====
| |
| Adesso analizziamo i parametri da aggiungere al file <code>/etc/samba/smb.conf</code> per poter condividere una stampante.
| |
| Aggiungiamo alla sezione <code>'''global'''</code>:
| |
| <pre>
| |
| [global]
| |
| printing = [sistema di stampa utilizzato, es: cups, lprng..]
| |
| load printers = yes
| |
| </pre>
| |
| Creiamo inoltre la sezione <code>'''printers'''</code> che fornirà i parametri di accesso alle nostre stampanti:
| |
| <pre>
| |
| [printers]
| |
| path = /var/spool/samba
| |
| guest ok = yes
| |
| printable = yes
| |
| </pre>
| |
| {{Warningbox|Debian non crea in automatico la directory '''/var/spool/samba'''.
| |
| }}
| |
| Questa directory è adibita solo allo spool di stampa, volendo molti la sostituiscono con <code>/tmp</code>. Se decidete di crearla voi, per un corretto funzionamento impostatele i permessi: <code>''nobody:nobody''</code> con:
| |
| <pre> # chown nobody.nobody /var/spool/samba</pre>
| |
| <pre> # chmod -R 755 /var/spool/samba</pre>
| |
|
| |
| Dopodiché scriviamo la sezione specifica per la nostra stampante (''es. una canon'').
| |
| <pre>
| |
| [canon]
| |
| comment = Canon Printer
| |
| path = /var/spool/samba
| |
| </pre>
| |
|
| |
| ===== Condivisione di dispositivi di lettura (CD-ROM, DVD..) =====
| |
| Poniamo come esempio di avere due pc e che solo uno dei due monti un lettore DVD. Bene, guardiamo come poter accedere ad un file, che risiedesse su un supporto DVD, dalla macchina sprovvista di lettore:
| |
| <pre>
| |
| [dvd]
| |
| comment = Lettore DVD-R
| |
| preexec = mount /media/cdrom
| |
| postexec = umount /media/cdrom
| |
| path = /media/cdrom
| |
| writable = no
| |
| </pre>
| |
| Parametri supplementari al nostro <code>/etc/samba/smb.conf</code>:<br>
| |
| * <code>'''preexec'''</code>: permette di impostare un'azione che sarà eseguita una volta connessi alla risorsa;
| |
| * <code>'''postexec'''</code>: in questo caso l'azione sarà eseguita quando la risorsa verrà sconnessa.
| |
|
| |
| Nel momento in cui dal client monteremo la risorsa condivisa (con ''smbmount'' o ''smbclient'') sul server sentiremo montare il DVD, il cui contenuto sarà a nostra disposizione per trasferire file o, in caso di file audio/video, anche di streaming.
| |
|
| |
| Bene, a questo punto il file può considerarsi sufficientemente configurato per i nostri scopi.
| |
|
| |
| === Creazione utenti e Autenticazione ===
| |
|
| |
| {{Box|IMPORTANTE|Perché un utente possa accedere alle risorse appena definite in <code>/etc/samba/smb.conf</code> devono essere soddisfatte due condizioni:
| |
| * Tutti gli utenti samba che si vuol creare devono esistere anche in linux, il che tipicamente significa essere presenti nel file <code>/etc/passwd</code>.
| |
| * Ciascun utente samba deve essere esplicitamente creato attraverso il comando <code>smbpasswd</code>.}}
| |
|
| |
| Per aggiungere o modificare la password di un utente:
| |
| <pre># smbpasswd -a utente</pre>
| |
| Verrà richiesto di immettere due volte la password da attribuire al suddetto utente; fatto ciò in caso di nuovo utente comparirà il messaggio <code>Added user utente</code>.
| |
| Per eliminare la password di un utente
| |
| <pre># smbpasswd -n utente</pre>
| |
| Digitando invece <code># smbpasswd -an utente</code> si aggiunge un utente senza attribuirgli alcuna password.
| |
| Si noti che se il parametro <code>security</code> è impostato sul valore <code>user</code> allora il suddetto utente non potrà autenticarsi presso samba e quindi non avrà alcun accesso alle risorse. Nonrmalmente non si attribuisce password all'utenza da usare come guest, poiché per definizione viene usata per garantire l'accesso ad utenti anonimi.
| |
| Per eliminare un utente dall'elenco utenti di samba (con questo comando non si vanno a toccare gli utenti linux):
| |
| <pre># smbpasswd -x utente</pre>
| |
| {{Box|Nota|Il file con l'elenco utenti e password di samba è di norma memorizzato in '''/var/lib/samba/passdb.tdb''' in forma criptata}}
| |
| Ogni utente ha infine la possibilità di modificare la propria password (a meno che naturalmente non sia stato disabilitato l'accesso tramite bash) digitando:
| |
| <pre>$ smbpasswd</pre>
| |
| Si noti che qualora nel range degli IP ammessi non sia stato specificato anche <code>127.0.0.1</code> al termine della procedura di modifica password si riceverà il seguente errore: ''machine 127.0.0.1 rejected the negotiate protocol. Error was : NT_STATUS_INVALID_NETWORK_RESPONSE''.
| |
|
| |
| Il nome utente è la password definite con il precedente comando costituiscono le credenziali necessarie ad un utente per autenticarsi con successo presso il server samba nel momento in cui si connetteranno le risorse condivise (''smbmount, smbclient'' in linux, finestrella di login in windows).
| |
| Si sottolinea che ciò è strettamente vero nel solo caso in cui sia impostato <code>security = user</code> e <code>map to guest = never</code>, poiché negli altri casi ciò potrebbe non essere vero; per esempio se è <code>security = share</code> è possibile vedere tutte le risorse disponibili (e per cui non si sia definito <code>browseable = no</code>) senza alcun bisogno di immettere alcun tipo di credenziali (queste vengono al limite richieste solo quando si richiede di accedere ad una specifica risorsa).
| |
|
| |
| {{Warningbox|Oltre a definire correttamente gli utenti in samba è sempre necessario definire correttamente i permessi UNIX sulle cartelle che si andranno a condividere, ovvero se si desidera che l'utente pinco pallino abbia accesso sia in lettura che scrittura ad una certa cartella non è sufficiente imporre ''read only = no'', ma bisogna che ad esempio l'utente in questione sia proprietario della cartella oppure che questa abbia schema ''777'', ecc.}}
| |
|
| |
| ====L'utenza guest ovvero le condivisione pubbliche====
| |
| Il primo passo per rendere una risorsa pubblica, nel senso di accessibile a chiunque senza bisogno di credenziali, ma comunque sempre all'interno dell'intervallo di IP ammissibili definiti con <code>allow hosts</code>, è come già scritto definire <code>guest ok = yes</code>. Fatto ciò ci sono due strade per il secondo passo: la prima consiste nel definire <code>security = share</code>, l'altra prevede di mantenere <code>security = user</code> e imporre <code>map to guest = Bad User</code> (si veda quanto precedentemente scritto a proposito dei suddetti parametri).
| |
| {{Box|NOTA|Quanto qui scritto non tiene conto per una questione di semplicità delle casistiche <code>security = domain</code> e <code>security = server</code>, trattandosi di parametri normalmente usati in configurazioni di rete ben più complesse della rete domestica e del piccolo ufficio.}}
| |
| L'importante è che l'utente da usare come guest sia stato creato correttamente (che sia abilitato o meno è irrilevante); a tal proposito è possibile o usare l'utenza predefinita <code>nobody</code> oppure usarne un'altra a scelta definendo nella sezione <code>global</code> il parametro <code>guest account = mio_utente</code>, dove ''mio_utente'' deve essere un utenza già esistente in linux e in samba.<br>
| |
| A titolo informativo si ricorda che è possibile creare un utente in linux disabilitandone subito la possibilità di autenticarsi aggiungendo al comando <code>adduser</code> l'opzione <code>--disabled-login</code>; qualora invece l'utente sia già esistente è sufficiente usare l'opzione <code>-l</code> del comando <code>passwd</code> per disabilitarne la capacità di autenticarsi al sistema.
| |
|
| |
| Vale la pena esplicitare cosa succede nel caso <code>security = user</code> e <code>map to guest = Bad User</code> quando l'utente windows clicca sull'icona del server:
| |
| * '''Utenza windows non esistente o non mappata''': l'utente windows viene automaticamente autenticato come guest; si noti che in tal caso è sempre possibile autenticarsi nuovamente con una differente utenza quando si accede ad una risorsa non pubblica, tuttavia una volta fatto ciò l'utente sarà visto dal server samba sempre con il nome utente appena immesso, a meno di non disconnettersi e riconnettersi a windows.
| |
| * '''Utenza windows esistente o mappata'''
| |
| ** ''Password windows coincidente'': l'utente windows viene automaticamente autenticato con il suo nome utente o con quello definito dalla mappa utenti, parametro <code>username map</code>.
| |
| ** ''Password windows non coincidente'': quando allo stesso utente sono associate due password differenti in windows e samba-linux viene proposta la finestra di login; in caso di immissione errata della password all'utente viene negato qualsiasi accesso alle risorse remote (compreso il semplice elenco delle risorse condivise). Si noti che un utente con nome windows coincidente con uno di quelli linux non può usare l'utenza guest, pertanto se l'utenza omonima sul server linux non è di sua proprietà egli non potrà autenticarsi presso il server con il suo nome utente windows. In tal caso l'unico modo per garantirgli l'accesso è creare un apposita utenza in linux e comunicargli le relative credenziali (attenzione a non rimappare l'utenza poiché in tal caso verrebbe bloccato l'accesso all'altro utente).
| |
|
| |
| ====Sincronizzazione delle password samba e linux====
| |
| Qualora si desiderasse mantenere sincronizzate le password linux (<code>passwd</code>) con quelle definite attraverso <code>smbpasswd</code> è possibile ricorrere ad appositi parametri, come già scritto.
| |
| {{Box|NOTA|con questo metodo la sincronizzazione è unidirezionale, ovvero qualsiasi modifica alla password samba verrà automaticamente propagata a quella linux, ma non viceversa.}}
| |
| Oltre ad utilizzare <code>passwd</code> per impostare le password è anche possibile usare PAM, badando bene che i due metodi sono mutualmente esclusivi. In particolare impostare <code>pam password change = yes</code> comporta l'automatica esclusione della prima modalità.<br>
| |
| In entrambi i casi devono essere sempre definiti i parametri <code>passwd chat</code> (anche il testo da passare può essere il medesimo) e <code>unix passwd sync = yes</code>.<br>
| |
| Nel caso di <code>passwd</code> è necessario specificare oltre ai precedenti due anche il parametro <code>passwd program</code>, mentre nel secondo devono essere specificati sia il succitato <code>pam password change = yes</code> che <code>obey pam restrictions = yes</code> (quest'ultimo potrebbe forse essere opzionale).<br>
| |
| Esplicitando, nel primo caso andrà aggiunta alla sezione <code>[global]</code> quanto segue:
| |
| <pre>
| |
| passwd program = /bin/passwd %u
| |
| passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
| |
| unix password sync = Yes
| |
| </pre>
| |
| Mentre nel secondo:
| |
| <pre>
| |
| pam password change = yes
| |
| obey pam restrictions = yes
| |
| passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
| |
| unix password sync = Yes
| |
| </pre>
| |
|
| |
| ===Riavvio e test del server===
| |
|
| |
| Creato/modificato il file <code>smb.conf</code> e creati gli utenti è il momento di riavviare il server:
| |
| <pre>
| |
| # /etc/init.d/samba restart
| |
| Stopping Samba daemons: nmbd smbd.
| |
| Starting Samba daemons: nmbd smbd.
| |
| #
| |
| </pre>
| |
|
| |
| Terminato il riavvio dei vari demoni si procede a testare la validità del file <code>/etc/samba/smb.conf</code> digitando:
| |
|
| |
| <pre>
| |
| # testparm /etc/samba/smb.conf
| |
| Load smb config files from /etc/samba/smb.conf
| |
| Processing section "[shared]"
| |
| Processing section "[canon]"
| |
| Processing section "[dvd]"
| |
| Loaded services file OK.
| |
| Server role: ROLE_STANDALONE
| |
| Press enter to see a dump of your service definitions
| |
| </pre>
| |
| Premendo enter vedremo il resoconto del nostro file.
| |
|
| |
| == Client Samba ==
| |
| ===Premessa===
| |
| Sono semplicemente applicativi che permettono essenzialmente di copiare da o su una risorsa remota file e cartelle. Mentre in windows esplora risorse permette di norma di rendere disponibile le varie risorse remote a qualsiasi programma in esecuzione come se si trovassero fisicamente sul computer, su linux purtroppo questo non è sempre vero. In quest'ultimo caso perché le risorse remote siano accessibili come quelle locali è necessario "montarle" nel proprio filesystem attraverso appositi applicativi e procedure descritte nella prossima sezione di questa guida ''Montare le risorse remote nel filesystem locale''.
| |
|
| |
| ===Esplora risorse===
| |
|
| |
| Non c'è nulla da configurare, in Windows è già tutto automatizzato. L'utente non deve far altro che cliccare sulla voce rete per visualizzare le risorse disponibili; al più viene richiesto di inserire manualmente l'indirizzo del server, per esempio digitando nella barra degli indirizzi <code>\\nome_server</code> o direttamente l'IP dello stesso.<br />
| |
| Si ricorda che non è possibile accedere durante la stessa sessione utente a cartelle per cui sono richieste credenziali differenti, ovvero una volta fatto l'accesso ad una certa cartella sarà possibile accedere solo a cartelle per cui valgano le stesse credenziali, anche se si conoscono le credenziali per accedere ad altre cartelle.
| |
|
| |
| ===Nautilus===
| |
|
| |
| Per accedere alle condivisioni windows esistono tre strade:
| |
| * Selezionare la voce ''Vai --> Rete'' perché compaia l'elenco delle reti disponibili. Si noti che il server samba sarà accessibile cliccando su "Reti Windows", visto che relativamente alla condivisione di file, stampanti, ecc. samba "emula" una macchina sui cui è installato windows. È possibile che arrivati a cliccare sul nome del computer con le risorse desiderate si riceva il seguente messaggio: ''Impossibile montare la posizione recupero dell'elenco delle condivisioni dal server non riuscito''. In tal caso provare usando un diverso metodo.
| |
| * Selezionare la voce ''File --> Connetti al server...'' e nella maschera che compare selezionare ''condivisioni windows'', così facendo questa cambierà mostrando altri campi da compilare come segue:
| |
| ** ''Server'': l'hostname della macchina su cui risiede la cartella che si vuol vedere (e che deve ovviamente essere già configurata correttamente nel file smb.conf di quella macchina).
| |
| ** ''Porta'': parametro non editabile.
| |
| ** ''Condivisione'': il nome della cartella che si vuol vedere (è il nome definito per la suddetta cartella nel file smb.conf della macchina che ospita la suddetta cartella).
| |
| ** ''Cartella'': lasciare pure '''/'''.
| |
| ** ''Nome del dominio'': il nome del proprio dominio o del proprio gruppo di lavoro. Il valore predefinito per il gruppo di lavoro è WORKGROUP, tuttavia sarà necessario inserire il nome del gruppo di lavoro definito nel solito file smb.conf della macchina su cui risiede la cartella.
| |
| ** ''Nome Utente'' e ''Password'', sono abbastanza intuitivi, si sottolinea solo che devono essere quelli definiti con smbpasswd.
| |
| * Premere <code>CTRL+L</code> per rendere editabile la barra degli indirizzi e digitare <code>smb://nome_server</code> in modo da visualizzare tutte le cartelle condivise dal server ''nome_server'' (posto che sia permessa la visualizzazione delle risorse per un utente non autenticato). A questo punto è sufficiente fare doppio click sulle singole cartelle perché si apra una maschera in cui si chiede nome utente, password e nome del dominio o gruppo di lavoro (occhio a non inserirlo errato, per esempio "MIO GRUPPO" è differente da "MIO_GRUPPO"...). Lo stesso risultato si sarebbe potuto ottenere digitando direttamente nella barra degli indirizzi <code>smb://nome_server/nome_cartella</code>. Se si sbaglia ad inserire uno dei precedenti dati, o se si tenta di montare una seconda cartella per cui sono richieste credenziali differenti dalla prima si riceverà il messaggio: ''Errore: Non è stato possibile montare la condivisione Windows. Selezionare un altro visualizzatore e tentare di nuovo.''
| |
|
| |
| === Smbclient ===
| |
|
| |
| {{Box|NOTE|
| |
| * Installare quest'applicativo anche sulle macchine dedicate esclusivamente a fornire risorse per la rete, come nel caso di file server.
| |
| * Se si prova ad accedere alle risorse condivise da una macchina cui corrisponde un indirizzo IP non compreso nell'intervallo di indirizzi ammessi (<code>hosts allow</code>) si riceverà come errore ''protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE''.
| |
| * Se si usa smbclient per accedere alle condivisioni ospitate su una macchina windows con nome dominio verrà mostrato l'hostname della macchina e non il nome del gruppo/dominio di appartenza.}}
| |
|
| |
| Installazione: <pre># apt-get install smbfs cifs-utils smbclient</pre>
| |
|
| |
| Come detto in precedenza, ''smbclient'' è un programma client ftp-like, utilizzato per l'accesso a un server Samba. Si osservino i suoi principali flags e, una volta effettuato il login sul server, le sue principali funzioni.
| |
|
| |
| ====Principali parametri (flags)====
| |
| (''Usare <code>smbclient --help</code> per l'elenco completo' dei parametri'):
| |
|
| |
| * <code>'''smbclient -L ''hostname'''''</code>: elenca tutte le risorse condivise di una certa macchina. Ad esempio dal terminale della macchina client dell'utente (''come password digitiamo quella dell'user creato con ''smbpasswd'' o solo invio'') scrivere:
| |
| <pre>
| |
| $ smbclient -L SERVER
| |
| Password: ****
| |
|
| |
| Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian]
| |
|
| |
| Sharename Type Comment
| |
| --------- ---- -------
| |
| shared Disk Directory Shared
| |
| canon Disk Canon Printer
| |
| dvd Disk Lettore DVD-R
| |
| IPC$ IPC IPC Service (server@debianizzati.org)
| |
| ADMIN$ IPC IPC Service (server@debianizzati.org)
| |
|
| |
| Domain=[debianizzati] OS=[Unix] Server=[Samba 3.0.14a-Debian]
| |
|
| |
| Server Comment
| |
| --------- -------
| |
| SERVER server@debianizzati.org
| |
| CLIENT server@debianizzati.org
| |
|
| |
| Workgroup Master
| |
| --------- -------
| |
| debianizzati SERVER
| |
| </pre>
| |
|
| |
| Come si vede, nella colonna '''Sharename''' sono elencati i nomi delle risorse definite in <code>/etc/samba/smb.conf</code>, quindi la directory ''shared'',la stampante e il lettore DVD (''le sezioni <code>[global]</code> e <code>[printers]</code> non sono visibili poiché sono sezioni di parametri usate dal programma'').<br>
| |
| Nella colonna '''Server ''' sono invece elencati gli host facenti parte del medesimo gruppo di lavoro (''workgroup'').<br>
| |
| C'è poi la colonna '''Workgroup''' che visualizza l'host con ruolo di domain master browser nella subnet.
| |
| * <code>'''smbclient -L ''////hostname'' -U nome_utente'''</code>: come sopra, ma limita l'output alle cartelle che sono visibili all'utente ''nome_utente'' (nel caso quindi non tutti gli utenti siano in grado di vedere tutte le cartelle condivise).
| |
|
| |
| ==== Accesso al server ====
| |
|
| |
| Per accedere effettivamente alle risorse condivise è necessario digitare:
| |
| <pre>$ smbclient servizio password -U nome_utente</pre>
| |
| * ''servizio'': può essere la risorsa condivisa, ad esempio <code>//nome_server/cartella_condivisa</code>, dove ''cartella_condivisa'' è il nome specificato in samba per la cartella in questione; notare che se la cartella ''/home/sempronio'' viene definita in samba con il nome ''caio'' allora bisognerà specificare come servizio <code>//nome_server/caio</code> (usare un IP al posto del nome del computer potrebbe comportare la generazione di un errore).
| |
| * ''password'': è evidentemente quella definita in precedenza per l'utente; se omessa all'utente verrà richiesto di inserirla.
| |
| * ''nome_utente'': lo username dell'utente da usare, se omesso come primo tentativo verrà usato lo username dell'utente sulla macchina client.
| |
| Qualora si tentasse di accedere ad una risorsa per la quale lo username usato è privo dei necessari permessi si riceverà il seguente messaggio d'errore:
| |
| <pre>
| |
| Domain=[vostro_dominio] OS=[Unix] Server=[Samba 3.5.11]
| |
| tree connect failed: NT_STATUS_ACCESS_DENIED
| |
| </pre>
| |
| In caso di connessione riuscita la videata dovrebbe apparire simile a quanto segue:
| |
| <pre>
| |
| $ smbclient //SERVER/shared
| |
| Password: ****
| |
| Domain=[SERVER] OS=[Unix] Server=[Samba 3.0.14a-Debian]
| |
| smb: \>
| |
| </pre>
| |
|
| |
| Il prompt <code>smb: \></code> indica che l'utente si trova nella risorsa condivisa richiesta al server Samba (il cui hostname d'esempio è SERVER). Sostanzialmente il funzionamento di ''smbclient'' è analogo a quello di un client ftp, ma con in più degli utilissimi tools per il down/uploading dei file.
| |
| Alcuni input uguali a quelli di una shell di bash sono: '''ls''', '''cd''', '''rm''', '''rmdir''', '''exit''', coi quali l'utente dovrebbe avere già confidenza.
| |
| È comunque possibile ottenere una lista di comandi utili digitando '''help'''.
| |
|
| |
| '''Download di un file con get'''.<br>
| |
| Poniamo come esempio che il contenuto della directory condivisa sia un insieme di file immagine con diverse estensioni e una directory con dentro qualsiasi cosa:
| |
| <pre>
| |
| smb: \> ls
| |
| . D 0 Tue Aug 23 23:57:51 2005
| |
| .. D 0 Wed Aug 17 03:05:20 2005
| |
| directory D 0 Wed Aug 24 12:21:43 2005
| |
| free_kevin.png 42604 Mon Aug 22 12:19:34 2005
| |
| pokemon.png 43404 Mon Aug 22 15:15:11 2005
| |
| dorothy_la_may.gif 46134 Mon Aug 21 21:16:00 2005
| |
| </pre>
| |
|
| |
| Scarichiamo il file ''free_kevin.png'' dalla macchina SERVER alla nostra macchina CLIENT, rinominandolo in kevin.png:
| |
| <pre>
| |
| smb: \> get free_kevin.png kevin.png
| |
| getting file \ free_kevin.png of size 42604 as kevin.png(1386.8 kb/s) (average 1386.8 kb/s)
| |
| </pre>
| |
|
| |
| Il file sarà salvato nella directory dalla quale ci siamo connessi al server. Qualora il file non venisse rinominato manterrebbe il proprio nome.
| |
|
| |
| ==== Alcune funzioni ====
| |
| * <code>'''lowercase'''</code>: abilita i file ad essere richiamati da ''get'' e ''mget'' utilizzando solo caratteri minuscoli. È utile viste le difficoltà spesso trovate negli share MSDOS (''case insensitive'').
| |
| <pre>
| |
| es. di abilitazione dei parametri:
| |
| smb: \> lowercase on
| |
| smb: \> prompt on
| |
| </pre>
| |
| * <code>'''prompt'''</code>: impostando ''' prompt''' su '''on''' prima di ogni trasferimento ci verrà richiesta una conferma;
| |
| * <code>'''showconnect'''</code>: mostra l' //host/nome_risorsa in uso:
| |
| <pre>
| |
| smb: \> showconnect
| |
| //SERVER/shared
| |
| </pre>
| |
|
| |
| * <code>'''stat nomefile'''</code>: stampa a video i permessi di un file e offre, in ordine temporale, info sugli accessi ad esso:
| |
| <pre>
| |
| smb: \> stat free_kevin.png
| |
| File: \free_kevin.png
| |
| Size: 101 Blocks: 8 regular file
| |
| Inode: 810 Links: 1
| |
| Access: (0644/-rw-r--r--) Uid: 1000 Gid: 1000
| |
| Access: 2005-08-24 00:10:39 +0200
| |
| Modify: 2005-08-24 00:10:51 +0200
| |
| Change: 2005-08-24 00:10:51 +0200
| |
| </pre>
| |
|
| |
| ==== Mask, mget e recurse ====
| |
| Con il comando '''mget''' abilitiamo il download di tutti i file e directory in maniera ricorsiva. Tuttavia possiamo dare a tale comando un parametro (maschera) utilizzando '''mask''' .
| |
| Es. nella nostra directory mettiamo di voler scaricare tutti i file con estensione .png:
| |
| <pre>
| |
| smb: \> mask *png
| |
| smb: \> mget
| |
| </pre>
| |
| In questo modo mget intenderà scaricare tutti i files con tale estensione presenti nella directory corrente.
| |
| Tuttavia con mget è possibile modificare la maschera on-fly digitando semplicemente:
| |
| <pre>
| |
| smb: \> mget *png
| |
| </pre>
| |
| In questo modo la funzione mask, manterrà il suo valore di default che è '*' (''cioè tutto'').
| |
| La funzione '''recurse on''' attiva lo scanning & downloading (nel caso di una maschera) o il downloading, accedendo anche a tutte le directory presenti nella directory da cui parte il comando.
| |
|
| |
| === smb2www ===
| |
| Potrebbe essere comodo attivare un servizio attraverso il quale gli utenti della nostra rete possano accedere (in sola lettura) alle condivisioni Samba del nostro server, magari per scaricare qualche file...<br/>
| |
| Il programma smb2www è un servizio realizzato in Perl che rende possibile tutto questo. Per funzionare deve ovviamente essere installato un server web Apache funzionante.
| |
| ==== Installazione ====
| |
| Per installarlo è sufficiente utilizzare apt:
| |
| <pre>
| |
| # apt-get update
| |
| # apt-get install smb2www
| |
| </pre>
| |
| ==== Configurazione ====
| |
| Per configurare correttamente il servizio ci sono due strade:
| |
| * utilizzare dpkg per riconfigurarlo:
| |
| <pre>
| |
| # dpkg-reconfigure smb2www
| |
| </pre>
| |
| * Aprire il file <tt>'''/etc/smb2www/smb2www.conf'''</tt> e modificare la voce <tt>'''enabled=no'''</tt> in <tt>'''enabled=yes'''</tt>
| |
| ==== Sicurezza ====
| |
| Per aumentare la sicurezza dell'applicazione, l'autore consiglia di inserire queste righe nel file di configurazione del vostro server Apache:
| |
| <pre>
| |
| <Location /cgi-bin/samba/>
| |
| <Limit GET POST>
| |
| order allow,deny
| |
| allow from 127.0.0.1
| |
| AuthName smb2www
| |
| AuthType basic
| |
| AuthUserFile /etc/smb2www/smb2www-users
| |
| AuthGroupFile /dev/null
| |
| require valid-user
| |
| Satisfy Any
| |
| </Limit>
| |
| </Location>
| |
| </pre>
| |
| Alcune note:
| |
| * Se intendete (come credo) permettere l'accesso al servizio anche da altre macchine dovete cambiare la direttiva <tt>'''allow from 127.0.0.1'''</tt> con <tt>'''Allow from All'''</tt> o <tt>'''Allow from 192.168.1.0/24'''</tt> (o simili, a seconda della classe della vostra rete LAN)
| |
| * Se intendete utilizzare la gestione utenti di Linux aggiungete la direttiva <tt>'''AllowUserFile /etc/passwd'''</tt>
| |
| * Ulteriori informazioni si trovano in <tt>/usr/share/doc/smb2www/index.html</tt>
| |
|
| |
| ==== Utilizzo del servizio ====
| |
| Per accedere alle condivisioni Samba via web basta aprire il browser e puntarlo su:
| |
| <pre>
| |
| http://ip-del-vostro-server/cgi-bin/samba/smb2www.pl
| |
| </pre>
| |
| Una cosa comoda è il fatto che cliccando sul link '''Download this Directory''' è possibile scaricare l'intero contenuto in formato .tar della cartella condivisa in cui si sta navigando.
| |
|
| |
| === Altri client ===
| |
| Quelli appena descritti non sono gli unici esistenti, a titolo d'esempio si citano:
| |
| * '''Samba Commander''', interfaccia testuale <pre>apt-get install smbc</pre>
| |
| * '''TkSmb''', interfaccia grafica dipendente da smbclient disponibile fino a Debian Lenny <pre>apt-get install tksmb</pre>
| |
| * '''xSMBrowser''', interfaccia grafica disponibile fino a Debian Squeeze <pre>apt-get install xsmbrowser</pre>
| |
| * '''pyneighborhood''', interfaccia grafica in grado di mostrare tutti i gruppi di lavoro Windows presenti nella nostra rete e, per ciascuno, i server e le risorse condivise, che sarà possibile montare con un click fornendo le corrette credenziali di autenticazione
| |
| <pre>apt-get install pyneighborhood</pre>
| |
|
| |
| == Montare le risorse remote nel filesystem locale ==
| |
|
| |
| Invece di usare un client come quelli precedentemente elencati è possibile montare le risorse remote in un punto qualsiasi del proprio filesystem in modo da farle apparire come normalissime cartelle, indistinguibili in tutto e per tutto da quelle locali.
| |
| Questo risultato può essere ottenuto tramite due diversi applicativi.
| |
|
| |
| === CIFS, Mount e Umount ===
| |
| ''Ipotesi Preliminari''
| |
| * Il server su cui gira samba si chiama ''mioserver''
| |
| * Alla risorsa remota su ''mioserver'' è stato dato il nome di "miacartella" (ricordo che il nome samba può non coincidere con quello Linux).
| |
| * L'utente crea autonomamente la cartella <code>/mnt/samba</code> sulla propria macchina perché desidera che il contenuto della cartella remota "miacartella" risulti visibile in <code>/mnt/samba</code>. È ''IMPORTANTE''' che tale cartella sia e rimanga vuota (eccetto evidentemente quando le risorse remote sono montate).
| |
| * L'utente ha verificato che nella macchina su cui vuole montare le risorse remote samba sia presente il pacchetto <code>'''cifs-utils'''</code> e, qualora non presente, abbia già provveduto ad installarlo.
| |
| ==== Caricare le risorse remote ====
| |
| Premesso tutto ciò da terminale è sufficiente digitare un comando del tipo:
| |
| <pre>
| |
| # mount -t cifs "//mioserver/miacartella" -o user=utente_samba,pass=password_utente_samba,uid=1000,gid=1000,file_mode=0777,dir_mode=0775 "/mnt/samba"
| |
| </pre>
| |
| A questo punto, se non sono comparsi messaggi d'errore, in <code>/mnt/samba</code> dovrebbe essere presente il contenuto di "miacartella".<br />
| |
| Il significato del precedente comando è il seguente:
| |
| * '''mount''', è come già detto il nome dell'applicativo;
| |
| * '''-t''', dice a mount il tipo di filesystem delle risorse che si vuole montare, in questo caso ''cifs''.
| |
| * '''"//mioserver/miacartella"''', è il percorso della risorsa remota. I doppi apici sono necessari solo se il nome del server o della cartella non è standard, per esempio se contiene degli spazi.
| |
| * '''-o ''', serve a passare le opzioni:
| |
| :- ''user'', definisce l'utente samba;
| |
| :- ''pass'', definisce la password dell'utente samba;
| |
| :- ''uid'' e ''gid'' definiscono chi saranno il proprietario e il gruppo proprietario (attraverso i rispettivi ID numerici) delle risorse montate. Evitando di specificare tali parametri è quasi certo che le risorse risulteranno accessibili in sola lettura a tutti gli utenti normali, poiché per comportamento predefinito il possesso viene attribuito all'utente root e al gruppo root.
| |
| :- ''file_mode'' e ''dir_mode'' permettono di definire schemi di permessi differenti da quello standard, ovvero <code>0755</code>, rispettivamente per file e cartelle.
| |
| {{ Warningbox | Date certe credenziali non è possibile attribuire permessi meno restrittivi di quelli definiti sulla macchina che mette a disposizione le risorse, per esempio è possibile montare in sola lettura delle risorse che in orgine permettevano sia lettura chee scrittura, ma non il contrario. }}
| |
| * '''/mnt/samba''', è già stato illustrato nelle ipotesi preliminari. Come sempre i doppi apici sono necessari solo per nomi non standard.
| |
| ===== Caricamento automatico all'avvio =====
| |
| È possibile evitare di dover caricare manualmente ad ogni avvio le risorse remote editando oppurtunamento il file <code>/etc/fstab</code>, ovvero inserendo un'opportuna riga per ogni risorsa (attenzione che la riga è molto lunga e potrebbe non essere interamente visibile nella finiestra del browser):
| |
| <pre>
| |
| //mioserver/miacartella /mnt/samba cifs _netdev,credentials=/percorso_file/credenziali,uid=1000,gid=1000,file_mode=0777,dir_mode=0775 0 0
| |
| </pre>
| |
| ''credentials'', definisce il percorso di un file testuale contenente tre righe e necessario per autenticarsi presso il server samba:
| |
| <pre>
| |
| username=utente_samba
| |
| password=password_utente_samba
| |
| domain=nome_dominio_o_gruppo_samba
| |
| </pre>
| |
| ''_netdev'' dovrebbe imporre che la risorsa remota venga montata solo dopo aver configurato attivato correttamente l'interfaccia (le interfacce?) di rete, poiché se per caso l'operazione di mount avviene prima che questa sia pronta non verrà montato alcunché (ma sarà poi comunque possibile montare manualmente la risorsa).
| |
| {{ Warningbox | '''/etc/fstab''' mal tollera i nomi e i percorsi non standard, pertanto ove possibile evitare di scegliere nomi delle condivisioni contenenti spazi o altri caratteri speciali. }}
| |
| Qualora proprio non se ne potesse fare a meno è possibile indicare i caratteri speciali in forma ottale (se tutti o solo alcuni non è dato saperlo); ad esempio una cartella di nome '''<code>prova &del %</code>''' dovrebbe essere indicata come '''<code>prova\040\046del\040%</code>'''; si noti che mentre la "e commerciale" e lo spazio devono essere indicati in forma ottale, il simbolo "percento" può essere indicato normalmente. A [http://www.asciitable.com/ quest'indirizzo] è disponibile una tabella di conversione per i primi 256 caratteri ASCII.
| |
|
| |
| ==== Smontare le risorse remote ====
| |
| Per terminare l'accesso alle risorse remote dalla macchina in uso è sufficiente digitare sempre come root:
| |
| <pre># umount /mnt/samba</pre>
| |
|
| |
| === SMBFS, Smbmount e Smbumount ===
| |
|
| |
| Se per un qualche motivo non si può o non si vuole usare il filesystem ''CIFS'' è sempre possibile adottare il il più vecchio ''SMBFS''; in tal caso dovrebbe essere sufficiente installare il pacchetto <code>smbfs</code> perché sia possibile continuare ad usare <code>mount/umount</code> per connettere e disconnettere le condivisioni windows. La sintassi dei comandi <code>mount</code> e <code>umount</code> non cambia, bisogna solo avere l'accortezza di specificare <code>-t smbfs</code> invece di <code>-t cifs</code>, nonché consultare il manuale per vedere quali opzioni sono supportate da ''SMBFS'' e quali no.<br />
| |
| Alternativamente è possibile usare i comandi <code>smbmount</code> e <code>smbumount</code>, dalla sintassi molto simile a <code>mount</code> e <code>umount</code>. Per montare ad esempio una risorsa di nome ''shared'':
| |
| <pre>$ smbmount //SERVER/shared /path/del/mountpoint</pre>
| |
|
| |
| (''come password digitiamo quella dell'user creato con smbpasswd o solo invio'')
| |
|
| |
| Così facendo potremmo accedere alla risorsa condivisa, raggiungendo il mountpoint:
| |
| <pre>
| |
| $ cd /path/del/mountpoint
| |
| $ ls
| |
| directory free_kevin.png pokemon.png dorothy_la_may.gif
| |
| </pre>
| |
|
| |
| == Esempi applicativi ==
| |
|
| |
| ===Account guest con <security = user>===
| |
| File <code>smb.conf</code>
| |
| <pre>
| |
| [global]
| |
| hosts allow = 127.0.0.1 192.168.1.0/24
| |
| workgroup = mio_gruppo_lavoro
| |
| writeable = yes
| |
| guest ok = no
| |
| map to guest = Bad User
| |
| guest account = ospite
| |
|
| |
| [mio_utente]
| |
| path = /home/mio_utente
| |
| valid users = mio_utente
| |
| create mask = 0750
| |
| directory mask = 0750
| |
|
| |
| [Pubblica]
| |
| path = /home/ospite
| |
| guest ok = yes
| |
| guest only = yes
| |
| create mask = 0777
| |
| directory mask = 0777
| |
| </pre>
| |
| Sostituire ''mio_gruppo_lavoro'' e ''mio_utente'' con i propri valori (anche nei successivi comandi). Il suddetto file di configurazione restringe l'accesso al localhost ed al range di indirizzi 192.168.1.1 - 192.168.1.254, utilizza come account guest l'utenza ''ospite'' e mappa i nomi utente inesistenti come guest; la cartella ''mio_utente'' è privata, mentre l'altra è potenzialmente accessibile a chiunque. La home di ospite funziona da cartella pubblica.
| |
| È richiesta quindi la creazione dell'utenza ospite sia in linux che samba, mentre di ''mio_utente'' solo in samba:
| |
| <pre>
| |
| # smbpasswd -a mio_utente
| |
| # adduser ospite --disabled-login
| |
| # smbpasswd -an ospite
| |
| </pre>
| |
| Se già non lo sono vanno impostati correttamente i permessi su file e cartelle da condividere, ad es. per quella pubblica:
| |
| <pre># chmod -R 777 /home/ospite/</pre>
| |
| Riavvio del server
| |
| <pre># /etc/init.d/samba restart</pre>
| |
|
| |
| == Possibili prolemi ==
| |
|
| |
| === Collegamenti simbolici ===
| |
| Se si hanno dei collegamenti simbolici che puntano a risorse non comprese in quelle dichiarate in samba e si riceve un errore simile al seguente:
| |
| <pre>
| |
| smbd[7407]: check_reduced_name: Bad access attempt: cartella_condivisa is a symlink outside the share path
| |
| </pre>
| |
| provare ad aggiungere quanto segue nella sezione globale di <code>smb.conf</code>:
| |
| <pre>
| |
| follow symlinks = yes
| |
| unix extensions = no
| |
| wide links = yes
| |
| </pre>
| |
|
| |
| === NT_STATUS_INVALID_NETWORK_RESPONSE ===
| |
| Qualora si dovesse riceve il seguente messaggio d'errore usando smbclient
| |
| <pre>machine WWW.XXX.YYY.ZZZ rejected the negotiate protocol. Error was : NT_STATUS_INVALID_NETWORK_RESPONSE</pre>
| |
| controllare di aver incluso nel parametro ''hosts allow'' l'indirizzo ''WWW.XXX.YYY.ZZZ'' (o la subnet che lo contiene).
| |
|
| |
| === NT_STATUS_BAD_NETWORK_NAME ===
| |
| In genere quest'errore di smbclient è dovuto ad una errata indicazione del servizio cui si vuole accedere, per esempio:
| |
| <pre>
| |
| $ smbclient ////WWW.XXX.YYY.ZZZ//cartella_condivisa -U nome_utente
| |
| $ smbclient WWW.XXX.YYY.ZZZ -L -U nome_utente
| |
| $ smbclient //WWW.XXX.YYY.ZZZ/cartella_inesistente -U nome_utente
| |
| $ smbclient //nome_server_scoretto/cartella_inesistente -U nome_utente
| |
| </pre>
| |
| Nel primo caso si sono usati troppi '''/''', nel secondo l'opzione '''-L''' andava anticipata rispetto all'indirizzo IP e nel terzo caso si è indicata una risorsa condivisa inesistente. Nell'ultima riga si è usato o un nome al posto dell'indirizzo IP, il che è assolutamente lecito, tuttavia se tale nome è errato oppure il PC in uso non è in grado di risolvere correttamente il nome specificato allora si riceve l'errore in oggetto.
| |
|
| |
| === Schede di rete multiple ===
| |
| È possibile che nel caso siano presenti più schede di rete, di cui una o più non configurate, l'accesso al server samba risulti impedito. Due possibili soluzioni sono:
| |
| * Creare un [http://guide.debianizzati.org/index.php/Bridge_con_schede_di_rete Bridge di rete] comprendente tutte le schede.
| |
| * Togliere fisicamente le schede di rete non necessarie.
| |
|
| |
| == Note su Windows ==
| |
| L'intera guida presuppone, come ovvio, che client di vario tipo debbano accedere a file e cartelle presenti su un server Linux, e non il contrario. Ciò nonostante si ritiene utile precisare alcuni elementi per quegli utenti che si trovino anche a dover accedere da client linux a windows:
| |
| * Quando si condivide una cartella da windows, di base a questa vengono concessi semplicemente i privilegi di lettura, quindi un utente che necessiti anche di scrivere su tali posizioni dovrebbe controllare che permessi e utenti specificati nelle schede "condivisione" e "protezione" siano adeguati.
| |
| * Windows ha il brutto vizio di rendere visibili anche le lettere delle unità associate ai dischi fisici, nonostante l'utente non abbia mai dato esplicito permesso per tutto ciò. Perché ciò non avvenga è necessario editare il registro di windows aggiungendo una nuova chiave in <code>HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters</code>:
| |
| ** ''Type'': DWORD.
| |
| ** ''Name'': AutoShareWks.
| |
| ** ''Value'': 0.
| |
| == Approfondimenti ==
| |
| === Debianizzati ===
| |
| [[Samba e OpenLDAP: creare un controller di dominio]]<br/>
| |
| [[Samba e OpenLDAP: creare un controller di dominio con Debian Etch]]<br/>
| |
| [[Samba e OpenLDAP: creare un controller di dominio con Debian Lenny]]<br/>
| |
| [[Implementare un'architettura ridondante master/slave OpenLDAP]]<br/>
| |
| [[ClamAV: scansione antivirus delle condivisioni samba]]<br/>
| |
| [[Samba: creare un cestino di rete per le condivisioni]]
| |
|
| |
| === Sitografia ===
| |
| [http://www.samba.org/samba/docs/ Documentazione] sito ufficiale samba.<br>
| |
| [http://www.samba.org/~tpot/articles/multiple-interfaces.html Limitare] le interfaccedi rete su cui mantenere attivo samba.
| |
|
| |
|
| {{Autori | | {{Autori |
Riga 698: |
Riga 16: |
| |Numero_revisori = 1 | | |Numero_revisori = 1 |
| }} | | }} |
| | |
|
| |
|
| [[Categoria:Filesystem]] | | [[Categoria:Filesystem]] |