nextCloud [hacking]: Προσθήκη φακέλων ή αρχείων τοπικά (χωρίς uploading)

Σε αυτή τη δημοσίευση θα δούμε πως μπορούμε να προσθέσουμε αρχεία ή φακέλους στον nextCloud server μας τοπικά , χωρίς να είναι ανάγκη να το κάνουμε μέσω διαδικτύου (uploading).

Είναι πραγματικά ένας πολύ βολικός τρόπος όταν έχουμε φυσική πρόσβαση στον server ή ακόμη και απομακρυσμένη. Το πως θα μεταφέρουμε τα αρχεία μας στον server εξαρτάται από τη πρόσβαση που έχουμε σε αυτόν.
Μπορούμε είτε μέσω ενός USB ή εξωτερικού δίσκου (φυσική πρόσβαση), είτε μέσω του sshfs σε περίπτωση απομακρυσμένης πρόσβασης.
Σημειώνουμε εδώ ότι για τη λειτουργία του SSHFS προϋποθέτουμε τη δικτύωση μέσω LAN (τοπικού δικτύου). Σε διαφορετική περίπτωση δεν έχει νόημα η χρήση του SSHFS (πάλι θα είμαστε «δέσμιοι» της συνήθως πενιχρής ταχύτητας uploading).

Το θέμα μας εδώ είναι το ΠΩΣ θα αποφύγουμε να ανεβάσουμε (uploading) έναν μεγάλο όγκο αρχείων. Αφού τα αρχεία τα έχουμε ήδη στη κατοχή μας, κάτι τέτοιο θέλουμε να το αποφύγουμε για προφανείς λόγους.

Άλλος ένας λόγος που το κάνουμε είναι, επειδή μπορούμε.
Θα δούμε στη πράξη το Truncate του MySQL Table που είναι «υπεύθυνο» για το caching των αρχείων. Αυτό ίσως μας εξυπηρετήσει και σε άλλες περιπτώσεις (πχ corrupted αρχεία …κλπ).

Ο παρακάτω τρόπος έχει δοκιμαστεί σε nextCloud 11 και LAMP σε Ubuntu Server 16.04 LTS.

sshfs

Πάμε να δούμε όμως τον τρόπο μεταφοράς αρχείων μέσω sshfs. Μέσω USB ή εξωτερικού σκληρού δίσκου νομίζω δε χρειάζεται να αναφέρουμε κάτι.
Κάνουμε πρώτα εγκατάσταση το sshfs (στον υπολογιστή που έχουμε τα private κλειδιά SSH, όχι στον server), σε Ubuntu, με τη παρακάτω εντολή.

 sudo apt-get install sshfs 

Εδώ φυσικά υποθέτουμε ότι έχουμε ρυθμίσει σωστά τη πρόσβαση στον server μας μέσω ssh. Υποθέτουμε επίσης ότι το ssh κλειδί που αντιστοιχεί στον nextCloud Server μας το έχουμε ονομάσει, id_rsa_nextcloud

Δημιουργούμε έναν κατάλογο μέσα στον κατάλογο χρήστη μας.

 mkdir nextcloud-server 

Δίνουμε τώρα την εντολή για τη προσάρτηση του SSHFS.

 sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa_nextcloud username@xxx.xxx.x.xxx:/ /home/$user/nextcloud-server/ 

Αντικαθιστούμε το username@xxx.xxx.x.xxx με το αντίστοιχο δικό μας, όπως και το id_rsa_nextcloud κλειδί με το σωστό.
Εάν όλα πάνε καλά, θα δούμε ότι έχει γίνει mount το σύστημα αρχείων του server μας στον κατάλογο nextcloud-server.
Στη περίπτωση που επιστρέψει μήνυμα λάθους σχετικό με το allow_other, κάνουμε μια επεξεργασία στο αρχείο /etc/fuse.conf και αφαιρούμε τη δίεση μπροστά από το user_allow_other.

Μπορούμε τώρα να μεταφέρουμε τα αρχεία μας στη τοποθεσία /var/www/nextcloud/data/USERNAME/files/
Το USERNAME είναι το όνομα χρήστη στον nextCloud server.

Permissions και MySQL Truncate Table

Η παραπάνω διαδικασία εξασφαλίζει τη φυσική μεταφορά των αρχείων στον server μας. Το nextCloud όμως δεν βλέπει τίποτα από αυτά τα αρχεία-φακέλους που έχουμε μεταφέρει.
Για να γίνει αυτό θα πρέπει να καθαρίσουμε (truncate) ένα συγκεκριμένο table στην MySQL και παρακάτω θα δούμε πως.
Είναι επίσης σημαντικό να δώσουμε τα κατάλληλα δικαιώματα στους φακέλους και τα αρχεία, διαφορετικά θα έχουμε πρόβλημα επεξεργασίας – διαγραφής …κλπ.

nextCloud maintenance mode

Πριν προχωρήσουμε, είναι καλό να αποσυνδεθούμε από το Web GUI (εάν είμαστε συνδεδεμένοι) και να θέσουμε το nextCloud σε maintenance mode.

 sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on 

Δικαιώματα φακέλων – αρχείων

Η παρακάτω εντολή θα αλλάξει τα δικαιώματα read-write-execute στο φάκελο που μόλις προσθέσαμε. Ας υποθέσουμε ότι λέγεται myfolder.

 sudo chmod 755 /var/www/nextcloud/data/USERNAME/files/myfolder 

Αλλάζουμε τα read-write-execute σε όλα τα αρχεία μέσα σε αυτόν το φάκελο:

 sudo chmod -R 644 /var/www/nextcloud/data/USERNAME/files/myfolder/* 

Επίσης, αλλάζουμε και τον owner στον σωστό, στη περίπτωση του apache:

 sudo chown -R www-data:www-data /var/www/nextcloud/data/USERNAME/files/myfolder/ 

Εάν μιλάμε για τη περίπτωση Φακέλων – υποφακέλων – πολλών διαφορετικών αρχείων σε διαφορετικούς φακέλους, τότε βολεύουν ίσως καλύτερα οι παρακάτω εντολές:

Για αλλαγή δικαιωμάτων σε όλα τα αρχεία κάτω από τον φάκελο myfolder (και υποφακέλους) σε 644

 find /var/www/nextcloud/data/USERNAME/files/myfolder/ -type f -exec chmod 644 {} \; 

Για αλλαγή δικαιωμάτων σε όλους τους φακέλους-υποφακέλους κάτω από τον φάκελο myfolder σε 755

 find /var/www/nextcloud/data/USERNAME/files/myfolder/ -type d -exec chmod 755 {} \; 

MySQL Truncate Table

Το τελευταίο βήμα είναι να μηδενίσουμε ένα συγκεκριμένο Table στην database που είχαμε δημιουργήσει όταν φτιάξαμε τον nextCloud Server.

 mysql -u root -p 
 SHOW DATABASES; 

για να δούμε τη λίστα.


+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloudb         |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

H database που έχουμε δημιουργήσει στο παράδειγμά μας, είναι η nextcloudb και θα χρησιμοποιήσουμε αυτή.

 USE nextcloudb 
 SHOW TABLES; 

Θα πρέπει να δούμε ένα κατεβατό από Tables.


+-----------------------------+
| oc_accounts                 |
| oc_activity                 |
| oc_activity_mq              |
| oc_addressbookchanges       |
| oc_addressbooks             |
| oc_admin_sections           |
| oc_admin_settings           |
| oc_appconfig                |
| oc_authtoken                |
| oc_bruteforce_attempts      |
| oc_calendarchanges          |
| oc_calendarobjects          |
| oc_calendars                |
| oc_calendarsubscriptions    |
| oc_cards                    |
| oc_cards_properties         |
| oc_comments                 |
| oc_comments_read_markers    |
| oc_credentials              |
| oc_dav_shares               |
| oc_federated_reshares       |
| oc_file_locks               |
| oc_filecache               |
| oc_files_trash              |
| oc_flow_checks              |
| oc_flow_operations          |
+-----------------------------+

Το Table που μας ενδιαφέρει είναι το oc_filecache.

 TRUNCATE TABLE oc_filecache; 

Βγαίνουμε από το maintenance mode και τρέχουμε μια εντολή για scan όλων των νέων αρχείων – φακέλων που έχουμε προσθέσει.

 sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off 
 sudo -u www-data php /var/www/nextcloud/occ files:scan --all -v 

Όταν συνδεθούμε στο λογαριασμό μας θα πρέπει να δούμε τους φακέλους όλα τα αρχεία που προσθέσαμε χειροκίνητα.
Θα χρειαστεί κάποιος χρόνος για να μετρήσει το μέγεθος, σε κάποια από αυτά δηλαδή ίσως βλέπουμε το μήνυμα pending σε ότι αφορά το μέγεθος.

Ίσως φαίνεται λίγο πολύπλοκη διαδικασία, αλλά αφενός μια φορά θα τη κάνουμε, αφετέρου δε βρήκα άλλο τρόπο που να δουλεύει σωστά.
Επίσης, μπορούμε να χρησιμοποιήσουμε αυτό τον τρόπο και ως workaround αυτού του bug, μέχρι αυτό να διορθωθεί.

Συμβάλετε κι εσείς με ένα σχόλιο

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s