Nextcloud – Datenpartition erweitern

Problem

Da über die Zeit langsam der Speicherplatz für die Nextcloud zur neige geht sollte der Server aufgestockt werden.
Um die Datenstruktur der Nextcloud zu erweitern sollen symlinks aus dem Nutzerverzeichnissen auf weiteren freien Speicherplatz zeigen.

Da das datenverzeichnis der Nextcloud sowieso bereits über einen Symlink bereitgestellt wird sollte das auch kaskadierend funktionieren.

Nach der Einrichtung tauchte allerdings folgender Fehler auf:

realpath(): openbasedir restriction in effect. File(/mnt/externalHDD/1tb/testuser/files) is not within the allowed path(s): (/var/www:/tmp/:/var/nextclouddata:/dev/urandom:/proc/meminfo) at /var/www/nextcloud/lib/private/Files/Storage/Local.php#393" open_basedir restriction in effect. File(/) is not within the allowed path(s):

Nach dem Fehler suchen:

        public function getSourcePath($path) {                 if (Filesystem::isFileBlacklisted($path)) {                         throw new ForbiddenException('Invalid path', false);                 }                 $fullPath = $this->datadir . $path;                 $currentPath = $path; ---->                if ($this->allowSymlinks || $currentPath === '') {                         return $fullPath;                 }                 $pathToResolve = $fullPath; ---->                $realPath = realpath($pathToResolve);                 while ($realPath === false) { // for non existing files check the parent directory                         $currentPath = dirname($currentPath);                         if ($currentPath === '' || $currentPath === '.') {                                 return $fullPath;                         }                         $realPath = realpath($this->datadir . $currentPath);                 }                 if ($realPath) {                         $realPath = $realPath . '/';                 }                 if (substr($realPath, 0, $this->dataDirLength) === $this->realDataDir) {                         return $fullPath;                 }                 \OCP\Util::writeLog('core', "Following symlinks is not allowed ('$fullPath' -> '$realPath' not inside '{$this->realDataDir}')", ILogger::ERROR);                 throw new ForbiddenException('Following symlinks is not allowed', false);         }

In der selben Datei findet man auch diese auffällige Variable

protected $allowSymlinks = true;/*changed from false to true because of testuser symlink test*/

Diese wurde durch den commit https://github.com/nextcloud/server/commit/7b1b723e5b04173409117aca1f7e76bed5762d9f hinzugefügt und soll die Verwendung von smylinks verbieten bzw. erlauben.

Nach einem Testlauf inkl restart von NGINX und PHP war kein Unterschied zu bemerken.

Um für die Testzwecke einen aussagekräftigen Log zu bekommen habe ich zwischenzeitlich das Loglevel in der /nextclout/config/config.php auf „0“ gesetzt

  'updater.release.channel' => 'beta', ---->  'loglevel' => 2,   'mail_smtpmode' => 'smtp',

In der Dokumentation findet man eine Übersicht der verschiedenen Level

/**  * Loglevel to start logging at. Valid values are: 0 = Debug, 1 = Info, 2 =  * Warning, 3 = Error, and 4 = Fatal. The default value is Warning.  *  * Defaults to ``2``  */

https://www.php.net/manual/de/function.realpath.php

https://www.php.net/manual/en/ini.core.php#ini.open-basedir

Dieser Sourcecode führte mich zu den PHP Einstellungen (php-fpm)

; open_basedir, if set, limits all file operations to the defined directory ; and below.  This directive makes most sense if used in a per-directory ; or per-virtualhost web server configuration file. ; Note: disables the realpath cache ; http://php.net/open-basedir open_basedir = /var/www/:/tmp/:/var/nextcloud_data/

nach einem Neustart mit

sudo service php7.3-fpm restart

blieb der Fehler allerdings erhalten

Nach weiterer Recherche über die Nextcloud config.php (

Symbolischen Link erstellen

https://wiki.ubuntuusers.de/ln/

ln -s /path/to/testuser/ testuser

Lösung

Die NGINX Konfiguration der Nextcloud spezifiziert nochmals welche PHP Parameter bei einem Seitenaufruf erlaubt wird und welcher nicht.

fastcgi_param PHP_VALUE "open_basedir=/var/www:/tmp/:/var/nextcloud_data:/dev/urandom:/proc/meminfo:/mnt/externalHDD/1tb/testuser                                 upload_max_filesize = 10G                                 post_max_size = 10G                                 max_execution_time = 3600                                 output_buffering = off";

Nach neuen Files suchen

sudo -u www-data php console.php files:scan --all

Eine Überprüfung nach neuen Dateiversionen kann auch standardmäßig aktiviert werden.
Dies ist nützlich falls neben der Nextcloud instanz ebenfalls andere Funktionen auf den Speicher zugreifen (z.B. ein paralleler SMB Share im eigenen Netzwerk).
Hier der zugehörige Ausschnitt aus der Dokumentation /var/www/nextcloud/config/config.sample.php

/**  * Specifies how often the local filesystem (the Nextcloud data/ directory, and  * NFS mounts in data/) is checked for changes made outside Nextcloud. This  * does not apply to external storages.  *  * 0 -> Never check the filesystem for outside changes, provides a performance  * increase when it's certain that no changes are made directly to the  * filesystem  *  * 1 -> Check each file or folder at most once per request, recommended for  * general use if outside changes might happen.  *  * Defaults to ``0``  */ 'filesystem_check_changes' => 0,

Diskussionen / Recherche

Eintrag in der englischen Nextcloud community bzgl. Symlinks im „data“ Ordner.
Die Diskussion startete 2016, der letzte Post war im Okt 2019, somit noch etwas aktuell:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.