Usare git su ISPConfig3: il problema della directory .ssh

Questo è lo scenario: stavamo cercando di clonare in locale il codice che sta sul repository mediante git ed utilizzando un utente shell appositamente creato con ISPConfig, senza alcuna restrizione e senza chroot, un normalissimo utente shell, di quelli che si usano per dare un accesso SSH al dev che lavora su quel singolo progetto oppure per permettere al cliente di accedere mediante SFTP al proprio hosting.

Lanciando il comando git clone abbiamo però ottenuto un messaggio inaspettato:

git clone git@bitbucket.org:pippo/pluto.git temp
Could not create directory '/var/www/clients/clientX/webY/.ssh'
[...]

Il problema è stato quasi subito chiaro: il client git riteneva che la home dir dell’utente in uso, che a titolo di esempio chiamiamo utente_in_uso, fosse

/var/www/clients/clientX/webY/

quando invece è

/var/www/clients/clientX/webY/home/utente_in_uso

Sorvoliamo sulle ragioni tecniche di questo misunderstanding – che comunque è imputabile ad un bug di ISPConfig – e passiamo subito alla soluzione: bisogna fare in modo che entrambi i punti di vista coincidano, creando un link simbolico tra la vera home dir e quella presupposta da git. In parole povere, basta accedere come root e lanciare questo comando:

ln -s /var/www/clients/clientX/webY/home/utente_in_uso/.ssh /var/www/clients/clientX/webY/.ssh

Al primo tentativo però l’operazione fallisce con un bellissimo errore di Permission Denied: vi sembrerà impossibile, ma nemmeno root è autorizzato a creare un file nella posizione indicata dal comando.

La causa di questa anomalia sta nel fatto che ISPConfig protegge le directory con struttura

/var/www/clients/clientX/webY

impedendo a chiunque – root compreso – di crearvi file o subdirectory.

E’ sufficiente ripetere l’operazione rimuovendo temporaneamente questa limitazione per poi ripristinarla immediatamente dopo avere creato il link simbolico di cui abbiamo bisogno:

chattr -i /var/www/clients/clientX/webY
ln -s /var/www/clients/clientX/webY/home/utente_in_uso/.ssh /var/www/clients/clientX/webY/.ssh
chattr -i /var/www/clients/clientX/webY

Ora possiamo procedere con la clonazione da repository in locale mediante git clone.

Condivido
1 Commenti
  • Claudio
    Maggio 18, 2017

    un po’ criptico ma ci sono i comandi che mi servivano e quelli li capisco bene, in effetti ho avuto anche io lo stesso problema e avevo lasciato perdere ma leggendo il tuo post ho capito cosa non andava grazie

Leave a comment