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