Permessi di scrittura per configuration.php

i permessi nei server linuxAlcuni utenti del forum di Joomla hanno notato che non è possibile scrivere il file configuration.php, che è il file di configurazione del cms, a causa dei permessi impostati per la sola lettura. Qualcuno mi ha chiesto il senso di quello 0444.

i permessi nei server linuxIn un articolo che scrissi qualche anno fa per il forum di Joomla Italia, di cui sono uno dei moderatori, spiegai come funzionano i permessi nei sistemi linux; non voglio qui ripetere la trattazione, per cui rimando al citato articolo chi volesse approfondire l'argomento (articolo: i permessi Linux e l'hosting).

Voglio qui solo ricordare che parlare di permessi, dimenticando l'aspetto della proprietà di un file (ownership), è quanto meno superficiale.

Mi sia consentita ora una piccola imprecisione, su cui poi tornerò per chiarire.

Partendo dalla versione 1.5, Joomla, quando accede al suo file di configurazione (/configuration.php), ne imposta i permessi a 0444; lo '0' iniziale indica un numero ottale, ovvero a base 8, e ciascuna tripletta di bits indica i permessi di una singola entità. Questa impostazione, che può anche essere indicata come  r--r--r--, sta ad indicare che tutti (nell'ordine proprietario, membri del gruppo del proprietario, tutti gli utenti) hanno accesso in lettura ma nessuno in scrittura.

Ciò fa sì che qualche utente si è trovato in difficoltà a modificare il file di configurazione usando un client FTP. Infatti è possibile leggere il file per scaricarlo, ma non è possibile caricare lo stesso, dato che è marcato come non scrivibile.

La soluzione a questo problema è tanto semplice da poter essere considerata banale: basta dare al file il permesso di scrittura prima di tentare l'upload.

Questo, tipicamente, si ottiene con un click con il pulsante destro sul file ed impostando il permessi di scrittura per il proprietario (owner) e per il gruppo (group), ovvero 0664. Una volta caricato il nuovo file basta riportare i permessi al valore originario.

In realtà in diversi provider, tanto per non avere problemi di assistenza, si è scelto di far girare php e server ftp con lo stesso ID utente, quindi il più delle volte sarebbe sufficiente uno 0644 per poter modificare il file.

Tenete presente che l'assistenza è molto spesso, oltre che un costo, un vero problema e quindi i provider tentano di semplificare la vita agli utenti. Il concetto dei permessi è ignoto alla quasi totalità degli utenti: basta vedere le risposte date sul forum a tal riguardo, da se dicenti esperti, per rendersene conto.

Quando qualcuno incomincia a indicare numeri a caso, senza alcuna informazione sul server di riferimento, sappiate che, con tutta probabilità, state parlando con un incompetente che non ha mai visto un server in vita sua.

A che servono i permessi a 0444? il lato php.

A costo di dover deludere molti debbo rispondere che non servono praticamente a niente.

La prima considerazione da fare è che questo file contiene le credenziali di accesso al database e talvolta anche quelle dello ftp; forse sarebbe più utile che nessuno possa leggerlo, piuttosto che scriverlo, e quindi 0600 potrebbe, paradossalmente, essere una scelta più sicura.

Prima ho parlato di una piccola imprecisione, ora è il momento di chiarire. Una assunzione che spesso i sistemisti erroneamente fanno, è il considerare che l'utente normale sia conscio che, a livello di server, il cms di turno non esiste.

Quando si dice che Joomla imposta i permessi del file a 0444, in realtà si intende che è il PHP ad impostare i permessi a tale valore; può sembrare una precisazione capziosa, ma in realtà le implicazioni sono notevoli. Se è l'application server php ad impostare i permessi  allora qualsiasi script php, faccia o meno parte del cms, può cambiarne i permessi e scrivere al suo interno.

Se ci pensate la cosa è abbastanza evidente: quando modificate la configurazione di Joomla, il cms modifica il file di configurazione salvando al suo interno le informazioni aggiornate, ci avevate mai pensato?

Riporto la procedura di scrittura del file di configurazione:

private function writeConfigFile(JRegistry $config)
    {
        jimport('joomla.filesystem.path');
        jimport('joomla.filesystem.file');
 
        // Set the configuration file path.
        $file = JPATH_CONFIGURATION . '/configuration.php';
 
        // Get the new FTP credentials.
        $ftp = JClientHelper::getCredentials('ftp', true);
 
        // Attempt to make the file writeable if using FTP.
        if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0644'))
        {
            JError::raiseNotice('SOME_ERROR_CODE', JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTWRITABLE'));
        }
 
        // Attempt to write the configuration file as a PHP class named JConfig.
        $configuration = $config->toString('PHP', array('class' => 'JConfig', 'closingtag' => false));
        if (!JFile::write($file, $configuration))
        {
            $this->setError(JText::_('COM_CONFIG_ERROR_WRITE_FAILED'));
            return false;
        }
 
        // Attempt to make the file unwriteable if using FTP.
        if (!$ftp['enabled'] && JPath::isOwner($file) && !JPath::setPermissions($file, '0444'))
        {
            JError::raiseNotice('SOME_ERROR_CODE', JText::_('COM_CONFIG_ERROR_CONFIGURATION_PHP_NOTUNWRITABLE'));
        }
 
        return true;
    }

 

nel dettaglio, indicando solo quanto ci interessa, Joomla!, o meglio il php:

  • cambia i permessi del file per renderlo scrivibile (JPath::setPermissions() richiama chmode());
  • scrive il file;
  • ne cambia i permessi per renderlo non scrivibile.

Come vedete anche i commenti parlano di una operazione svolta solo al fine dello ftp; per php il file può essere letto e scritto, questo almeno nelle configurazioni standard.

 

A che servono i permessi a 0444? il lato ftp.

A questo punto ci si può chiedere se almeno dal punto di vista dello ftp, i citati permessi servano a qualche cosa. Nella quasi totalità dei casi è sufficiente usare la funzione di cambio dei permessi del client ftp per modificare i permessi del file, negli altri casi è sufficiente caricare un file php di una riga di codice che tramite un chmod() renda scrivibile il file.

 

È una impostazione di sicurezza?

Sulla base di quanto sopra detto si potrebbe concludere che non lo è; e, nella quasi totalità delle configurazioni, questa è la risposta esatta.

Come abbiamo visto è una condizione modificabile con estrema agevolezza, e non pare certo poter creare problemi neanche ad un hacker dilettante, il quale comunque è molto più interessato a leggere il contenuto del file che non a modificarlo.

E allora a che serve?

In realtà non lo so di certo, non ho trovato alcuna documentazione che ne facesse menzione, ma una risposta mi viene in mente... Ricordate che prima indicavo quanto l'assistenza fosse un problema?

Impedire che un utente distratto possa inavvertitamente sovrascrivere il file di configurazione, di cui ovviamente non ha copia, perdendo tutte le impostazioni e inizi a far disperare l'assistenza del provider o del forum, potrebbe essere un buon motivo.

Voi ricordatevi di effettuare spesso i back up.

 

Aggiungi commento

Please note: URL in text are not linked and user's site address is only for internal use and is not published.

Comments are human checked. All spam will be removed, so don't waste your time and, especially, mine!

Codice di sicurezza
Aggiorna