Synology : installer Debian, sans risque, y monter son Volume1 (& IntrusionPrevention, Suricata)

chroot 15 août 2016

Que ce soit pour le fun ou par nécessité, comme dans ce cas, sachez qu’on peut installer Debian (en environnement chrooté donc sans risque) sur un NAS Synology. Ici sur DSM6 dernière version.

J’ai environ 70To de stockage et notamment un NAS de 25To qui sert à réceptionner “les différents trucs qu’il doit réceptionner” mais par manque de temps de motivation et comme tout n’est pas automatisé, j’ai jamais pris le temps de trier et dispatcher toutes les données. Je voyais bien la place libre régresser sur le monitoring mais avec 25To on a le temps de voir venir :)

Depuis quelques jours je m’attelle donc à faire de la place. Mais au fur et à mesure que j’avançais j’étais intrigué par l’incohérence entre les dossiers “en cours” que j’avais sous les yeux et les statistiques de stockage. A la louche il me “manquaient” 5 à 7To de données par rapport aux stats. J’y suis même allé à la calculatrice entre les différents dossiers histoire d’être certain de ne rien comprendre…

 

 

Installer Debian Chroot

Plutôt que de continuer à tout passer au crible avec df, ls et du j’ai voulu installer ncdu (via IPKG) mais ça ne fonctionnait pas. j’ai donc pris le parti, rapide, d’installer un chroot Debian via les dépôts SynoCommunity (wiki GitHub) qui permet d’installer Debian dans un dossier chrooté (sans risque de faire une boulette sur le NAS) sur Synology.

 

 

Y monter son /Volume1

Comme Debian est installé dans un environnement “à part” on n’a pas accès au /Volume1, volume de stockage par défaut d’un NAS Synology. Du coup il faut modifier le script de lancement de l’environnement Debian. Ce qui se fait très simplement en SSH, en root, avec nano.

SSH : à activer dans Panneau de Configuration / Terminal et SNMP

Root : pour passer root en SSH, sur DSM6, il faut taper sudo su et mettre le pwd du compte “Admin”

Nano : cet éditeur n’étant pas installé sur Synology il faut le faire via les paquets SynoCommunity

Et donc éditer ensuite le script de lancement du chroot :

nano /var/packages/debian-chroot/scripts/start-stop-status

Aller à la ligne # Mount if install is finished et ajouter en fin de bloc la commande pour y monter automatiquement le /Volume1

grep -q "${CHROOTTARGET}/volume1 " /volume1 || mount -o bind /volume1 ${CHROOTTARGET}/volume1

Ce qui nous donne

    # Mount if install is finished
    if [ -f ${INSTALL_DIR}/var/installed ]; then
        # Make sure we don't mount twice
        grep -q "${CHROOTTARGET}/proc " /proc/mounts || mount -t proc proc ${CHROOTTARGET}/proc
        grep -q "${CHROOTTARGET}/sys " /proc/mounts || mount -t sysfs sys ${CHROOTTARGET}/sys
        grep -q "${CHROOTTARGET}/dev " /proc/mounts || mount -o bind /dev ${CHROOTTARGET}/dev
        grep -q "${CHROOTTARGET}/dev/pts " /proc/mounts || mount -o bind /dev/pts ${CHROOTTARGET}/dev/pts
grep -q "${CHROOTTARGET}/volume1 " /volume1 || mount -o bind /volume1 ${CHROOTTARGET}/volume1

Il faut ensuite ajouter la commande de démontage à la fin du bloc # Unmount

umount ${CHROOTTARGET}/volume1

Ce qui donne

{
    # Stop running services
    ${INSTALL_DIR}/app/stop.py

    # Unmount
    umount ${CHROOTTARGET}/dev/pts
    umount ${CHROOTTARGET}/dev
    umount ${CHROOTTARGET}/sys
    umount ${CHROOTTARGET}/proc
umount ${CHROOTTARGET}/volume1
}

On enregistre (ctrl o) et quitte (ctrl x).

 

 

Lancer Debian Chroot et s’y placer

Toujours en root, on peut ensuite lancer le script de chroot Debian

/var/packages/debian-chroot/scripts/start-stop-status start

Les commandes sont très simples :

  • start : le lancer
  • stop : le stopper
  • status : voir s’il est lancé ou non
  • chroot : s’y placer en chroot (donc passer dans Debian, en root)

Du coup on peut ensuite s’y placer

/var/packages/debian-chroot/scripts/start-stop-status chroot

 

 

Installer ncdu (ou ce que vous voulez)

C’est un Debian classique. On peut donc y faire un apt-get update && apt-get upgrade histoire d’avoir un environnement à jour. Et j’ai ensuite installé ncdu.

apt-get install ncdu

 

 

Surprise :)

En utilisant ncdu, ce qui a pris un peu de temps avec 22To de données, je me suis rendu compte que le dossier @appstore faisait 5.4To !Sélection_003

Ce dossier contient les programmes installés sur le NAS, par l’utilisateur.

ash-4.3# cd /volume1/\@appstore/ && ls -l
total 100
drwxr-xr-x  4 root      root 4096 Jul  7 03:01 cronjobeditor
drwxr-xr-x  6 root      root 4096 Aug 15 15:23 debian-chroot
drwxrwxrwx  7 root      root 4096 May 20 00:30 git
drwxrwxrwx  8 root      root 4096 Apr  6 16:38 Git
drwxrwxrwx  4 root      root 4096 Apr 29 00:57 Init_3rdparty
drwxr-xr-x 13 root      root 4096 Mar 26 11:37 IntrusionPrevention
drwxrwxrwx 12 root      root 4096 Jul  7 02:59 ipkgui
drwxr-xr-x  4 root      root 4096 Jun 24  2014 java
drwxrwxrwx 11 root      root 4096 Aug  1 17:11 LogCenter
drwxrwxrwx  8 root      root 4096 Jun 10 10:09 MariaDB
drwxrwxrwx  5 root      root 4096 Mar 19 12:03 mono
drwxr-xr-x  5 root      root 4096 Aug 15 15:48 nano
drwxrwxrwx  4 root      root 4096 Mar 26 11:33 Perl
drwxrwxrwx  5 root      root 4096 Jun  6 06:41 PHP5.6
drwxrwxrwx  5 root      root 4096 Mar 26 11:33 phpBB
drwxrwxrwx  5 root      root 4096 Jun  6 06:42 phpMyAdmin
drwxrwxrwx  3 root      root 4096 Mar 26 11:34 py3k
drwxrwxrwx  7 root      root 4096 Jan 13  2016 python
drwxrwxrwx  3 root      root 4096 Jun  6 06:42 PythonModule
drwxr-xr-x  8 root      root 4096 Oct 21  2014 rkhunter
drwxrwxrwx 10 rutorrent root 4096 Apr  9 07:57 rutorrent
drwxrwxrwx  8 root      root 4096 Jun  6 06:43 StorageAnalyzer
drwxrwxrwx  5 syncthing root 4096 Jun 10 10:03 syncthing
drwxr-xr-x  8 root      root 4096 Mar 26 11:07 TextEditor
drwxrwxrwx 15 root      root 4096 Jun 10 10:06 WebStation
ash-4.3# 

En creusant encore avec ncdu je me suis alors rendu compte que le $@#! de coupable était IntrusionPrevention, plus précisément ses logs…

Sélection_004

Sélection_005

Nan mais sans déconner ! 5.4To de logs, ils sont tarés chez Syno ou quoi ?! J’ai 138151 fichiers d’alerte… pour un truc installé le 26 mars cette année.

ash-4.3# cd  /volume1/\@appstore/IntrusionPrevention/var/log/suricata/ && ls -al | wc -l
138151
ash-4.3#

Tu m’étonnes que leur programme de détection d’intrusions, basé sur la solution Suricata, est en BETA.

Pour info j’ai laissé les règles par défaut activées et on ne peut pas paramétrer la suppression des logs dans le programme. On peut fort heureusement les retirer lors de la désinstallation. Et avec 5.4To de logs je suis curieux de savoir combien de temps ça lui prend.

=> 1h sur un DSM1813+, 4Go de RAM et tous les cores à fond les ballons. Le plus simple aurait sans doute été de virer les logs à la main en SSH.

Sélection_006

Sélection_007 

 

Voilà comment, en désinstallant un programme, on peut gagner quelques To d’espace disque :)

Avant

ash-4.3# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md2         26T   23T  2.8T  90% /opt
ash-4.3# 

Après

ash-4.3# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/md2         26T   18T  7.9T  69% /opt
ash-4.3# 

 

 

 

 

 

Mots clés