Condividere una directory di lavoro su gnu/linux

Informatica

Come fare a condividere una cartella per lavorarci insieme via rete?
Lavorando con un'amica a un sito web, ci siamo accorti subito che non era pratico lavorare ciascuno su copie locali dell'intero sito, da sincronizzare ogni volta per mantenere il tutto coerente. Avendo già in lan un piccolo server web basato su Debian usato per provare il sito, la soluzione era semplice: lavoriamo entrambi direttamente sul server, su cui oltre ad apache gira già ssh, in modo da rendere superflua ogni sincronizzazione. In questo post vi racconto come ho fatto a condividere questa directory di lavoro.

Chiariamo gli obiettivi: vogliamo condividere una directory sul server in modo che due utenti che si collegano dalla rete possano leggere/scrivere/modificare i file contenuti in quella directory, che è anche la directory che usa il server web per servire le pagine.
[Per chi mi segue da un po'... sì, il server è sostanzialmente lo stesso di cui parlo in questa pagina, migrato da una macchina virtuale su una macchina "reale" :-) ed aggiornato recentemente a Lenny... se siete interessati scrivo un post su questa migrazione...]

Vediamo cosa c'è da fare sul server.
Dunque, abbiamo tre computer in rete, la mia linuxbox con su Mandriva, il pc della mia amica con su MS Windows XP ed il server su cui gira Debian etch (sì, lo so, è uscita lenny, forse faccio l'upgrade...) Lenny (alla fine l'ho fatto l'upgrade, mi serviva una caratteristica del kernel 2.6.26, magari ve ne parlo in un prossimo post...). Sul server abbiamo naturalmente Apache, il server web vero e proprio, MySQL per i database e SSH per l'amministrazione remota.

Vediamo cosa bisogna fare sul server per fare quel che ci serve.
Per caricare file sul server in modo semplice, piuttosto che installare e configurare un altro servizio (FTP :-(, NFS o Samba), ho preferito usare SSH, che c'era già, ed era configurato e funzionava correttamente, abilitando il subsystem SFTP (FTP Sicuro). L'operazione è di una facilità disarmante: basta aggiungere al file di configurazione di SSH, /etc/ssh/sshd_config, la seguente linea...
Subsystem sftp /usr/lib/openssh/sftp-server

... e riavviare il server SSH...
/etc/init.d/ssh restart

Adesso i nostri utenti si possono connettere via SFTP.

Il servizio SFTP per l'utente funziona esattamente come FTP, con la notevole differenza che lo scambio di dati avviene tramite SSH, e dunque in modo sicuro. La cosa non ci fa certo una gran differenza, visto che lavoriamo in una rete locale sicura, ma ha insieme alla sicurezza, forse eccessiva o superflua, c'è l'indubbio vantaggio di un servizio realizzato in modo semplicissimo e senza installare né configurare alcunché di nuovo: insomma, troppo comodo.

Ok, abbiamo il servizio SFTP, andiamo a creare gli utenti che dovranno usarlo. Aggiungiamo gli utenti al sistema con i comandi:
adduser gerlos
adduser mari

Aggiungiamo gli utenti al gruppo www-data in modo che possano scrivere nella directory servita da apache:
adduser gerlos www-data
adduser mari www-data

Cambiamo i permessi sulla directory /var/www in modo che l'albero dei file esistente sia scrivibile dagli utenti del gruppo www-data:
chmod -R g+w /var/www

Di default, quando un utente crea un file, il file viene associato al gruppo predefinito dell'utente, che in Debian è anche il gruppo privato dell'utente, che di solito ha lo stesso nome dell'utente, ad esempio il gruppo privato di gerlos è gerlos. Noi vogliamo invece che ogni file creato dentro /var/www/ sia sempre associato al gruppo www-data, in modo che i due utenti possano lavorarci insieme ed il server web. Possiamo fare questo in due modi: cambiando il gruppo predefinito degli utenti, in modo che sia www-data, oppure, come ritengo sia preferibile per ragioni di sicurezza, impostando il bit setgid sulla directory /var/www.
chmod g+s /var/www/

In questo modo, ogni file ed ogni directory creata qui dentro sarà associata al gruppo www-data. Inoltre, ogni sottodirectory creata qui dentro erediterà il bit setgid. Provare per credere.

A questo punto, per comodità, aggiungiamo nelle home degli utenti un link simbolico alla directory di apache:
ln -s /var/www /home/gerlos/www
ln -s /var/www /home/mari/www

Se creiamo un file qui dentro, ci accorgiamo subito che c'è qualcosa che non va:
$ touch prova
$ ls -l prova
-rw-r--r-- 1 gerlos www-data 0 2009-03-07 13:55 prova

I permessi predefiniti sono tali che ogni nuovo file creato sarà solo leggibile dal gruppo associato, e non scrivibile. Dunque ogni volta che creo un nuovo file dev ocambiare i permessi in modo che anche la mia amica possa modificarlo? Noooo... Siamo pigri ;-) non vogliamo cambiare ogni volta questi permessi, vogliamo che automaticamente questi file abbiano il permesso di scrittura per il gruppo.

Bisogna modificare la umask predefinita, la maschera di permessi usata per la creazione di nuovi file. Andiamo allora a modificare il valore di umask in /etc/profile ed in /etc/login.defs, cambiando il valore da 022 a 002.

La nostra rete locale è sicura, ma visto che oltre all'accesso SFTP i nostri utenti hanno via ssh anche un accesso shell, non fa male prendere qualche precauzione in più, come ad esempio la scadenza delle password, in modo da forzare l'utente a cambiare password periodicamente e a disabilitare l'account in caso di scadenza della password.
Con questi comandi:
chage -W 4 -M 15 -I 3 gerlos
chage -W 4 -M 15 -I 3 mari

In questo modo le password degli utenti scadono ogni 15 giorni, gli utenti vengono pre-avvisati di cambiare password 4 giorni prima della scadenza, e in caso di password scaduta da 3 giorni l'account viene bloccato, ed è necessario che root lo riattivi usando il comando passwd.

Per reimpostare la scadenza della password gli utenti possono usare i comandi:
passwd gerlos
passwd mari

Per vedere quando scade la propria password, gli utenti possono usare i comandi:
chage -l gerlos
chage -l gerlos

Ok, per il server è tutto, adesso andiamo sui client.

In gnu/linux ci sono un gran numero di client SFTP a disposizione. A me piace KDE, che è totalmente trasparente alla rete: basta mettere nella barra dell'indirizzo di Konqueror l'indirizzo del server nel formato sftp://nomeutente@nomeserver ed inserire nome utente e password quando richiesto per usare la cartella sul server come se fosse una cartella locale (aprendo i file con i programmi che usiamo abitualmente, salvando, e così via).
Per l'accesso shell, ovviamente non c'è problema: digitiamo ssh nomeutente@nomeserver, digitiamo la password e siamo dentro.
In lan le prestazioni sono talmente elevate, che non si apprezza alcun ritardo o latenza, e sembra di lavorare davvero come se si avessero tutti quei file sul proprio hard disk.

In MS Windows XP, che io sappia, non c'è "di serie" nessuno strumento per accedere a servizi SSH o SFTP, ma fortunatamente ci sono diversi progetti liberi che forniscono queste funzionalità, come WinSCP (client FTP, SFTP e SCP) e PuTTY (client SSH), leggeri, affidabili e convenienti da usare:
http://winscp.net/eng/docs/lang:it
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Certo, l'accesso al servizio SFTP non è comodo e "integrato" come in gnu/linux con KDE, però è comunque abbastanza facile da usare, soprattutto se si configura WinSCP con l'interfaccia "Explorer" invece della predefinita "Commander".

In verità, se proprio uno non potesse rinunciare a KDE, c'è un progetto che sta lavorando per portare il nuovo e innovativo KDE4 su MS Windows (e su Mac Os X!):
http://windows.kde.org
Io non l'ho ancora provato (lo sapete, non uso Windows da anni, e uso KDE su gnu/linux nativamente), ma se vi sentite avventurosi (è ancora in stadio di sviluppo frenetico), dateci un'occhiata, ne vale la pena!

Chi di voi ha più esperienza con queste cose, conosce alcuni problemi che si possono verificare quando due utenti lavorano contemporaneamente sul contenuto di una directory: può capitare che entrambi salvino gli stessi file, modificati indipendentemente, cancellando reciprocamente le correzioni fatte. Le stesse persone suggerirebbero forse di usare un sistema di gestione di versione, come RCS, CVS o Subversion, sicuramente ottimi, ma eccessivi per i nostri scopi. Alla fin fine, siamo in due a lavorare su quei file, due persone che tra l'altro mentre lavorano parlano tra di loro, e dunque è difficile che si verifichino problemi del genere.

Ciò nonostante, giusto per tener traccia del lavoro e prevenire i problemi detti, abbiamo stabilito di creare un file di testo da usare come log. Quando uno di noi comincia a lavorare su un file, lo annota nel log aggiungendo una riga, e quando finisce aggiunge un'altra riga con una descrizione delle modifiche fatte. In questo momento, prima di cominciare a modificare un file ciascuno può vedere se ci sta lavorando l'altro, ed evitare conflitti.

Questo è tutto, niente di complicato in effetti, ma comunque utile e comodo per lavorare in modo più efficiente.
Se qualcosa non vi è chiaro, consultate la documentazione dei comandi citati, leggendo la relativa pagina man o info; per ogni domanda o chiarimento, lasciate pure un commento qui sotto.

Trackback URL for this post:

http://gerlos.altervista.org/trackback/437

commenti

ritratto di federico_hyo

Thanks

grazie per la spiegazione, mi è risultata utile per un la configurazione di un server di staging.

f

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.