Il mondo delle reti CIFS presenta insidie di varia natura, il protocollo è a suo modo contorto e le implementazioni di diversi produttori possono dar luogo a problematiche diverse.
Per diagnosticare problemi con Samba esistono vari strumenti a disposizione degli utenti:
- I log di Samba stesso
- I vari tool Samba presenti nel pacchetto ufficiale
- Genericamente, i vari strumenti di sistema disponibili su Unix e Windows per diagnosticare problemi di rete e servizi.
I LOG DI SAMBA
Sono tipicamente fra le prime cose da guardare. Nel file di configurazione è possibile definire vari parametri tra cui:
log file = %m.log
- Il nome e la logica con cui vengono salvati i log (possono essere divisi per utente, macchina ecc);
debug level = 2
- La verbosità dei log stessi, con valori che vanno da 0 (nessun logging) a 10 (maggimo debugging). Un valore di debug di 3 o superiore è già fin troppo verboso e va usato solo per diagnosi, in quanto tende a rallentare il sistema.
E' possibile modificare il livello di logging inviando al processo smbd i segnali SIGUSR1 per incrementarlo di uno e SIGUSR2 per diminuirlo di uno.
UTILITY SAMBA
Varie sono le utility di Samba per diagnosticare problemi.
testparm
serve per verificare la correttezza della sintassi del file di configurazione e per verificare se un dato host può collegarsi alla macchina Samba locale (sulla base delle access list di smb.conf, altri impedimenti dovuti a iptables o altro non sono contemplati): testparm hostname 10.0.0.150
, per esempio, elenca per tutte le condivisioni del proprio sistema, se l'host 10.0.0.150 ha diritto di accesso.
smbclient
è comodo per enumerare le condivisioni di un server e capire come e cosa esporta. smbclient -L 10.0.0.150
enumera tutte le condivisioni di 10.0.0.150. Viene chiesta una password, dare invio per fare un accesso anonimo o specificare -U utente
(e poi relativa password) per accedere con specifiche credenziali.
nmblookup
si usa per ottenere i nomi NetBIOS e i relativi IP degli Host in rete, tramite broadcast o query diretta, nmblookup -d 3 '*'
, per esempio, individua, nella propria rete (dominio di broadcast), gli host che rispondono ad una query nmb.
UTILITY UNIX
La diagnosi di problemi con Samba coinvolge anche problematiche di rete: server e client devono poter comunicare via IP e avere accesso alle porte netbios-ns 137/udp, netbios-dgm 138/udp, netbios-ssn 139/tcp e microsoft-ds 445/tcp (usata da CIFS, se non è raggiungibile si usa la 139) non ci devono quindi essere firewall o altri impedimenti che impediscano lo scambio di dati.
La diagnosi inoltre coinvolge l'effettiva esistenza di un server in ascolto sulla porta 139 o 445 e l'eventuale sniffing dei pacchetti in transito. Comandi utili per queste attività sono:
ping
Comando tipico per testare la connettività di rete IP fra due host, in ogni caso da affiancare a un test diretto tipo telnet 10.0.0.150 139
per verificare se alla porta 139 del server indicato risponde qualcosa.
Su un server Samba, per verificare che il servizio sia partito e sia in ascolto e disponibile in rete, digitare netstat -natp
e cercare righe tipo tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 4608/smbd che indicano che il processo smbd è in ascolto (LISTEN) sulla porta 139 su tutti gli indirizzi (0.0.0.0, basterebbe anche l'indirizzo dell'interfaccie di rete).
Verificare inoltre che non si siano firewall esterni o interni che impediscano l'accesso alla prota 139 tcp (con iptables -L -n
si visualizzano le regole di firewalling sul proprio Linux).
Se il client può accedere via rete al server e su questo è in esecuzione il processo che gestisce SMB, eventuali problemi possono essere dovuti al protocollo SMB/CIFS stesso (autenticazione, ecc), per cui possono essere utilizzati i comandi Samba sopra indicati o si può provare a diagnosticare cosa accade sniffando direttamente i pacchetti con strumenti come tcpdump
(analizza solo le intestazioni dei pacchetti) o ethereal
(visualizza e analizza tutto il contenuto di un pacchetto).
A livello applicativo, sul server Samba, può servire utilizzare strumenti come ps -adef
per verificare che i processi smbd e nmbd siano in esecuzione, strace -p #PID
per analizzare a basso livello le chiamate di sistema del processo di cui si è indicato il PID, lsof
per visualizzare i file aperti dai processi in esecuzione.