[WORKLOG] - Installazione e configurazione di un serverino domestico / small office

Pagina 1 di 2 1 2 ultimo
Visualizzazione dei risultati da 1 a 10 su 44

Hybrid View

Messaggio precedente Messaggio precedente   Prossimo messaggio Prossimo messaggio
  1. #1
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito [WORKLOG] - Installazione e configurazione di un serverino domestico / small office

    Ho deciso di realizzare una macchina basata su linux per realizzare un router/firewall per la mia rete locale. La macchina dovrà operare inizialmente solo come router, firewall, server DHCP e DNS per la mia rete locale ma prevedo in un prossimo futuro di aggiungere un client bittorrent, emule, ed un server di posta in grado di gestire domini virtuali.

    Quella che segue non vuole essere una "guida" perchè non sono affatto un guru di Linux e quasi tutto quello che segue è stato ottenuto leggendo e rielaborando delle guide esistenti, con solo un minimo di adattamento e trouble-shooting da parte mia: ho cercato di realizzare un "worklog" che fosse però il più possibile preciso e dettagliato, in modo che la configurazione che ho realizzato sia pienamente replicabile da chiunque fosse eventualmente interessato ad implementare una configurazione simile.
    Ho cercato, per quanto possibile, di motivare le scelte che ho fatto in fase di installazione e configurazione, commentando le configurazioni che ho dovuto fare. Tali configurazioni non sono necessariamente la scelta migliore in assoluto o l'unica che si può fare ma rappresentano, a seguito di un breve periodo di testing e trouble-shooting, la scelta migliore per le mie esigenze personali.
    Ovviamente critiche costruttive e suggerimenti motivati non solo sono bene accetti ma sono incoraggiati.

    Ne approfitto per ringraziare pubblicamente gli autori delle varie guide che ho seguito che, anche se non esplicitamente elencate, sono comunque linkate direttamente nelle sezioni interessate da ciascuna guida.

    1_ Configurazione hardware.

    2_ Installazione e configurazione del sistema di base:
    3_ Configurazione della rete e dei servizi di rete:
    4_ Installazione, configurazione e verifica del server DHCP

    5_ Installazione e configurazione del server DNS e di rndc:

    6_ Integrazione dei servizi DHCP e DNS: DDNS

    7_ Riassunto e conclusioni.



    Ho rinominato il thread e riprendo la discussione, con l'intenzione di aggiungere qualche "modulo" che può essere utile.

    8_ Share di rete Windows. Configurazione iniziale di samba.

    9_ Client bittorrent.

    10_ Server FTP con vsftpd.

    11_ Inserimento di un AP nella rete, gestione di reti multiple e separazione tra reti "trusted" e "untrusted".

    12_ Rotazione dei log di sistema..

    13_ Conversione p2v. Dismissione del server per migrazione su CentOS.
    Ultima modifica di frakka : 08-08-2013 a 00:39

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  2. #2
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 1_ Configurazione hardware.

    Hardware:
    Case: JETWAY JC-110-B (Mini ITX)
    M/b: SUPER MICRO X7SPA-H
    Ram: 2x2Gb SoDIMM DDR2
    sda: OCZ "Onyx" Solid State Drive SSD 32GB 2.5" SATA2
    sdb: WD GP 750Gb



    La scelta dei componenti è stata fatta sulla base delle seguenti considerazioni (in ordine sparso...):
    - Contenere il più possibile la spesa finale;
    - Necessità di montare all'interno del case almeno 2 hdd, per configurare un RAID1;
    - Utilizzo finale della macchina come anche come firewall oltre che DNS/DHCP server per la rete locale, quindi raccomandabile utilizzare almeno due schede di rete;
    - Il sistema deve rimanere in funzione 24 ore al giorno quindi necessità di consumi ridotti ed elevata stabilità ma non di una potenza esagerata.

    Il case della JetWay è l'unico case mini ITX che ho trovato, al sotto la soglia dei 100€, che potesse essere comodamente montato a parete e che potesse alloggiare almeno due hdd, di cui uno da 3,5". Per la verità ne potrebbe montare fino a 3 (2x2,5" + 1x3,5") rinunciando all'unità ottica (che comunque non mi serve). Quindi, anche se è un case "vecchio" (è fornito con una riser PCI a corredo ed un adattatore per le unità ottiche slim PATA) è stato la mia scelta.


    La m/b SuperMicro X7SPA-H è un prodotto equipaggiato con processore ATOM D510 (dual-core HT) e che è classificata come "Value Server Platform", un prodotto quindi pensato proprio per l'utilizzo server entry-level come dimostra la presenza del controller ICH9 in versione RAID, 6 porte SATA2 con supporto al RAID0,1,5 e 10 (anche se ho scelto di non utilizzare questa funzione), la presenza di 2 Intel 82574L Gigabit LAN, la presenza di un connettore USB tipo A sul pcb della mainboard in aggiunta alle normali porte USB e la completa assenza di una scheda audio integrata.

    La mobo supporta ovviamente solo fino a 4Gb di RAM DDR2 ma per il mio utilizzo sono più che sufficienti. Purtroppo la VGA integrata è la Intel GMA3150 che gode di supporto ufficiale su Linux solo da una versione del server video piuttosto recente che richiede una versione di kernel molto recente (2.6.37 mi pare ma sembra funzionare bene anche con versioni dalla 2.6.32 e successive). Se questo non è un problema con una qualunque distribuzione desktop, può diventarlo per l'utilizzo con distribuzione più "server oriented".

    La scelta di accoppiare in RAID1 un disco SSD ed un disco meccanico è probabilmente discutibile ma avevo già il disco WD in casa inutilizzato, mi serviva spazio di archiviazione in quanto il server sarà in futuro utilizzato anche come server di posta e per bittorrent, amule e come appoggio per file di grandi dimensioni di poca importanza, la cui perdita non sarebbe un dramma. Un RAID1 di SSD non mi avrebbe fornito lo spazio necessario ad un costo accessibile, un RAID1 di dischi meccanici da 3,5" sarebbe stato problematico da inserire in un case mini-ITX e un RAID1 di dischi meccanici da 2,5" mi avrebbe obbligato a comprarli entrambi. La configurazione è tecnicamente fattibile quindi ho deciso di provare... Ho scelto la SSD cercando un prodotto decente, che costasse poco e di taglio sufficiente a contenere il sistema operativo, gli archivi del server di posta e nient'altro.

    Ho utilizzato il raid software di linux per creare due device RAID1, il primo da 512mb montato in /boot e l'altro della capacità rimanente sul disco SSD per /. La partizione di swap è stata creata solo sul disco meccanico, così come una partizione dati che sarà utilizzata come deposito per il fileserver.

    I primi test di installazione:

    Ho cercato di recuperare il masterizzatore DVD del defunto nb di mia sorella, sfruttando l'adattatore PATA fornito in bundle con il case. Ovviamente la mobo non ha un connettore PATA quindi ho provato ad utilizzare un adattatore SATA -> PATA inutilizzato e fornito in bundle con una vecchia mainboard ABIT nForce2. Sapevo che questo adattatore doveva funzionare solo per le unità disco ma il lettore veniva correttamente riconosciuto dal bios. Peccato che dopo l'avvio della procedura di installazione l'installer non fosse più in grado di individuare l'unità cdrom...
    Peccato, ma forse è meglio: Per l'utilizzo che ne devo fare il cdrom mi servirà solo durante l'installazione. Lascio il sistema senza unità ottica e decomprimo la iso di debian su una pendrive USB, secondo quanto indicato nella guida ufficiale di debian. Personalmente, avendo già scaricato la iso, ho usato il metodo "4.3.1. Preparazione di una chiavetta USB con un'immagini ibride di CD o DVD".

    Il mio giocattolino assemblato:

    La seconda unità da 2,5" potrebbe essere installata nel tray per l'unità ottica, sfruttando i fori che si vedono sulla lamiera. Rimane anche disponibile un connettore di alimentazione SATA, per ogni evenienza.


    Dopo qualche tempo, è emerso un problema piuttosto antipatico: Se il sistema fà uno spegnimento scorretto (ad esempio, a seguito di una interruzione di corrente) al riavvio la scheda madre non rileva il disco SSD OCZ e, di conseguenza, l'array raid risulta degradato. E' necessario rispegnere correttamente il sistema, scollegare l'alimentatore esterno e attendere qualche decina di secondi. Ricollegando l'alimentazione e riaccendendo il server il disco SSD viene nuovamente rilevato ed è possibile procedere al rebuild dell'array raid.
    Ultima modifica di frakka : 24-08-2011 a 20:48

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  3. #3
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 2.1_ Scelta del sistema operativo e installazione del sistema di base.

    La scelta del sistema operativo è stata più ardua del previsto:

    Per quello che voglio fare esistono diverse distribuzione già preconfezionate, tra cui l'eccellente ClearOS, una distro destinata alle small-business che può agire da server SMTP e IMAP/POP3 (con già configurati una serie di plugin e componenti accessori come filtro antispam, antivirus,...), webmail, connettore POP3, firewall, DNS, DHCP, MySQL server, Apache, SMB, LDAP...
    La distro è basata su CentOS ed è completamente free. E' davvero molto ben fatta ma la parte di mail server non è configurata per l'uso di domini virtuali e modificare la configurazione a manina (oltre a non essere semplicissimo) avrebbe potuto rendere inutilizzabile parte dell'interfaccia web della distro, rischiando alla fine della fiera di richiedere più sbattimento di quello richiesto per ripartire da zero... E ho davvero troppo poco tempo a disposizione per perderci tempo. Ho scelto quindi di partire da zero, installando una normale distribuzione e configurando pezzo per pezzo tutto quello che mi serve.

    La scelta del sistema è caduta su Debian principalmente per il fatto che questa distribuzione supporta praticamente tutte le architetture hardware esistenti quindi la configurazione dovrebbe essere replicabile, con gli opportuni adattamenti, anche a sistemi con piattaforma ARM...

    Installazione del sistema. Niente di particolare...


    Avvio del sistema da pendrive USB, selezionata l'installazione testuale e localizzato il sistema in inglese, selezionado il layout di tastiera It. Secondo me hanno fatto un pò una porcheria con la nuova versione dell'installer... Il fatto che selezioni la localizzazione con combinazioni fisse non modificabili è un pò stupido... Almeno Ubuntu permette di impostare anche un "locale" diverso dal quello corrisponente a lingua e tastiera. Io ho selezionato la localizzazione in inglese, visto che avendo selezionato la lingua inglese "US" ed il layout di tastiera "it" non è possibile specificare il locale "IT"... Selezionata la scheda di rete da utilizzare come "default" e la configurazione base di rete (impostato il nome host e del dominio del server. Ho usato un dominio ".lan"). Impostazione della password di root e configurazione dell'account utente (Nome completo e password).


    Partizionamento dei dischi:

    Personalmente preferisco sempre procedere in manuale, quindi selezionando l'ultima voce. Gli screen si riferiscono ad una virtual machine, quindi le informazioni visualizzate relativamente ai due hdd sono ovviamente riferite ad un disco virtuale ma il procedimento è lo stesso.
    Su entrambi i dischi ho creato una partizione primaria da 512Mb ed un'altra di dimensioni pari allo spazio rimanente sulla SSD (33,8Gb) e selezionato di utilizzarle come partizioni per il RAID software. Lo spazio in eccesso sul disco da 750Gb è stato partizionato sempre con partizioni primarie (il limite su uno stesso disco MBR è di 4 quindi ci rientro, una da 4gb da dedicare allo swap ed un'altra a cui ho assegnato il mount point /download.

    A questo punto posso configurare i dispositivi RAID software, indicando al sistema il tipo di RAID (1) il numero di hotspare (nessuno) e le partizioni da assegnare ai singoli device (a /dev/md0 sda1-sdb1 ed a /dev/md1 sdb1 ed sdb2).

    Concludo il partizionamento specificando di utilizzare /dev/md0 ed /dev/md1 rispettivamente come /boot e /, usando il filesystem ext4 senza particolari opzioni. Per la partizione /download ho utilizzato invece xfs.

    Ci sarebbero delle opzioni utilizzabili con ext4 per ridurre le operazioni di scrittura su disco e salvaguardare la vita della SSD, ma eventualmente possiamo specificarle anche in un secondo momento nel file /etc/fstab. A questo punto confermo e l'installer avvia l'installazione del sistema di base.
    Ultima modifica di frakka : 22-08-2011 a 13:05

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  4. #4
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 2.2_ Completamente installazione del sistema ed installazione bootloader.

    Il parco software di Debian è mostruoso (4 DVD e rotti) e non serve scaricarsi tutto per installare il sistema. Ho utilizzato solo il primo DVD decompresso su una pendrive USB da 4Gb (che contiene il sistema di base e parte del repository), poi l'installazione propone di connettersi ad un repository online per scaricare quello che eventualmente manca e gli aggiornamenti disponibili. Propone poi un set di "gruppi di software" che possono essere installati. In questa fase, oltre alla "Standard system utility" sarebbe sufficiente installare il "server ssh". Però sono pigro... Visto che ci sono, inserisco dall'elenco anche il server DNS, il file server (con samba) ed il modulo webserver. Per ora preferisco escludere i componenti del mail server, tanto ci penserà iRedMail e installarsi quello che gli serve. In questa fase è necessario inserire solo il nome del Workgroup da utilizzare per la configurazione di Samba. Ho utilizzato lo stesso indicato per il dominio della rete locale, così come utilizzerò lo stesso nome per la zona del DNS.



    Per chiudere l'installazione debian propone l'ìnstallazione del bootloader grub nel MBR. Seguendo le operazioni che il sistema esegue mi accorgo che, contrariamente ad ubuntu, il bootloader viene installato solo in /dev/sda... Significa che se il disco /dev/sda dovesse abbandonarmi al reboot il sistema (pur conservando presumibilmente integri i dati del disco /dev/sdb) non sarebbe in grado di bootare ed avviarsi... E non è quello che voglio.
    Poco male, rimediamo dopo.


    Al riavvio mi trovo il mio sistemino bello che pronto e posso iniziare la configurazione. Come prima cosa sistemo il bootloader: Faccio login come root e lancio il comando
    codice:
    grub-install /dev/sdb
    per installare il bootloader anche nel MBR del disco sdb. Se tutto va a buon fine il sistema risponde che non si sono verificati errori quindi il nostro sistema dovrebbe essere in grado di avviarsi anche uno dei dischi va in fail.
    Ultima modifica di frakka : 22-08-2011 a 13:06

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  5. #5
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 2.3_ Verifica e gestione del raid software con mdadm

    Per gestire il raid e verificare lo stato degli array è disponibile il tool mdadm: Il comando
    codice:
    mdadm -D /dev/md0
    ci mostra molte informazioni sullo stato del device ma deve essere lanciato per ogni device. Per monitorare velocemente lo stato di tutti gli array si può usare il comando
    codice:
    cat /proc/mdstat


    Per verificare che tutto funzioni come previsto, c'è un solo modo: Rompere l'array.
    Spengo il sistema e provo a scollegare un disco, per verificare se il sistema si riavvia normalmente oppure se ci sono problemi con il bootloader. Proverò poi a ricollegare il disco e fare il rebuild dell'array.

    La maggior parte degli screen sono presi da una VM vmware, che si lamenta se manca il disco primario quindi ho dovuto spostare il disco sdb sul canale primario per avviarla ma il sunto non cambia: Nel sistema reale, è come se avessi scollegato la SSD e avviato il sistema con il solo disco da 750Gb collegato. Questo è anche il motivo per potrebbe esserci qualche discrepanze di IP tra la configurazione dichiarata e gli eventuali screen che sono stati inseriti. Il sistema parte, quindi l'installazione del bootloader sul disco secondario è effettivamente andata bene.
    Spengo di nuovo e rimetto al loro posto i dischi. Al riavvio successivo, mdadm rileva ancora gli array come degradati.


    L'array va infatti rimontato a mano. Devo quindi aggiungere manualmente le partizioni del disco che ho sostituito ai rispettivi device RAID. Con il comando
    codice:
    mdadm --manage --add /dev/md0 /dev/sda1
    e
    codice:
    mdadm --manage --add /dev/md1 /dev/sda2
    rimonto gli array.
    Il rebuild parte in automatico, come si può verificare con il solito
    codice:
    cat /proc/mdstat
    La stessa procedura deve essere eseguita, nel mio caso specifico, dopo uno spegnimento anomalo del sistema (ad esempio dopo una mancanza di corrente) per ricostruire l'array che si degrada per il mancato rilevamento del disco SSD.


    Nel caso di un guasto hardware il nuovo disco dovrà quindi essere ripartizionato prima di che le sue partizione possano essere utilizzate di nuovo per ricostruire l'array raid.
    Inoltre, se davvero si fosse trattato di un disco nuovo, sarebbe anche stato necessario reinstallare il bootloader sul disco sostituito, con lo stesso comando visto all'inizio del post per installare il bootloader in /dev/sdb (ovviamente adattato a /dev/sda in questo caso).

    Il RAID software di Linux presenta quindi qualche limitazione ma funziona piuttosto bene. Ad esempio non è consigliabile rimuovere a caldo i dischi: questo strumento non è concepito per questo. Se il sistema improvvisamente dovesse trovarsi un disco in meno vi garantisco che non la prenderebbe bene, ma dopo un bel reset o, preferibilmente, dopo aver rimosso il disco guasto, dovrebbe essere in grado di riavviarsi normalmente. E' possibile anche configurare il tool per inviare una mail in caso di anomalia o malfunzionamento dell'array ma come procedere lo vedremo dopo.

    mdadm è un tool potente e piuttosto complesso ma nella maggior parte dei casi si tratterà sempre di usare questi 3 comandi. Tempo di scrivere due righe ed il rebuild è terminato: il solito comando ce lo conferma:


    [NOTA:]
    Per riavviare il sistema è sufficiente, con i diritti di superuser (root oppure usando sudo), lanciare il comando:
    codice:
    reboot
    Per spegnere invece
    codice:
    poweroff
    Ultima modifica di frakka : 24-08-2011 a 20:51

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  6. #6
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 2.4_ Configurazione di apt

    Il tool standard (package manager) per l'installazione e l'aggiornamento del software su debian è "apt".

    Dopo il setup però il tool è configurato per utilizzare il disco di installazione come sorgente primaria per la ricerca e l'installazione di software. Per ovviare a questo problema devo modificare la configurazione di apt, rimuovendo il cdrom dall'elenco delle sorgenti.

    Una delle cose che più apprezzo di linux è la possibilità di modificare la configurazione di un file semplicemente modificando un file di testo: il tool che utilizzo solitamente è "nano" un editor di testo piuttosto semplice da usare e che mi permette di fare quello che mi serve. Ci sono editor più avanzati, come "vi", ma sono anche più complessi. Con nano io mi trovo bene.

    Prima di modificare un file di configurazione è sempre bene farne una copia di backup, in caso di errori. Per creare una copia di un file uso il comando "cp", la sintassi è banalissima (cp ).
    codice:
    cp /etc/apt/source.list /etc/apt/source.list.backup
    Ora per modificare l'elenco delle sorgenti di apt lancio il comando:
    codice:
    nano /etc/apt/source.list
    Per disattivare il cd rom è sufficiente mettere il carattere "#" davanti alla riga corrispondente. Il carattere "#" indica un commento e può essere utilizzato per disattivare una riga di istruzione in un file di configurazione o per inserire nella configurazione stessa delle note.
    Per salvare le modifiche apportate possiamo usare la combinazione di tasti "Ctrl+X" e confermare con "y". Se vogliamo uscire senza salvare "Ctrl+X" e "n" per annullare le modifiche.
    codice:
    # 
    # deb cdrom:[Debian GNU/Linux 6.0.1a _Squeeze_ - Official amd64 DVD Binary-1 20$
    
    deb http://ftp.it.debian.org/debian/ squeeze main
    deb-src http://ftp.it.debian.org/debian/ squeeze main
    
    deb http://security.debian.org/ squeeze/updates main contrib
    deb-src http://security.debian.org/ squeeze/updates main contrib
    
    # squeeze-updates, previously known as 'volatile'
    deb http://ftp.it.debian.org/debian/ squeeze-updates main contrib
    deb-src http://ftp.it.debian.org/debian/ squeeze-updates main contrib
    Se avessi commesso un errore e volessi ripristinare il file precedente, mi basta copiare il backup sul file originale, lanciando il primo comando invertito:
    codice:
    cp /etc/apt/source.list.backup /etc/apt/source.list
    Ora, lanciando il comando
    codice:
    apt-get update
    Debian si connette ai server configurati nel file per aggiornare la lista del software disponibile.
    Infine il comando
    codice:
    apt-get upgrade
    scarica ed installa le versioni più aggiornate del software già installato e le relative dipendenze.
    Ultima modifica di frakka : 04-02-2012 a 15:46

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  7. #7
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 8.1_ Configurazione iniziale di samba.

    La condivisione di files e risorse all'interno di una rete necessita che tutti i sistemi parlino un linguaggio che tutti coloro che devono usufruire delle risorse a disposizione siano in grado di capire. In particolare, se è necessario imporre delle restrizioni all'uso di determinate risorse, è necessario che tutti gli attori in gioco siano in grado di identificare i parametri che determinano tali restrizioni.

    Il linguaggio comune è il "protocollo" usato per inviare o rendere disponibili determinate informazioni. Il protocollo attualmente utilizzato per la condivisione di risorse come files e stampanti all'interno di una rete Windows è il protocollo SMB (server message block) di Microsoft, derivato da NetBios (sviluppato nel lontano 1984 da IBM).
    Perchè un sistema basato su Linux come il mio server sia in grado di accedere alle condivisioni di rete di un computer Windows oppure di offrire ad una rete Windows le proprie risorse è necessario quindi che anche il mio server parli il protocollo SMB.

    Samba è un software pensato per la condivisione di files e risorse all'interno di rete aziendali, che prevedono molti utenti e la necessità di gestirne le varie restrizioni. Con l'aiuto della guida di zmo, sempre dal forum debianizzati.org è possibile realizzare la configurazione anche complessa ma, in questo caso specifico, non ho stampanti da condividere, non voglio creare altri utenti sul server e la rete che disporrà delle risorse è la mia rete locale di casa.
    WebMin dispone di un modulo di configurazione anche per questa funzionalità, raggiungibile nel menù "Servers -> Samba Windows File Sharing" ma questo modulo è, appunto, adeguato a gestire un'infrastruttura complessa. Preferisco quindi ricorrere alla configurazione rapida di una share di rete senza restrizioni come indicato nella guida di Keltik sempre sul forum di debianizzati.org

    Il server Samba ho scelto di preinstallarlo in fase di setup, quindi non ci dovrebbe essere altro da installare. Quello che voglio fare ora, è configurare samba perchè mostri una share di rete che faccia riferimento alla directory "/download" su cui è stato montato lo spazio rimasto disponibile sul disco da 750Gb.

    Secondo la guida, ora devo creare un utente "guest" che possa fornire l'accesso non autenticato alle mie share di rete:
    codice:
    adduser guest --home=/home/guest --shell=/bin/false --disabled-password
    [sudo] password for matteo: 
    Adding user `guest' ...
    Adding new group `guest' (1001) ...
    Adding new user `guest' (1001) with group `guest' ...
    Creating home directory `/home/guest' ...
    Copying files from `/etc/skel' ...
    Changing the user information for guest
    Enter the new value, or press ENTER for the default
    	Full Name []: 
    	Room Number []: 
    	Work Phone []: 
    	Home Phone []: 
    	Other []: 
    Is the information correct? [Y/n] y
    Le informazioni per l'utente non mi interessano, lascio tutto vuoto e confermo. editando con nano il file "/etc/passwd" in effetti all'ultima riga compare il mio utente, quindi il comando e la creazione del file sono andati a buon fine.

    Prima di configurare samba, faccio la solita copia di backup del file di configurazione "/etc/samba/smb.conf". Il software è stato installato e preconfigurato in fase di setup quindi il mio per ora risulta:
    codice:
    #
    # Sample configuration file for the Samba suite for Debian GNU/Linux.
    #
    #
    # This is the main Samba configuration file. You should read the
    # smb.conf(5) manual page in order to understand the options listed
    # here. Samba has a huge number of configurable options most of which 
    # are not shown in this example
    #
    # Some options that are often worth tuning have been included as
    # commented-out examples in this file.
    #  - When such options are commented with ";", the proposed setting
    #    differs from the default Samba behaviour
    #  - When commented with "#", the proposed setting is the default
    #    behaviour of Samba but the option is considered important
    #    enough to be mentioned here
    #
    # NOTE: Whenever you modify this file you should run the command
    # "testparm" to check that you have not made any basic syntactic 
    # errors. 
    # A well-established practice is to name the original file
    # "smb.conf.master" and create the "real" config file with
    # testparm -s smb.conf.master >smb.conf
    # This minimizes the size of the really used smb.conf file
    # which, according to the Samba Team, impacts performance
    # However, use this with caution if your smb.conf file contains nested
    # "include" statements. See Debian bug #483187 for a case
    # where using a master file is not a good idea.
    #
    
    #======================= Global Settings =======================
    
    [global]
    
    ## Browsing/Identification ###
    
    # Change this to the workgroup/NT-domain name your Samba server will part of
       workgroup = fracassetti.lan
    
    # server string is the equivalent of the NT Description field
       server string = %h server
    
    # Windows Internet Name Serving Support Section:
    # WINS Support - Tells the NMBD component of Samba to enable its WINS Server
    #   wins support = no
    
    # WINS Server - Tells the NMBD components of Samba to be a WINS Client
    # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    ;   wins server = w.x.y.z
    
    # This will prevent nmbd to search for NetBIOS names through DNS.
       dns proxy = no
    
    # What naming service and in what order should we use to resolve host names
    # to IP addresses
    ;   name resolve order = lmhosts host wins bcast
    
    #### Networking ####
    
    # The specific set of interfaces / networks to bind to
    # This can be either the interface name or an IP address/netmask;
    # interface names are normally preferred
    ;   interfaces = 127.0.0.0/8 eth0
    
    # Only bind to the named interfaces and/or networks; you must use the
    # 'interfaces' option above to use this.
    # It is recommended that you enable this feature if your Samba machine is
    # not protected by a firewall or is a firewall itself.  However, this
    # option cannot handle dynamic or non-broadcast interfaces correctly.
    ;   bind interfaces only = yes
    
    
    
    #### Debugging/Accounting ####
    
    # This tells Samba to use a separate log file for each machine
    # that connects
       log file = /var/log/samba/log.%m
    
    # Cap the size of the individual log files (in KiB).
       max log size = 1000
    
    # If you want Samba to only log through syslog then set the following
    # parameter to 'yes'.
    #   syslog only = no
    
    # We want Samba to log a minimum amount of information to syslog. Everything
    # should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
    # through syslog you should set the following parameter to something higher.
       syslog = 0
    
    # Do something sensible when Samba crashes: mail the admin a backtrace
       panic action = /usr/share/samba/panic-action %d
    
    
    ####### Authentication #######
    
    # "security = user" is always a good idea. This will require a Unix account
    # in this server for every user accessing the server. See
    # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
    # in the samba-doc package for details.
    #   security = user
    
    # You may wish to use password encryption.  See the section on
    # 'encrypt passwords' in the smb.conf(5) manpage before enabling.
       encrypt passwords = true
    
    # If you are using encrypted passwords, Samba will need to know what
    # password database type you are using.  
       passdb backend = tdbsam
    
       obey pam restrictions = yes
    
    # This boolean parameter controls whether Samba attempts to sync the Unix
    # password with the SMB password when the encrypted SMB password in the
    # passdb is changed.
       unix password sync = yes
    
    # For Unix password sync to work on a Debian GNU/Linux system, the following
    # parameters must be set (thanks to Ian Kahan < for
    # sending the correct chat script for the passwd program in Debian Sarge).
       passwd program = /usr/bin/passwd %u
       passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    
    # This boolean controls whether PAM will be used for password changes
    # when requested by an SMB client instead of the program listed in
    # 'passwd program'. The default is 'no'.
       pam password change = yes
    
    ########## Domains ###########
    
    # Is this machine able to authenticate users. Both PDC and BDC
    # must have this setting enabled. If you are the BDC you must
    # change the 'domain master' setting to no
    #
    ;   domain logons = yes
    #
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the location of the user's profile directory
    # from the client point of view)
    # The following required a [profiles] share to be setup on the
    # samba server (see below)
    ;   logon path = \\%N\profiles\%U
    # Another common choice is storing the profile in the user's home directory
    # (this is Samba's default)
    #   logon path = \\%N\%U\profile
    
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the location of a user's home directory (from the client
    # point of view)
    ;   logon drive = H:
    #   logon home = \\%N\%U
    
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the script to run during logon. The script must be stored
    # in the [netlogon] share
    # NOTE: Must be store in 'DOS' file format convention
    ;   logon script = logon.cmd
    
    # This allows Unix users to be created on the domain controller via the SAMR
    # RPC pipe.  The example command creates a user account with a disabled Unix
    # password; please adapt to your needs
    ; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
    
    # This allows machine accounts to be created on the domain controller via the 
    # SAMR RPC pipe.  
    # The following assumes a "machines" group exists on the system
    ; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u
    
    # This allows Unix groups to be created on the domain controller via the SAMR
    # RPC pipe.  
    ; add group script = /usr/sbin/addgroup --force-badname %g
    
    ########## Printing ##########
    
    # If you want to automatically load your printer list rather
    # than setting them up individually then you'll need this
    #   load printers = yes
    
    # lpr(ng) printing. You may wish to override the location of the
    # printcap file
    ;   printing = bsd
    ;   printcap name = /etc/printcap
    
    # CUPS printing.  See also the cupsaddsmb(8) manpage in the
    # cupsys-client package.
    ;   printing = cups
    ;   printcap name = cups
    
    ############ Misc ############
    
    # Using the following line enables you to customise your configuration
    # on a per machine basis. The %m gets replaced with the netbios name
    # of the machine that is connecting
    ;   include = /home/samba/etc/smb.conf.%m
    
    # Most people will find that this option gives better performance.
    # See smb.conf(5) and /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/speed.html
    # for details
    # You may want to add the following on a Linux system:
    #         SO_RCVBUF=8192 SO_SNDBUF=8192
    #   socket options = TCP_NODELAY
    
    # The following parameter is useful only if you have the linpopup package
    # installed. The samba maintainer and the linpopup maintainer are
    # working to ease installation and configuration of linpopup and samba.
    ;   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &
    
    # Domain Master specifies Samba to be the Domain Master Browser. If this
    # machine will be configured as a BDC (a secondary logon server), you
    # must set this to 'no'; otherwise, the default behavior is recommended.
    #   domain master = auto
    
    # Some defaults for winbind (make sure you're not using the ranges
    # for something else.)
    ;   idmap uid = 10000-20000
    ;   idmap gid = 10000-20000
    ;   template shell = /bin/bash
    
    # The following was the default behaviour in sarge,
    # but samba upstream reverted the default because it might induce
    # performance issues in large organizations.
    # See Debian bug #368251 for some of the consequences of *not*
    # having this setting and smb.conf(5) for details.
    ;   winbind enum groups = yes
    ;   winbind enum users = yes
    
    # Setup usershare options to enable non-root users to share folders
    # with the net usershare command.
    
    # Maximum number of usershare. 0 (default) means that usershare is disabled.
    ;   usershare max shares = 100
    
    #======================= Share Definitions =======================
    
    [homes]
       comment = Home Directories
       browseable = no
    
    # By default, the home directories are exported read-only. Change the
    # next parameter to 'no' if you want to be able to write to them.
       read only = yes
    
    # File creation mask is set to 0700 for security reasons. If you want to
    # create files with group=rw permissions, set next parameter to 0775.
       create mask = 0700
    
    # Directory creation mask is set to 0700 for security reasons. If you want to
    # create dirs. with group=rw permissions, set next parameter to 0775.
       directory mask = 0700
    
    # By default, \\server\username shares can be connected to by anyone
    # with access to the samba server.
    # The following parameter makes sure that only "username" can connect
    # to \\server\username
    # This might need tweaking when using external authentication schemes
       valid users = %S
    
    # Un-comment the following and create the netlogon directory for Domain Logons
    # (you need to configure Samba to act as a domain controller too.)
    ;[netlogon]
    ;   comment = Network Logon Service
    ;   path = /home/samba/netlogon
    ;   guest ok = yes
    ;   read only = yes
    
    # Un-comment the following and create the profiles directory to store
    # users profiles (see the "logon path" option above)
    # (you need to configure Samba to act as a domain controller too.)
    # The path below should be writable by all users so that their
    # profile directory may be created the first time they log on
    ;[profiles]
    ;   comment = Users profiles
    ;   path = /home/samba/profiles
    ;   guest ok = no
    ;   browseable = no
    ;   create mask = 0600
    ;   directory mask = 0700
    
    [printers]
       comment = All Printers
       browseable = no
       path = /var/spool/samba
       printable = yes
       guest ok = no
       read only = yes
       create mask = 0700
    
    # Windows clients look for this share name as a source of downloadable
    # printer drivers
    [print$]
       comment = Printer Drivers
       path = /var/lib/samba/printers
       browseable = yes
       read only = yes
       guest ok = no
    # Uncomment to allow remote administration of Windows print drivers.
    # You may need to replace 'lpadmin' with the name of the group your
    # admin users are members of.
    # Please note that you also need to set appropriate Unix permissions
    # to the drivers directory for these users to have write rights in it
    ;   write list = root, @lpadmin
    
    # A sample share for sharing your CD-ROM with others.
    ;[cdrom]
    ;   comment = Samba server's CD-ROM
    ;   read only = yes
    ;   locking = no
    ;   path = /cdrom
    ;   guest ok = yes
    
    # The next two parameters show how to auto-mount a CD-ROM when the
    #	cdrom share is accesed. For this to work /etc/fstab must contain
    #	an entry like this:
    #
    #       /dev/scd0   /cdrom  iso9660 defaults,noauto,ro,user   0 0
    #
    # The CD-ROM gets unmounted automatically after the connection to the
    #
    # If you don't want to use auto-mounting/unmounting make sure the CD
    #	is mounted on /cdrom
    #
    ;   preexec = /bin/mount /cdrom
    ;   postexec = /bin/umount /cdrom
    Ultima modifica di frakka : 26-11-2011 a 13:04

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  8. #8
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 8.2_ Configurazione del server.

    codice:
    # Some options that are often worth tuning have been included as
    # commented-out examples in this file.
    #  - When such options are commented with ";", the proposed setting
    #    differs from the default Samba behaviour
    #  - When commented with "#", the proposed setting is the default
    #    behaviour of Samba but the option is considered important
    #    enough to be mentioned here
    Ok.

    codice:
    # NOTE: Whenever you modify this file you should run the command
    # "testparm" to check that you have not made any basic syntactic 
    # errors. 
    # A well-established practice is to name the original file
    # "smb.conf.master" and create the "real" config file with
    # testparm -s smb.conf.master >smb.conf
    # This minimizes the size of the really used smb.conf file
    # which, according to the Samba Team, impacts performance
    # However, use this with caution if your smb.conf file contains nested
    # "include" statements. See Debian bug #483187 for a case
    # where using a master file is not a good idea.
    Rinomino quindi il file smb.conf in smb.conf.master e farò le modifiche su questo, generando poi il file smb.conf con il comando proposto. Nella directory non c'è già un file smb.conf.master quindi debian di default usa il smb.conf completo ma non è un problema.
    codice:
    sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.master
    codice:
    #======================= Global Settings =======================
    
    [global]
    
    ## Browsing/Identification ###
    
    # Change this to the workgroup/NT-domain name your Samba server will part of
       workgroup = fracassetti.lan
    
    # server string is the equivalent of the NT Description field
       server string = %h server
    
    # Windows Internet Name Serving Support Section:
    # WINS Support - Tells the NMBD component of Samba to enable its WINS Server
    #   wins support = no
    
    # WINS Server - Tells the NMBD components of Samba to be a WINS Client
    # Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
    ;   wins server = w.x.y.z
    
    # This will prevent nmbd to search for NetBIOS names through DNS.
       dns proxy = no
    
    # What naming service and in what order should we use to resolve host names
    # to IP addresses
    ;   name resolve order = lmhosts host wins bcast
    La configurazione di base fatta dal setup. E' già impostato il gruppo di lavoro in fracassetti.lan

    codice:
    #### Networking ####
    
    # The specific set of interfaces / networks to bind to
    # This can be either the interface name or an IP address/netmask;
    # interface names are normally preferred
    ;   interfaces = 127.0.0.0/8 eth0
        interfaces = eth1
    
    # Only bind to the named interfaces and/or networks; you must use the
    # 'interfaces' option above to use this.
    # It is recommended that you enable this feature if your Samba machine is
    # not protected by a firewall or is a firewall itself.  However, this
    # option cannot handle dynamic or non-broadcast interfaces correctly.
    ;   bind interfaces only = yes
       bind interfaces only = yes
    Sarò fissato ma il protocollo SMB non è considerato molto sicuro, sicuramente non per l'uso al di fuori di una rete locale e gli stessi commenti suggeriscono di procedere in questo modo. Per quanto mi riguarda, mi serve solo che sia in ascolto sulla rete locale e l'interfaccia eth1. Visto che ho solo una rete associata all'interfaccia eth1 posso anche specificare solo quella, come indicato nei commenti.

    codice:
    #### Debugging/Accounting ####
    
    # This tells Samba to use a separate log file for each machine
    # that connects
       log file = /var/log/samba/log.%m
    
    # Cap the size of the individual log files (in KiB).
       max log size = 1000
    
    # If you want Samba to only log through syslog then set the following
    # parameter to 'yes'.
    #   syslog only = no
       syslog only = yes
    
    # We want Samba to log a minimum amount of information to syslog. Everything
    # should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
    # through syslog you should set the following parameter to something higher.
     #   syslog = 0
       syslog = 1
    
    # Do something sensible when Samba crashes: mail the admin a backtrace
       panic action = /usr/share/samba/panic-action %d
    Imposto il logging di samba direttamente nel syslog, non mi serve diversamente.

    codice:
    ####### Authentication #######
    # "security = user" is always a good idea. This will require a Unix account
    # in this server for every user accessing the server. See
    # /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/ServerType.html
    # in the samba-doc package for details.
    #   security = user
       security = share
    
    # You may wish to use password encryption.  See the section on
    # 'encrypt passwords' in the smb.conf(5) manpage before enabling.
       encrypt passwords = true
    
    # If you are using encrypted passwords, Samba will need to know what
    # password database type you are using.  
       passdb backend = tdbsam
    
       obey pam restrictions = yes
       guest account = guest
       invalid users = root
    
    # This boolean parameter controls whether Samba attempts to sync the Unix
    # password with the SMB password when the encrypted SMB password in the
    # passdb is changed.
       unix password sync = yes
    
    # For Unix password sync to work on a Debian GNU/Linux system, the following
    # parameters must be set (thanks to Ian Kahan < for
    # sending the correct chat script for the passwd program in Debian Sarge).
       passwd program = /usr/bin/passwd %u
       passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    
    # This boolean controls whether PAM will be used for password changes
    # when requested by an SMB client instead of the program listed in
    # 'passwd program'. The default is 'no'.
       pam password change = yes
    Aggiungo le configurazioni per indentificare l'utente che ho creato come il "guest", cioè un identificativo per un utente non autenticato che può accedere alle risorse condivise.

    codice:
    ########## Domains ###########
    
    # Is this machine able to authenticate users. Both PDC and BDC
    # must have this setting enabled. If you are the BDC you must
    # change the 'domain master' setting to no
    #
    ;   domain logons = yes
    #
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the location of the user's profile directory
    # from the client point of view)
    # The following required a [profiles] share to be setup on the
    # samba server (see below)
    ;   logon path = \\%N\profiles\%U
    # Another common choice is storing the profile in the user's home directory
    # (this is Samba's default)
    #   logon path = \\%N\%U\profile
    
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the location of a user's home directory (from the client
    # point of view)
    ;   logon drive = H:
    #   logon home = \\%N\%U
    
    # The following setting only takes effect if 'domain logons' is set
    # It specifies the script to run during logon. The script must be stored
    # in the [netlogon] share
    # NOTE: Must be store in 'DOS' file format convention
    ;   logon script = logon.cmd
    
    # This allows Unix users to be created on the domain controller via the SAMR
    # RPC pipe.  The example command creates a user account with a disabled Unix
    # password; please adapt to your needs
    ; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u
    
    # This allows machine accounts to be created on the domain controller via the 
    # SAMR RPC pipe.  
    # The following assumes a "machines" group exists on the system
    ; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u
    
    # This allows Unix groups to be created on the domain controller via the SAMR
    # RPC pipe.  
    ; add group script = /usr/sbin/addgroup --force-badname %g
    Questa sezione serve per creare un controller di dominio. Non è il mio caso e non mi serve quindi lascio tutto commentato.

    codice:
    ########## Printing ##########
    
    # If you want to automatically load your printer list rather
    # than setting them up individually then you'll need this
    #   load printers = yes
    
    # lpr(ng) printing. You may wish to override the location of the
    # printcap file
    ;   printing = bsd
    ;   printcap name = /etc/printcap
    
    # CUPS printing.  See also the cupsaddsmb(8) manpage in the
    # cupsys-client package.
    ;   printing = cups
    ;   printcap name = cups
    Non ho neppure stampanti connesse al server quindi anche qui lascio tutto commentato.

    codice:
    ############ Misc ############
    
    # Using the following line enables you to customise your configuration
    # on a per machine basis. The %m gets replaced with the netbios name
    # of the machine that is connecting
    ;   include = /home/samba/etc/smb.conf.%m
    
    # Most people will find that this option gives better performance.
    # See smb.conf(5) and /usr/share/doc/samba-doc/htmldocs/Samba3-HOWTO/speed.html
    # for details
    # You may want to add the following on a Linux system:
    #         SO_RCVBUF=8192 SO_SNDBUF=8192
    #   socket options = TCP_NODELAY
    
    # The following parameter is useful only if you have the linpopup package
    # installed. The samba maintainer and the linpopup maintainer are
    # working to ease installation and configuration of linpopup and samba.
    ;   message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' &
    
    # Domain Master specifies Samba to be the Domain Master Browser. If this
    # machine will be configured as a BDC (a secondary logon server), you
    # must set this to 'no'; otherwise, the default behavior is recommended.
    #   domain master = auto
    
    # Some defaults for winbind (make sure you're not using the ranges
    # for something else.)
    ;   idmap uid = 10000-20000
    ;   idmap gid = 10000-20000
    ;   template shell = /bin/bash
    
    # The following was the default behaviour in sarge,
    # but samba upstream reverted the default because it might induce
    # performance issues in large organizations.
    # See Debian bug #368251 for some of the consequences of *not*
    # having this setting and smb.conf(5) for details.
    ;   winbind enum groups = yes
    ;   winbind enum users = yes
    
    # Setup usershare options to enable non-root users to share folders
    # with the net usershare command.
    
    # Maximum number of usershare. 0 (default) means that usershare is disabled.
    ;   usershare max shares = 100
    Riguarda sempre le funzionalità di domain controller, non mi interessano.

    codice:
    #======================= Share Definitions =======================
    #[homes]
    #   comment = Home Directories
    #   browseable = no
    
    # By default, the home directories are exported read-only. Change the
    # next parameter to 'no' if you want to be able to write to them.
    #   read only = yes
    Per adesso mi interessa avere a disposizione solo la share /download, poi magari vedremo se ho bisogno di rendere disponibili le home directory di altri utenti... Per ora, commento tutto.

    codice:
    # File creation mask is set to 0700 for security reasons. If you want to
    # create files with group=rw permissions, set next parameter to 0775.
       create mask = 0700
    
    # Directory creation mask is set to 0700 for security reasons. If you want to
    # create dirs. with group=rw permissions, set next parameter to 0775.
       directory mask = 0700
    
    # By default, \\server\username shares can be connected to by anyone
    # with access to the samba server.
    # The following parameter makes sure that only "username" can connect
    # to \\server\username
    # This might need tweaking when using external authentication schemes
    #   valid users = %S
    Tutti gli utenti devono potersi connettere alla share. Quindi commento.
    Un discorso a parte meritano i permessi da indicare su files e directory contenuti nella share: Stò realizzando un serverino che starà in casa mia, non in un ufficio o un'azienda e non ci saranno più utenti a condividere la share. Mi serve che tutti coloro che accedono alle condivisioni possano spostare o eliminare i files contenuti all'interno della condivisione.

    Il discorso da fare sulla forma ottale del permessi Unix non è complicato ma neppure così immediato.
    Una "mask" è il set di permessi che sono attribuiti ad un files o ad una directory. e' indicata solitamente in gruppi da 3 o 4 cifre, di cui ora mi interessano solo le ultime 3. Nell'esempio evidenziato in rosso, il file indica come "File creation mask" il valore "0700" che, considerando solo le ultime 3 cifre, non si legge "settecento" ma "sette-zero-zero".
    Questi cifre indicano i permessi assegnati (in questo caso) ai nuovi file creati nella share. Nell'ordine in cui si leggono di solito, "il proprietario" (user) di questi nuovi files ha "7" come livello di permessi, il "gruppo utente" (group) cui appartiene il proprietario ha "0" e "tutti gli altri" (other) hanno "0".
    Questi livelli si ottengono con delle semplici somme ma, riassumendo velocemente e rimandando a una delle tante spiegazioni reperibili online per gli approfondimenti:
    "0": Nessun permesso
    "1": Esecuzione. Il file può essere eseguito ma non letto o scritto
    "2": Scrittura. Il file può essere scritto ma non aperto per lettura o lanciato
    "3": Il file può essere scritto ed eseguito ma non aperto per lettura
    "4": Il file può essere aperto in lettura ma non scritto ne eseguito
    "5": Il file può essere letto ed eseguito ma non scritto.
    "6": Il file può essere letto e scritto ma non eseguito
    "7": Tutti i permessi. Il file può essere letto, scritto ed eseguito.

    Creare una share con "File creation mask" 0700 significa che l'utente proprietario del file godrà di tutti i permessi su di esso ma nessun'altro utente (a parte root) sarà in grado di lavorare su quel file. Se voglio che l'utente e tutti gli appartenenti al suo gruppo godano di tutti i permessi sul file dovrò usare la mask 770, se invece voglio che tutti possano fare tutto su quel file userò la mask 777.
    Inutile dilungarsi, l'unico modo per capirci qualcosa è leggere le guide e provare...

    codice:
    # Un-comment the following and create the netlogon directory for Domain Logons
    # (you need to configure Samba to act as a domain controller too.)
    ;[netlogon]
    ;   comment = Network Logon Service
    ;   path = /home/samba/netlogon
    ;   guest ok = yes
    ;   read only = yes
    
    # Un-comment the following and create the profiles directory to store
    # users profiles (see the "logon path" option above)
    # (you need to configure Samba to act as a domain controller too.)
    # The path below should be writable by all users so that their
    # profile directory may be created the first time they log on
    ;[profiles]
    ;   comment = Users profiles
    ;   path = /home/samba/profiles
    ;   guest ok = no
    ;   browseable = no
    ;   create mask = 0600
    ;   directory mask = 0700
    Sempre per domain controller, non mi interessa.

    codice:
    #[printers]
    #   comment = All Printers
    #   browseable = no
    #   path = /var/spool/samba
    #   printable = yes
    #   guest ok = no
    #   read only = yes
    #   create mask = 0700
    
    # Windows clients look for this share name as a source of downloadable
    # printer drivers
    #[print$]
    #   comment = Printer Drivers
    #   path = /var/lib/samba/printers
    #   browseable = yes
    #   read only = yes
    #   guest ok = no
    # Uncomment to allow remote administration of Windows print drivers.
    # You may need to replace 'lpadmin' with the name of the group your
    # admin users are members of.
    # Please note that you also need to set appropriate Unix permissions
    # to the drivers directory for these users to have write rights in it
    ;   write list = root, @lpadmin
    Niente stampanti quindi commento tutto.

    codice:
    # A sample share for sharing your CD-ROM with others.
    ;[cdrom]
    ;   comment = Samba server's CD-ROM
    ;   read only = yes
    ;   locking = no
    ;   path = /cdrom
    ;   guest ok = yes
    
    # The next two parameters show how to auto-mount a CD-ROM when the
    #	cdrom share is accesed. For this to work /etc/fstab must contain
    #	an entry like this:
    #
    #       /dev/scd0   /cdrom  iso9660 defaults,noauto,ro,user   0 0
    #
    # The CD-ROM gets unmounted automatically after the connection to the
    #
    # If you don't want to use auto-mounting/unmounting make sure the CD
    #	is mounted on /cdrom
    #
    ;   preexec = /bin/mount /cdrom
    ;   postexec = /bin/umount /cdrom
    Anche qui nessun cdrom da condividere

    Provo quindi a generare il file di configurazione e riavviare samba, con i comandi
    codice:
    sudo testparm -s smb.conf.master >smb.conf
    sudo /etc/init.d/samba restart
    Questo è ora il contenuto del file smb.conf, con solo le istruzioni applicate e ripulito dai commenti:
    codice:
    [global]
    	workgroup = FRACASSETTI.LAN
    	server string = %h server
    	interfaces = eth1
    	bind interfaces only = Yes
    	security = SHARE
    	obey pam restrictions = Yes
    	guest account = guest
    	pam password change = Yes
    	passwd program = /usr/bin/passwd %u
    	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    	unix password sync = Yes
    	syslog only = Yes
    	log file = /var/log/samba/log.%m
    	max log size = 1000
    	dns proxy = No
    	panic action = /usr/share/samba/panic-action %d
    	invalid users = root

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  9. #9
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 8.3_ Impostazione di una share pubblica.

    Dalla guida citata in precedenza prendo la sezione da aggiungere in fondo al file per creare la mia share di rete:
    codice:
    [Download]
    comment = Risorsa pubblica condivisa
    path = /download
    read only = no
    guest ok = yes
    guest only = yes
    create mask = 0666
    directory mask = 0777
    Il serverino rimane in casa mia, accessibile solo dalla LAN per impostazione data a Samba, non ho altri utenti e mi serve la libertà di muovere, modificare e cancellare liberamente files all'interno della share, esigenza di comodità che ne prevarica la riservatezza.

    Con la configurazione data in precedenza, è l'utente "guest" con cui lavora samba che si presenta al sistema per scrivere i files nella share. A livello di filesystem, quindi, l'utente "owner" dei files e delle directory sarà guest. Anche operando via rete gli spostamenti di files tra una directory e l'altra all'interno della share saranno eseguiti sul server dall'utente guest quindi potrei utilizzare una mask più restrittiva per "create" e "directory".

    Prendiamo però ora il caso in cui io abbia necessità di collegarmi al mio server via ssh con il mio utente "matteo" e avessi bisogno di maneggiare i files presenti nella share configurata usando la mask 0700 per le directory e 0600 per i files, come indicato nella guida.
    Per il sistema, l'owner con diritti "7" o "6" sarà "guest" mentre "matteo" che appartiene agli "others" il permesso attribuito è "0" e quindi non potrò toccare files e directory senza modificarne prima gli attributi o senza usare "sudo" o diventare root.

    Se volessi usare una mask più ristretta ma idonea alle mie esigenze potrei forse usare le mask 0606 e 0707che permetterebbero a "guest" ed a tutti gli altri utenti l'accesso in lettura e scrittura sui files e tutti i permessi sulle directory create nelle share. E' una situazione un pò atipica, in quanto esclude dall'accesso si dati solo gli utenti del server diversi da "guest" ma appartenenti al suo gruppo...
    Una soluzione più standard sarebbe sicuramente rendere "matteo" membro del gruppo "guest" e usare una più standard mask "0660" e "0770".

    Di solito, salvo esigenze particolari, per una soluzione casereccia come la mia si usano con sufficiente tranquillità le mask "0666" e "0777"...

    Provo quindi a rigenerare il file di configurazione e riavviare samba, con i comandi
    codice:
    sudo testparm -s smb.conf.master >smb.conf
    sudo /etc/init.d/samba restart
    Questo è ora il contenuto del file smb.conf:
    codice:
    [global]
    	workgroup = FRACASSETTI.LAN
    	server string = %h server
    	interfaces = eth1
    	bind interfaces only = Yes
    	security = SHARE
    	obey pam restrictions = Yes
    	guest account = guest
    	pam password change = Yes
    	passwd program = /usr/bin/passwd %u
    	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    	unix password sync = Yes
    	syslog only = Yes
    	log file = /var/log/samba/log.%m
    	max log size = 1000
    	dns proxy = No
    	panic action = /usr/share/samba/panic-action %d
    	invalid users = root
    
    [Download]
    	comment = Risorsa pubblica condivisa
    	path = /download
    	read only = No
    	create mask = 0666
    	directory mask = 0777
    	guest only = Yes
    	guest ok = Yes
    La directory, attualmente, è di proprietà di root e presenta i seguenti permessi:
    codice:
    drwxr-xr-x   2 root root     6 Aug 18 17:26 download
    Io ho bisogno che sia anche scrivibile da tutti, altrimenti non sarà possibile creare o modificare file all'interno della directory da parte di utenti non root. Con il comando
    codice:
    sudo chmod -R o=rwx /download
    si assegnano i permessi di lettura, scrittura ed esecuzione a tutti gli utenti non "root" e non appartenenti al gruppo "root" ("u" stà per user, "g" stà per "group" ed "o" stà per "others")
    Ora i permessi sulla directory sono:
    codice:
    drwxr-xrwx   3 root root    17 Aug 18 17:37 download
    Impostare "browseable = no" mi darebbe comunque la possibilità raggiungere la share scrivendone il percorso completo ma non potrei vederla nell'elenco delle risorse disponibili del server: Avrei, insomma, una share "nascosta". Per ora però non mi interessa.



    Fatto, share configurata e scrivibile da Windows e Linux!

    [EDIT: 24 Febbraio 2012]
    Oggi mi sono accorto di diversi errori nel log del server, dovuti ad un problema con il daemon "winbind". Questo daemon è utilizzato per la comunicazione con domini Windows e, dato che la mia rete locale non ha un dominio ma solo un workgroup, di per se il servizio è inutile. E' stato probabilmente installato come dipendenza di samba, dato che generalmente lavorano insieme.
    Eseguire come root o tramite sudo i comandi:
    codice:
    /etc/init.d/winbind stop
    update-rc.d winbind remove
    arresta il servizio e lo rimuove dall'avvio automatico al boot. La funzionalità si samba, in assenza di un dominio windows, non ne viene influenzata.

    [EDIT2: 24 Febbraio 2012]
    Già che ci sono, ho notato che samba tenta continuamente di connettersi al daemon cupsd, per la gestione delle stampanti. Ovviamente, dato non ho stampanti sul server ed il servizio non è installato, anche per questo viene registrato un errore. Qui ho trovato qualche indicazione che per il momento sembra funzionare.
    Ho aggiunto queste istruzioni alla sezione [global] del mio file di configurazione anche se il parse con testparm ha rimosso l'opzione "printing = none" che è quindi probabilmente evitabile:
    codice:
            load printers = No
            printing = none
            printcap name = /dev/null
    e, ovviamente riavviato il daemon.
    Ultima modifica di frakka : 24-02-2012 a 00:35

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

  10. #10
    Super Moderatore L'avatar di frakka
    Registrato
    May 2001
    Località
    Casalecchio di Reno (Bo)
    Età
    43
    Messaggi
    23,388
    configurazione

    Predefinito 9.1_ Transmission daemon.

    Per il protocollo bittorrent su Linux ho sempre utilizzato Transmission. Non per un motivo particolare, era il client predefinito installato in gnome... Poi ne ho scoperto alcune feature interessanti tra cui il fatto che questo client ho la possibilità di funzionare anche in modalità daemon, con il controllo tramite interfaccia web. Ancora meglio, di recente ho scoperto che c'è la possibilità di installare direttamente un'interfaccia grafica remota per la connessione e la gestione della modalità daemon in esecuzione su un'altra macchina. In più, questa interfaccia remota è disponibile per Windows, Linux, Mac ed in java, quindi in teoria anche per palmari e smartphone... Si candida pertanto a diventare il client bittorrent perfetto per la mia installazione.

    Il contro è che l'ultima versione disponibile nei repository ufficiali di Debian è però la 2.03-2 mentre l'ultima rilasciata come stabile è una 2.33, che tra l'altro sembra implementare qualche bugfix interessante... Inoltre questa versione Transmission richiede una versione della libreria libevent > 2.0.10 e attualmente in debian c'è la 1.4... La 2.0.5 per Debian è in Alpha, si trova nel repository "Experimental". Non molto confortante: Avrei preferito non compilare da sorgenti e forse sarebbe meglio installare una versione più vecchia di transmission ma a questo punto provo...

    La procedura che devo seguire è quella indicata per l'installazione in una headless machine.

    [EDIT del 23 Giugno 2012:]
    Se dovessero servire i .deb già compilati qui ci sono sia il deb di transmission-daemon che delle libreria libevent. Sono quelli che girano sul mio sistema e li aggiungo mano a mano che aggiorno il daemon: è l'unica garanzia che posso dare.


    Questi sono i requisiti per compilare e generare il pacchetto .deb da installare per transmission-daemon:
    codice:
    sudo apt-get install build-essential automake autoconf libtool pkg-config libcurl4-openssl-dev intltool libxml2-dev libgtk2.0-dev libnotify-dev libglib2.0-dev libevent-dev checkinstall
    La procedura installa circa 250mb di librerie e tools...

    Ho trovato questa guida per ubuntu, che fà esattamente quello che mi serve: Con due comandi installa e compila la versione sperimentale della libreria e crea il pacchetto .deb per la versione 2.32 usando il tool checkinstall.
    I comandi, spezzati per maggiore leggibilità ed adattati alla versione 2.33 sono i seguenti:
    codice:
    mkdir -v $HOME/transmission_build
    cd $HME/transmission_build
    wget http://monkey.org/~provos/libevent-2.0.11-stable.tar.gz
    tar xvf libevent-2.0.11-stable.tar.gz
    cd libevent-2.0.11-stable
    ./configure --prefix=$HOME/transmission_build/libevent
    make
    sudo make install
    La procedura crea la directory transmission_build nella home directory dell'utente corrente, ci scarica dentro la versione 2.0.11-stable dei sorgenti della libreria libevent prelevati dal sito monkey.org:/, scompatta l'archivio e configura, compila ed installa la libreria. Di questa sequenza, l'unico comando che richiede i permessi di superuser è l'installazione, tutto il resto è raccomandabile farlo con i permessi di un utente standard.

    Ora non resta che compilare ed installare la versione aggiornata di transmission-daemon.
    Per la verità, la procedura sopra indicata sulla vm di test è andata liscia e senza intoppi mentre sul server fisico mi ha dato diversi problemi, probabilmente a causa della presenza della versione precedente della libreria. Sul server fisico ho dovuto rimuovere la versione 1.4 con il comando
    codice:
    apt-get purge libevent-1.*
    prima della procedura precedente e creare un link simbolico alla nuova versione dopo l'installazione, con il comando:
    codice:
    ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
    Per installare la versione aggiornata di transmission-daemon è sufficiente eseguire il secondo comando della guida linkata in precedenza, di seguito spezzato per leggibilità ed aggiornato per la versione 2.33:
    codice:
    cd $HOME/transmission_build
    wget http://download.transmissionbt.com/files/transmission-2.33.tar.bz2
    tar xjvf transmission-2.33.tar.bz2
    cd transmission-2.33
    export PKG_CONFIG_PATH="$HOME/transmission_build/libevent/lib/pkgconfig"
    ./configure
    make
    sudo checkinstall --pakdir "$HOME/transmission_build" --backup=no --deldoc=yes --fstrans=no --deldesc=yes --delspec=yes --default --pkgversion "2.33"
    make clean
    In realtà, dovendo installare il programma sulla macchina stessa e non dovendo esportare il pacchetto .deb, gli ultimi due comandi possono essere tranquillamente sostituiti con:
    codice:
    sudo make install
    ma non ci avevo pensato subito...

    Installo ora il pacchetto .deb e lancio il comando "transmission-daemon --help" per verificare che la versione sia quella corretta:
    codice:
    sudo dpkg -i transmission_2.33-1_amd64.deb 
    (Reading database ... 65418 files and directories currently installed.)
    Preparing to replace transmission 2.33-1 (using transmission_2.33-1_amd64.deb) ...
    Unpacking replacement transmission ...
    Setting up transmission (2.33-1) ...
    Processing triggers for man-db ...
    matteo@server:~/transmission_build$ transmission-daemon --help
    Transmission 2.33 (12565)  http://www.transmissionbt.com/
    A fast and easy BitTorrent client


    Ora che il programma è installato, si tratta di creare un utente limitato "transmission" che esegua il processo transmission-daemon all'avvio ma che sia sprovvisto di password (in modo che non possa fare login sulla macchina) e creare uno script che avvii il daemon con le giuste credenziali al boot del server.
    codice:
    sudo adduser --disabled-password transmission
    Ora eseguo un "cambio d'identità" necessario per avviare il processo transmission-daemon e generare una configurazione iniziale che posso poi personalizzare:
    codice:
    sudo su transmission
     transmission-daemon -f
    Se non ci sono messaggi di errore, basta avviare il processo per pochi secondi e poi arrestarlo con il comando "Ctrl +C". Con "exit" riprendo poi la mia identità.


    Devo ora creare quello che si chiama "init script" e cioè lo script caricato al boot del server che avvia il processo transmission-daemon e ne permette la classica gestione start | stop | restart. Sono fortunato e la guida riportata qui indica proprio lo script da utilizzare per le distribuzioni debian-like. Non avendo cambiato la configurazione di transmission ed avendo accettato il nome utente "transmission" non devo modificare nulla quindi copio-incollo lo script aprendo con nano come root il file "/etc/init.d/transmission-daemon" e poi lo rendo eseguibile con i comandi:
    codice:
    sudo chmod +x /etc/init.d/transmission-daemon
    sudo chown root:root /etc/init.d/transmission-daemon
    Provo:
    codice:
    # /etc/init.d/transmission-daemon start
    Starting bittorrent client transmission-daemon...
       Starting bittorrent client transmission-daemon succeeded
    root@server:/home/matteo/transmission_build# /etc/init.d/transmission-daemon stop
    Stopping bittorrent client transmission-daemon...
    start-stop-daemon: warning: this system is not able to track process names
    longer than 15 characters, please use --exec instead of --name.
    Ed il processo rimane appeso... Ahi! Lo script proposto dalla guida non funziona ma questa mia modifica un pò a sentimento alla linea 103 sembra risolvere il problema:
    codice:
    start-stop-daemon --chuid $USERNAME --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --exec $DAEMON
    I comandi
    codice:
    /etc/init.d/transmission-daemon start
     /etc/init.d/transmission-daemon stop
     /etc/init.d/transmission-daemon restart
    funzionano ora come previsto. Il mio init-script corretto, testato e funzionate diventa quindi:
    codice:
    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          transmission-daemon
    # Required-Start:    networking
    # Required-Stop:     networking
    # Default-Start:     2 3 5
    # Default-Stop:      0 1 6
    # Short-Description: Start the transmission BitTorrent daemon client.
    ### END INIT INFO
    
    # Original Author: Lennart A. JÃŒtte, based on Rob Howell's script
    # Modified by Maarten Van Coile & others (on IRC)
    
    # Do NOT "set -e"
    
    #
    # ----- CONFIGURATION -----
    #
    # For the default location Transmission uses, visit:
    # http://trac.transmissionbt.com/wiki/ConfigFiles
    # For a guide on how set the preferences, visit:
    # http://trac.transmissionbt.com/wiki/EditConfigFiles
    # For the available environement variables, visit:
    # http://trac.transmissionbt.com/wiki/EnvironmentVariables
    #
    # The name of the user that should run Transmission.
    # It's RECOMENDED to run Transmission in it's own user,
    # by default, this is set to 'transmission'.
    # For the sake of security you shouldn't set a password
    # on this user
    USERNAME=transmission
    
    
    # ----- *ADVANCED* CONFIGURATION -----
    # Only change these options if you know what you are doing!
    #
    # The folder where Transmission stores the config & web files.
    # ONLY change this you have it at a non-default location
    #TRANSMISSION_HOME="/var/config/transmission-daemon"
    #TRANSMISSION_WEB_HOME="/usr/share/transmission/web"
    #
    # The arguments passed on to transmission-daemon.
    # ONLY change this you need to, otherwise use the
    # settings file as per above.
    #TRANSMISSION_ARGS=""
    
    
    # ----- END OF CONFIGURATION -----
    #
    # PATH should only include /usr/* if it runs after the mountnfs.sh script.
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    DESC="bittorrent client"
    NAME=transmission-daemon
    DAEMON=$(which $NAME)
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Load the VERBOSE setting and other rcS variables
    [ -f /etc/default/rcS ] && . /etc/default/rcS
    
    #
    # Function that starts the daemon/service
    #
    
    do_start()
    {
        # Export the configuration/web directory, if set
        if [ -n "$TRANSMISSION_HOME" ]; then
              export TRANSMISSION_HOME
        fi
        if [ -n "$TRANSMISSION_WEB_HOME" ]; then
              export TRANSMISSION_WEB_HOME
        fi
    
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \
                --exec $DAEMON --background --test -- -f $TRANSMISSION_ARGS > /dev/null \
                || return 1
        start-stop-daemon --chuid $USERNAME --start --pidfile $PIDFILE --make-pidfile \
                --exec $DAEMON --background -- -f $TRANSMISSION_ARGS \
                || return 2
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
        # Return
        #   0 if daemon has been stopped
        #   1 if daemon was already stopped
        #   2 if daemon could not be stopped
        #   other if a failure occurred
        start-stop-daemon --chuid $USERNAME --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --exec $DAEMON
      # start-stop-daemon --stop --quiet --retry=TERM/10/KILL/5 --pidfile $PIDFILE --name $NAME
            RETVAL="$?"
            [ "$RETVAL" = 2 ] && return 2
    
         # Wait for children to finish too if this is a daemon that forks
         # and if the daemon is only ever run from this initscript.
         # If the above conditions are not satisfied then add some other code
         # that waits for the process to drop all resources that could be
         # needed by services started subsequently.  A last resort is to
         # sleep for some time.
    
         start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
            [ "$?" = 2 ] && return 2
    
            # Many daemons don't delete their pidfiles when they exit.
            rm -f $PIDFILE
    
            return "$RETVAL"
    }
    
    case "$1" in
      start)
            echo "Starting $DESC" "$NAME..."
            do_start
            case "$?" in
                    0|1) echo "   Starting $DESC $NAME succeeded" ;;
                    *)   echo "   Starting $DESC $NAME failed" ;;
            esac
            ;;
      stop)
            echo "Stopping $DESC $NAME..."
            do_stop
            case "$?" in
                    0|1) echo "   Stopping $DESC $NAME succeeded" ;;
                    *)   echo "   Stopping $DESC $NAME failed" ;;
            esac
            ;;
      restart|force-reload)
            #
            # If the "reload" option is implemented then remove the
            # 'force-reload' alias
            #
            echo "Restarting $DESC $NAME..."
            do_stop
            case "$?" in
              0|1)
                    do_start
                    case "$?" in
                        0|1) echo "   Restarting $DESC $NAME succeeded" ;;
                        *)   echo "   Restarting $DESC $NAME failed: couldn't start $NAME" ;;
                    esac
                    ;;
              *)
                    echo "   Restarting $DESC $NAME failed: couldn't stop $NAME" ;;
            esac
            ;;
      *)
            echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
            exit 3
            ;;
    esac
    Ora che il software è installato ed il sistema configurato per avviarlo al boot, è necessario configurare anche transmission. Il daemon viene eseguito dall'utente "transmission" quindi la configurazione da modificare si trova nella home directory di questo utente e precisamente nel percorso:
    codice:
     /home/transmission/.config/transmission-daemon
    E' necessario ricordarsi di fermare il daemon con il comando
    codice:
    /etc/init.d/transmission-daemon stop
    prima di modificare la configurazione altrimenti il programma, chiudendosi, sovrascrive il file di configurazione con le impostazioni correnti, eliminando eventuali modifiche fatte dopo l'ultimo avvio.

    Questo è il file di configurazione di default.
    codice:
    {
        "alt-speed-down": 50, 
        "alt-speed-enabled": false, 
        "alt-speed-time-begin": 540, 
        "alt-speed-time-day": 127, 
        "alt-speed-time-enabled": false, 
        "alt-speed-time-end": 1020, 
        "alt-speed-up": 50, 
        "bind-address-ipv4": "0.0.0.0", 
        "bind-address-ipv6": "::", 
        "blocklist-enabled": false, 
        "blocklist-url": "http://www.example.com/blocklist", 
        "cache-size-mb": 4, 
        "dht-enabled": true, 
        "download-dir": "/home/transmission/Downloads", 
        "encryption": 1, 
        "idle-seeding-limit": 30, 
        "idle-seeding-limit-enabled": false, 
        "incomplete-dir": "/home/transmission/Downloads", 
        "incomplete-dir-enabled": false, 
        "lpd-enabled": false, 
        "message-level": 2, 
        "peer-congestion-algorithm": "", 
        "peer-limit-global": 240, 
        "peer-limit-per-torrent": 60, 
        "peer-port": 51413, 
        "peer-port-random-high": 65535, 
        "peer-port-random-low": 49152, 
        "peer-port-random-on-start": false, 
        "peer-socket-tos": "default", 
        "pex-enabled": true, 
        "port-forwarding-enabled": true, 
        "preallocation": 1, 
        "prefetch-enabled": 1, 
        "ratio-limit": 2, 
        "ratio-limit-enabled": false, 
        "rename-partial-files": true, 
        "rpc-authentication-required": false, 
        "rpc-bind-address": "0.0.0.0", 
        "rpc-enabled": true, 
        "rpc-password": "{112c502b40dc4eb6ef8c5771f18666f2c30cb19e5abEdhD.", 
        "rpc-port": 9091, 
        "rpc-url": "/transmission/", 
        "rpc-username": "", 
        "rpc-whitelist": "127.0.0.1", 
        "rpc-whitelist-enabled": true, 
        "script-torrent-done-enabled": false, 
        "script-torrent-done-filename": "", 
        "speed-limit-down": 100, 
        "speed-limit-down-enabled": false, 
        "speed-limit-up": 100, 
        "speed-limit-up-enabled": false, 
        "start-added-torrents": true, 
        "trash-original-torrent-files": false, 
        "umask": 18, 
        "upload-slots-per-torrent": 14, 
        "utp-enabled": true
    }
    La spiegazione delle varie voci si trova in questa pagina della documentazione online. La parte per me più interessante, è la configurazione dell'interfaccia web (che mi servirà anche per configurare l'interfaccia remota).
    codice:
    "rpc-authentication-required": false, 
        "rpc-bind-address": "0.0.0.0", 
        "rpc-enabled": true, 
        "rpc-password": "{112c502b40dc4eb6ef8c5771f18666f2c30cb19e5abEdhD.", 
        "rpc-port": 9091, 
        "rpc-url": "/transmission/", 
        "rpc-username": "", 
        "rpc-whitelist": "127.0.0.1", 
        "rpc-whitelist-enabled": true,
    E' possibile attivare l'accesso autenticato con username e password all'interfaccia web, decidere su quale porta dovrà andare in ascolto l'interfaccia web, eventuali whitelist o range di IP autorizzati, sempre per evitare o consentire accessi non autorizzati dall'esterno. Sempre da questo file di configurazione, è possibile decidere quale porta utilizzare per bittorrent, che dovrà poi essere aperta sul firewall.
    Io ho usato il client installato sul mio desktop per creare una configurazione che potesse andare bene anche per il daemon sul server e ho copiato il file di configurazione dal mio desktop al server. Nella documentazione non c'è scritto che algoritmo è utilizzato per cifrare la password, quindi il fatto di averla inserita in chiaro dall'interfaccia grafica è sicuramente un comodità... Credo comunque che sia un md5.

    Infine, l'impostazione del parametro "umask" a "0" fà in modo che il trasmission salvi i file scaricati assegnando come permessi di default "666" e quindi concedendo a tutti gli utenti i permessi di lettura e scrittura sui files scaricati. L'interpretazione di questi valori non è molto intuitiva: Il file di configurazione utilizza il "json markup language" e questo formato prevede ed accetta solo numeri in base decimale: "18" è la conversione in base decimale del valore "022" ottale che corrisponde ai permessi di "-rw-r--r--". "0" è la conversione decimale del valore ottale "000" che applicato come mascheramento restituisce, appunto, "666" Per stabilire quindi il valore del parametro bisogna determinale in forma ottale i permessi che si vuole che i file possiedano, determinare il valore ottale della umask da applicare (usando 0666 come valore di partenza, similmente a quanto descritto qui per vsftpd) e convertire questo valore in un numero in base decimale, usando magari una calcolatrice scientifica...

    Questo è il file di configurazione che utilizzo sul mio server:
    codice:
    {
        "alt-speed-down": 50, 
        "alt-speed-enabled": false, 
        "alt-speed-time-begin": 540, 
        "alt-speed-time-day": 127, 
        "alt-speed-time-enabled": false, 
        "alt-speed-time-end": 1020, 
        "alt-speed-up": 50, 
        "bind-address-ipv4": "0.0.0.0", 
        "bind-address-ipv6": "::", 
        "blocklist-enabled": false, 
        "blocklist-updates-enabled": true, 
        "blocklist-url": "http://www.example.com/blocklist", 
        "cache-size-mb": 2, 
        "compact-view": false, 
        "dht-enabled": true, 
        "download-dir": "/download/transmission", 
        "encryption": 1, 
        "idle-seeding-limit": 30, 
        "idle-seeding-limit-enabled": false, 
        "incomplete-dir": "/download/transmission/incompleti", 
        "incomplete-dir-enabled": true, 
        "inhibit-desktop-hibernation": false, 
        "lazy-bitfield-enabled": true, 
        "lpd-enabled": false, 
        "main-window-height": 534, 
        "main-window-is-maximized": 0, 
        "main-window-width": 674, 
        "main-window-x": 1157, 
        "main-window-y": 425, 
        "message-level": 2, 
        "open-dialog-dir": "/download/transmission", 
        "open-file-limit": 32, 
        "peer-congestion-algorithm": "", 
        "peer-limit-global": 240, 
        "peer-limit-per-torrent": 60, 
        "peer-port": 51413, 
        "peer-port-random-high": 65535, 
        "peer-port-random-low": 49152, 
        "peer-port-random-on-start": false, 
        "peer-socket-tos": "default", 
        "pex-enabled": true, 
        "play-download-complete-sound": false, 
        "port-forwarding-enabled": true, 
        "preallocation": 1, 
        "prefetch-enabled": 1, 
        "prompt-before-exit": true, 
        "proxy": "", 
        "proxy-auth-enabled": false, 
        "proxy-auth-password": "", 
        "proxy-auth-username": "", 
        "proxy-enabled": false, 
        "proxy-port": 80, 
        "proxy-type": 0, 
        "ratio-limit": 2, 
        "ratio-limit-enabled": false, 
        "rename-partial-files": true, 
        "rpc-authentication-required": true, 
        "rpc-bind-address": "0.0.0.0", 
        "rpc-enabled": true, 
        "rpc-password": "hash-della-password", 
        "rpc-port": 9091, 
        "rpc-url": "/transmission/", 
        "rpc-username": "matteo", 
        "rpc-whitelist": "127.0.0.1,192.168.150.*", 
        "rpc-whitelist-enabled": true, 
        "script-torrent-done-enabled": false, 
        "script-torrent-done-filename": "/home/matteo", 
        "show-backup-trackers": false, 
        "show-desktop-notification": false, 
        "show-extra-peer-details": false, 
        "show-filterbar": true, 
        "show-notification-area-icon": false, 
        "show-options-window": false, 
        "show-statusbar": true, 
        "show-toolbar": true, 
        "show-tracker-scrapes": true, 
        "sort-mode": "sort-by-name", 
        "sort-reversed": false, 
        "speed-limit-down": 100, 
        "speed-limit-down-enabled": false, 
        "speed-limit-up": 10, 
        "speed-limit-up-enabled": true, 
        "start-added-torrents": true, 
        "statusbar-stats": "total-ratio", 
        "trash-original-torrent-files": false, 
        "umask": 0, 
        "upload-slots-per-torrent": 14, 
        "user-has-given-informed-consent": true, 
        "utp-enabled": true, 
        "watch-dir": "/download/transmission/pickup", 
        "watch-dir-enabled": true
    }
    Infine, devo poi ricordarmi di aprire nella catena INPUT di netfilter la porta configurata in transmission-daemon aggiungendo, allo script che configura il firewall al boot, la regola:
    codice:
    # Regola che apre la porta in uso da transmission-daemon
    $IPT -A tcp_inbound -p TCP -s 0/0 --destination-port 51413 -j ACCEPT

    Per impostare il sistema per avviare automaticamente transmission-daemon al boot, devo usare il comando:
    codice:
    update-rc.d transmission-daemon defaults
    codice:
    root@server:/home/matteo# update-rc.d transmission-daemon defaults
    update-rc.d: using dependency based boot sequencing
    update-rc.d: warning: transmission-daemon start runlevel arguments (2 3 4 5) do not match LSB Default-Start values (2 3 5)
    L'output ci avvisa che il nostro script prevede di avviare il daemon anche al runlevel 4 invece che ai soli runlevel 2, 3 e 5 previsti dalla Linux Standard Base... Poco male, lo lascio così ma se volessi fare il pignolo potrei specificare a mano i runlevel da utilizzare per avvio ed arresto del daemon con il comando:
    codice:
    update-rc.d transmission-daemon start 20 2 3 5 . stop 80 0 1 6 .
    in cui "20" e "80" sono valori che indicano semplicemente una la priorità standard e i valori "2, 3, 5" i runlevel di avvio e 0, 1 e 6 i runlevel di arresto.

    Ora posso avviare il mio daemon riavviando il server, per essere sicuro che si riavvii al boot oppure usando il comando:
    codice:
    sudo /etc/init.d/transmission-daemon start
    Nota:
    Nel mio caso, uso la directory "\download" e alcune sue sottodirectory nella configurazione di transmission-daemon. Perchè il tutto funzioni è necessario, ovviamente, che l'utente "transmission" abbia i permessi di lettura e scrittura su quelle directory. Il daemon non crea ne modifica le directory in automatico quindi è necessario che tali directory esistano e siano configurate con i permessi corretti.
    Nel mio caso, essendo la directory /download di proprietà di root, ho usato il comando
    codice:
    sudo chmod -R o=rwx /download
    per far si la directory /download e tutte le sue sottodirectory fossero scrivibili da tutti gli utenti non appartenenti al gruppo di root, quindi anche dall'utente transmission. E' lo stesso comando usato per rendere la share accessibile tramite samba, quindi nel caso non è necessario ripeterlo.
    Ultima modifica di frakka : 23-06-2012 a 18:39

    Questa è la storia di 4 persone chiamate Ognuno, Qualcuno, Ciascuno e Nessuno. C'era un lavoro importante da fare e Ognuno era sicuro che Qualcuno lo avrebbe fatto. Ciascuno poteva farlo, ma Nessuno lo fece, Qualcuno si arrabbiò perché era il lavoro di Ognuno. Ognuno pensò che Ciascuno potesse farlo, ma Ognuno capì che Nessuno l'avrebbe fatto. Finì che Ognuno incolpò Qualcuno perché Nessuno fece ciò che Ciascuno avrebbe potuto fare.

Pagina 1 di 2 1 2 ultimo

Informazioni Thread

Users Browsing this Thread

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Tags

Regole d'invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
nexthardware.com - © 2002-2022