Link Guida - Filippo Rigotto – 8Labs
Transcript
Link Guida - Filippo Rigotto – 8Labs
Raspberry Pi as a little NAS Configurare un Raspberry Pi come file server remoto di Filippo Rigotto Indice i Introduzione 1 Materiale necessario 2 Raspberry Pi 3 Sistema operativo 4 Configurazione sistema 5 Utenti e gruppi del sistema 6 Permessi dei file 7 Dischi esterni - Condivisione 8 Direttive ed esempio per il file di configurazione 9 Controllo in LAN a Link, Disclaimer e Licenza Introduzione Questa guida è una riduzione e un adattamento della guida per trasformare il Raspberry Pi in un Torrent Box, reperibile nel sito dell’autore: si è posta più attenzione alla configurazione del servizio Samba e dei drive fisici connessi, eliminando le parti non necessarie e aggiungendone altre. La guida si pone come obiettivo la configurazione di un semplice NAS, o Network Attached Storage: un PC usato come server, che condivide il contenuto di uno o più dischi fisici con gli altri dispositivi connessi alla stessa rete locale, destinato a rimanere costantemente acceso. La guida si distingue per l’economicità dell’hardware scelto, in termini di costo del prodotto e dell’energia elettrica consumata, sacrificando alcuni aspetti che molti riterrebbero fondamentali per siffatta macchina: il risultato infatti è un semplice “raccoglitore di file in rete”, non supporta configurazioni di tipo RAID e (volutamente) non è accessibile dall’esterno della rete locale, la velocità di trasferimento è limitata dagli standard USB 2.0 e Fast Ethernet (100M) ed è abbastanza bassa rispetto ai valori teorici raggiungibili: è consigliato come un server di file storage con pochi trasferimenti tra dispositivi, la velocità in streaming audio e video è comunque buona. Questa guida non necessita di prerequisiti per essere compresa, se non un minimo di dimestichezza con le impostazioni del router di casa, la terminologia tecnica e un po’ di conoscenza del terminale Linux, si presta per una facile comprensione anche da parte dei neofiti. In Courier New sono descritti comandi di terminale oppure nomi importanti o il contenuto di file di testo, per la rapida distinzione dalla parte discorsiva. Talvolta a lato delle righe del testo da scrivere nei file sono presenti commenti, da NON scrivere. In certi punti sono esposti più modi di procedere o informazioni aggiuntive, denotati da ⓘ. Materiale necessario • Un Raspberry Pi model B/B+ • Un alimentatore 5V con porta micro usb (non meno di 1A, 2A o più per i dischi) • Una scheda SD* o MicroSD** minimo 4GB e Classe 10 • Un cavo ethernet per collegamento al router Opzionali: • Fino a 2* o 4** dischi esterni con porta usb 1 Temporanei: • Cavo HDMI • Schermo • Tastiera e mouse * In caso di model B ** In caso di model B+ Raspberry Pi Un computer embedded su singola scheda pcb dotato di CPU ARMv6, 512MB di memoria RAM, porta GPIO, porte HDMI e Composito, jack audio, 2 o 4 porte USB e una porta LAN Fast Ethernet. Il sistema operativo e la memoria di massa risiedono sulla scheda SD, è alimentato da un comune carica batterie per smartphone. Costa intorno ai 35€, ed è facilmente reperibile online. È una buona scheda multifunzione adatta ai maker e a chi cerca una soluzione economica per server domestici, e molto valida per l’educazione all’informatica, scopo principale per cui è stata ideata (la fondazione Raspberry è infatti registrata come educational charity foundation). Sistema Operativo Raspbian, il sistema operativo derivato da Debian (Linux), va scaricato dal sito internet della fondazione, e poi, in ambiente Windows, va scritto sulla SD col il tool Win32DiskImager, reperibile gratuitamente qui. Una volta inserita la scheda nel lettore e aperto il tool, selezionare il file IMG del sistema e la lettera dei drive corrispondente alla scheda, cliccare su Write. Configurazione sistema Una volta pronta la SD, inserirla nel Raspberry Pi, collegare i cavi e per ultima l’alimentazione. Il computer si accenderà e ci si troverà nel programma di configurazione, da qui poi: • Espandere il File System (così che occupi tutta la SD) • Configurare lingua e layout tastiera (generare i locale) • Abilitare SSH (risulterà importante in seguito) • Overclock del processore in modo Fast (nessuna controindicazione) • Scegliere avvio con interfaccia grafica (importante per la configurazione iniziale) NB: prendere nota dell’indirizzo MAC del computer e riservargli uno specifico indirizzo IP privato (dalla vostra schermata di configurazione del router, accessibile tipicamente digitando 192.168.1.1 oppure 10.0.0.1 nel browser e cercando poi la sezione dhcp reservation o sigle simili); un IP (locale) fisso sarà importante per molte cose nei prossimi paragrafi. Eventualmente riavviare il sistema perché le modifiche siano effettive (e l’indirizzo IP diventi quello scelto). ⓘ l’account predefinito è pi (password raspberry), root non ha password di default. È sempre buona norma aggiornare il sistema: questo si fa da terminale (usare LXTerminal), digitare in ordine (potrebbe essere necessario del tempo per il download degli update): sudo apt-get update sudo apt-get dist-upgrade IMPORTANTE! Per spegnere il Raspberry Pi NON togliere subito l’alimentazione, impartire prima il comando sudo shutdown –h now da terminale oppure usare l’icona Spegni sul desktop. Interrompere l’alimentazione senza aver spento il computer potrebbe comportare la corruzione del file system della scheda SD e poi si dovrà riscrivere l’intero sistema operativo. 2 Utenti e gruppi del sistema Saranno qui ora illustrati vari comandi per l’aggiunta e la rimozione di utenti e gruppi nel sistema, poiché sono una delle parti principali nella configurazione del servizio di condivisione file in rete. Gli utenti si creano in un terminale con sudo useradd –m –g gruppo utente, in questo modo possiedono già la loro cartella /home/utente (con –m) e sono già aggiunti in gruppo (con –g). Per aggiungere l’utente a ulteriori gruppi usare anche –G seguito da una lista di nomi di gruppo, oppure usare sudo usermod –aG listaGruppi. La password per un utente si definisce con sudo passwd utente e si immette due volte, senza che si possa vedere per motivi di sicurezza. Per eliminare un utente usare sudo userdel –r utente (anche la home viene cancellata con –r). I gruppi si creano con il comando sudo groupadd nome e si cancellano con sudo groupdel nome e uno dei gruppi predefiniti in cui si possono aggiungere utenti è users. Permessi dei file I file nei sistemi Linux (o meglio Unix-like) hanno permessi leggermente differenti da quelli presenti in Windows: sono illustrati qui perché necessari nei capitoli successivi. Ogni file e directory in Linux possiede tre permessi di accesso (lettura, scrittura ed esecuzione) che vanno definiti per tre differenti categorie: il proprietario, il gruppo a cui appartiene, gli altri utenti. Sono presenti comandi da terminale per modificare il proprietario (chown) e il gruppo (chgrp), da eseguire come amministratore del sistema (anteporre eventualmente sudo ai comandi). La sintassi è chown utente nomeFile, oppure utente:gruppo per assegnare anche il gruppo; per il solo gruppo la sintassi è chgrp gruppo nomeFile; il comando chmod permette di modificare i permessi per tutte le tre categorie. Aggiungere –R come parametro nei comandi per applicare ricorsivamente i permessi definiti per tutti i file e le sottocartelle contenute in una cartella. I permessi di accesso possono essere definiti con questi comandi in vari modi: ottale numerico, ottale con caratteri o mediante operatori. Qui sarà usato solo il primo modo, con trascritto il secondo, essendo questo analogo ma usando lettere al posto di numeri. Con 3 diversi tipi di accesso, ognuno “presente” o meno, si generano 23 = 8 diverse combinazioni: si usano tre cifre binarie indicanti lettura (Read), scrittura (Write) ed esecuzione (eXecute). # 0 1 2 3 4 5 6 7 Bit Lettere Significato 000 --Nessun permesso 001 --x Solo Esecuzione 010 -wSolo Scrittura 011 -wx Scrittura e Esecuzione 100 r-Solo Lettura 101 r-x Lettura e Esecuzione 110 rwLettura e Scrittura 111 rwx Tutti i permessi Per il comando chmod si usano quindi tre numeri tra 0 e 7 rappresentanti i permessi; in termini matematici si ha una sequenza di tre cifre in base ottale/8, da cui deriva il nome del modo: ad esempio sudo chmod 777 file imposta tutti i permessi per tutti i possibili utenti per file, mentre sudo chmod 640 file imposta per file i seguenti permessi: di lettura e scrittura per il suo proprietario, di sola lettura per il gruppo a cui appartiene e nessuno per tutti gli altri utenti. 3 Per vedere i permessi di un file o di una cartella da terminale avvalersi del comando ls –l, dopo essersi spostati sulla cartella di appartenenza o di un livello sopra. ⓘ NB: si può veder usare anche una cifra binaria aggiuntiva davanti al gruppo di tre, riguardante permessi speciali, normalmente qui posta e sempre considerata uguale a 0 (quindi non scritta). Dischi esterni - Condivisione Si può usare lo spazio rimanente nella scheda SD come spazio per i file che sia in rete, ma conviene avere uno o più dischi esterni connessi via usb al Raspberry Pi: se sono dischi da 2.5” non necessiteranno di alimentazione, altrimenti (3.5”) bisogna usare l’alimentatore fornito insieme. Per garantire che i percorsi delle cartelle dei dischi connessi rimangano invariati bisogna creare nel sistema una cartella per ogni disco e poi qui montarne il contenuto, secondo la procedura standard dei sistemi Linux. NB: in caso i dischi siano partizionati in NTFS bisogna installare: sudo apt-get install ntfs-3g. In caso siano partizionati in HFS invece installare: sudo apt-get install hfsplus hfsutils. Questo perché di default i dischi in NTFS sono in sola lettura, e i dischi in HFS non sono supportati. Di seguito la procedura per un disco, iterabile per analogia con gli eventuali altri: mkdir /media/disco Crea la cartella dove risiederà il contenuto sudo fdisk -l Leggere il nome di sistema del disco: di solito /dev/sdaX sudo mount –t auto /dev/sdXX /media/disco Per montare il contenuto Il “link” così creato non è permanente e viene perso al riavvio, bisognerà quindi agire sul file dedicato per permettere il mount automatico nella specifica posizione all’avvio: da terminale sudo nano /etc/fstab Aggiungere alla fine del file (per ogni disco connesso): /dev/sdaX /media/disco auto noatime 0 0 Ctrl+X per uscire dall’editor, S (o Y) per salvare, Invio per confermare. Sistemati i dischi e le cartelle, le condivisioni (o shares) in rete si ottengono installando Samba mediante terminale: sudo apt-get install samba samba-common-bin. Samba va poi configurato tramite il file smb.conf, che ha sintassi simile ai file INI di Windows. Questo possiede varie sezioni, definite tra coppie di parentesi quadre, le cui principali sono global, contenente le impostazioni principali, homes che condivide le cartelle home degli utenti del sistema e una sezione per ogni cartella/percorso condiviso in rete (tra le parentesi il nome visibile). Il resto del file è costituito da un insieme di coppie opzioni = valori e i valori possono avere vari tipi i cui principali sono booleano (yes oppure no), intero, stringa di caratteri, lista di valori separati da spazi o virgole o punti e virgola, enumerazioni di vari valori fissati. Per i gruppi di utenti anteporre un + o un @ al nome. Per interrompere una linea usare \ e andare a capo. Opzioni e valori sono case-insensitive quindi la distinzione tra caratteri maiuscoli e minuscoli non importa. I commenti iniziano con # e non sono considerati da Samba al momento della lettura del file, è comunque un errore scrivere commenti nella stessa linea dove si sono definite delle opzioni. Per configurare il servizio aprire il file mediante sudo nano /etc/samba/smb.conf e dopo aver effettuato le modifiche digitare Ctrl+X per uscire, poi Y o S per salvare e Invio per confermare. 4 Direttive generali per la sezione [global] (alcune, altre nell’esempio) Parametro Valore Descrizione netbios name, realm workgroup server string security encrypt passwords passdb backend unix password sync name resolve order stringa stringa stringa da lista bool bool bool lista Nome del server Samba in rete Gruppo di appartenenza del pc Descrizione per il server Tipo di sicurezza, qui solo user Password encryption Password database di sistema Sincronizza le password col sist In che ordine risolvere gli ip Default Nome del pc WORKGROUP Versione samba user yes tdbsam yes vedi esempio Direttive per le cartelle condivise Parametro Valore Descrizione path comment volume read only writable hide files browseable stringa stringa stringa bool bool lista bool Default Directory da condividere col servizio Il commento che appare con la cartella Il nome MS-DOS della cartella Cartella a sola lettura Inverso di read only, cartella scrivibile Estensioni dei file da non mostrare separati da / Cartella navigabile o meno /tmp Nessuno Nessuno yes no Nessuno yes Impostando security = user (che è la scelta più adottata e consigliata) Samba richiede che ogni suo utente sia anche registrato come utente del pc, e che abbia una password per il servizio, oltre che per il sistema operativo: dopo aver definito uno o più utenti come precedentemente descritto occorre quindi definire la password propria del servizio mediante il comando smbpassword con sudo smbpassword –a utente. Tale comando ha anche altri parametri utili alla configurazione degli account con cui usare samba, descritti nella seguente tabella: Argomento Descrizione -a -c -d -e -h -n -x Aggiunge un account utente Specifica un diverso file di configurazione Disabilita l’account Abilita l’account Scrive l’uso del comando (guida sintassi) Imposta password nulla per l’utente Elimina l’utente nome smb.conf nome nome nome nome Per accedere alla cartelle condivise quindi bisognerà usare sempre username e password, a meno di non usare un account ospite (guest) correttamente definito: questi altro non è che un utente normale che abbia password vuota (dare solo invio quando si usa sudo passwd utenteOspite). Dopo averlo definito occorre impostare correttamente il servizio con le seguenti direttive: Parametro Valore Descrizione Default Sezione guest account guest ok guest only map to guest utente bool bool lista Account da ritenersi di tipo guest Guest può accedere alla cartella? Accesso solo all’account ospite Risolvere un’autenticazione fallita nobody no no never global cartelle global cartelle Valori interessanti di map to guest Valore Descrizione never bad password bad user Risposta con errore nella procedura di login Password sbagliata: usare l’account guest se permesso Username sconosciuto: usare l’account guest se permesso 5 Le ultime parti importanti che restano da analizzare sono la possibilità definire i permessi di default di una cartella e di poterne definire (o negare) per specifici utenti della stessa: sono presenti due gruppi di direttive per queste funzioni. Direttive per i permessi Parametro create mask create directory mask force create mode force directory mode force group force user inherit owner inherit permissions Valore Descrizione Default Bit Mask Bit Mask Bit Mask Bit Mask Gruppo Utente Bool Bool Permessi creazione file Permessi creazione cartella Permessi forzati creazione file Permessi forzati creazione cartella Gruppo principale forzato Account utente forzato Contenuto eredita stesso proprietario? Contenuto eredita stessi permessi? 0744 0755 0000 0000 Nessuno Nessuno no no Direttive per le autorizzazioni degli utenti delle cartelle Parametro Valore Descrizione admin users invalid users max connections read list valid users write list Lista utenti Lista utenti Intero Lista utenti Lista utenti Lista utenti Utenti con Utenti che Max numero Utenti con Utenti che Utenti con pieni diritti sulla cartella non possono accedere di connessioni, 0 non limitato soli permessi di lettura possono accedere alla cartella soli permessi di scrittura Esempio di file smb.conf [global] netbios name = ServerProva realm = ServerProva workgroup = WORKGROUP server string = Prova di Samba dns proxy = no name resolve order = lmhosts host wins bcast security = user encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u pam password change = yes guest account = smbguest map to guest = bad user [homes] browseable = no [Cartella] comment = Prima cartella path = /media/disco valid users = +users #utenti di users validi force group = users #e solo quelli sono validi create mask = 0660 #lettura e scrittura per proprietario e gruppo directory mask = 0771 #altri utenti solo esecuzione read list = +guest #gli ospiti leggono soltanto read only = no guest ok = no 6 Default Vuoto Vuoto 0 Vuoto Vuoto Vuoto [Cartella Pubblica Guest] comment = Cartella degli ospiti path = /media/disco read only = no guest only = yes #solo ospiti qui max connections = 5 #con basso numero di connessioni ⓘ Samba crea già un file commentato da modificare; inoltre un altro esempio è disponibile qui. NB: Riavviare il servizio con sudo /etc/init.d/samba restart per applicare le modifiche. una via più diretta quando si usa samba solo in rete locale e si prevede di usare un solo utente è usare pi, dato che è già presente e funzionante (per diminuire la confusione): basta quindi solo definire la password di pi per il servizio con sudo smbpasswd –a pi (e immetterne una, anche quella di default). ⓘ Prova di funzionamento: da un PC Windows (nello stesso workgroup) aprire Risorse di Rete e cercare il Raspberry Pi, selezionare una delle cartelle prima condivise con samba e usare come credenziali utente e password di un utente valido o precedentemente configurato. Controllo in LAN Il prossimo passo è installare o usare servizi che permettano il comando del Raspberry Pi in rete locale, senza avere bisogno di mouse, tastiera e schermo sempre collegati: di fatto dopo questa parte si potranno staccare e lavorare esclusivamente in remoto da un altro pc. Il protocollo SSH (abilitato già dai primi capitoli) consente di accedere a una schermata di terminale del Raspberry da qualsiasi pc nella LAN: a tal scopo usare Putty, una piccola utility senza setup configurabile per l’accesso remoto via SSH: è scaricabile da qui selezionando la versione per Intel x86, in seguito aprire e impostare come parametri: l’IP del Raspberry, un utente (pi) e aprire la connessione: sarà chiesta la password corrispondente (raspberry) e poi si potranno impartire comandi di terminale. Più interessante è invece avere il video in remoto, per questo si usa il servizio VNC (che funziona su X Window System, gestore grafico standard in sistemi Unix-like). Il servizio si compone di un server (installato sulla macchina da comandare) e un client (o viewer, installato sulla macchina remota che comanda), per cui l’installazione avviene su due sistemi differenti. Il software TightVNC è gratuito e multipiattaforma, si scarica qui e contiene nello stesso pacchetto sia server che client (di questo setup si userà più avanti il modo client). Sul Raspberry, che opererà in modo server invece, il setup è più elaborato: da terminale sudo apt-get install tightvncserver per installare il pacchetto, poi tightvncserver per configurare: bisogna definire una password per l’accesso e una opzionale per sola lettura. Il servizio si può ora avviare con: vncserver :0 –geometry 1920x1080 –depth 24 0 è il numero del display, geometry è la risoluzione. Se i caratteri sono della dimensione sbagliata, aggiungere –dpi 96 a fine riga. Automatizzare il tutto avviando il servizio di video remoto al boot, mediante un cron job: export EDITOR=nano && sudo crontab –e per aprire il file, poi aggiungere alla fine @reboot /usr/bin/vncserver :0 –geometry 1920x1080 –depth 24 (-dpi 96). Chiudere con Ctrl+X, Y/S, Invio. 7 Prova di funzionamento: da un pc remoto aprire il client installato prima, scrivere l’indirizzo IP del Raspberry Pi in Remote Host e quando richiesto inserire la password scelta al momento della configurazione del server. Siti e link ai programmi Raspberry Pi: www.raspberrypi.org Win32DiskImager: www.sourceforge.net/projects/win32diskimager Samba: www.samba.org Putty: www.chiark.greenend.org.uk/~sgtatham/putty TightVNC: www.tightvnc.com Sito Web autore: www.rigottofilippo.altervista.org Contatto autore: www.rigottofilippo.altervista.org/contatti Disclaimer e Licenza Questa guida è a solo scopo riassuntivo e illustrativo, i programmi usati sono tutti coperti da licenze GPL, BSD, Open Source o Freeware. Questa guida è fornita così com’è: è permesso distribuirla, citarla e stamparla; non è permesso modificarla, a tal proposito contattatemi e le proposte di modifica saranno valutate e tenute in considerazione. Versione 1.1 / 20.02.2015 ©2015 Rigotto Filippo 8