The_DoubleU schreef op zaterdag 12 januari 2008 @ 17:14:
Debian Chroot via USB op CH3SNAS.
Je kan een Debian chroot installeren op de CH3SNAS hierdoor kan je verschillende programma's installeren die normaal niet mogelijk zijn op deze NAS. Mocht je Debian op een van je schijven in de NAS zetten dan heeft dat als nadeel dat spindown niet meer werkt. Spindown schrijft namelijk een regel in je log, die veroorzaakt weer een spinup. Een oplossing hiervoor is om logging uit te zetten of naar /dev/null te schrijven. Een andere oplossing is om alles op een USB key te zetten. Nadeel is dat je dan geen printer meer kan aansluiten, maar dit is op te lossen d.m.v. een USB hub.
Veel info over CH3SNAS hacking is te vinden op
http://wiki.dns323.info/ het merendeel van de informatie in deze how-to is gebaseerd op informatie van deze website.
Op- of aanmerkingen altijd welkom. Zet het in dit topic of doe een PM en ik zal deze post aanpassen.
Dan alvast mijn excuses voor deze grote lap tekst.
update:
- dropbear installatie i.p.v SSH
- chroot command toegevoegd als je fonz fun_plug gebruikt.
- GPG errors tijdens apt-get update
!!Waarschuwing!!
In principe kan er niks gebeuren met de data die op je NAS staat tijdens het uitvoeren van deze how-to maar een ongeluk zit in een klein hoekje. Maak daarom eerst een backup of begin met een lege schijf.
Telnet d.m.v. funplug.
Funplug is een bestand wat gelezen word als de CH3SNAS gestart wordt. In dit bestand kan je commando's schrijven die dan tijdens de start uitgevoerd worden. Zo is het dus mogelijk om bijv. een telnet deamon te starten.
1. Ga naar de CH3SNAS configuratie pagina en zet de FTP server aan. (Advanced -> FTP Server -> Enable)
2. Geef een gebruiker toegang aan "Volume_1"
3.
Download utelnet
Pak dit bestand uit.
!!Windows gebruikers gebruik geen winzip maar winrar!!
4. Upload de bestanden met FTP. Ik doe dit in een terminal maar je kan ook een FTP-GUI gebruiken.
Wat FTP commando's.
ls = list, geeft de inhoud weer van een directory
cd <dir> = change directory
mkdir <dir> = make directory
put <file> = upload the file naar de nas
put <local file> <remote file> = upload the file naar de nas maar geef het een andere naam
bye = verbreek verbinding
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| G5:~/Download/utelnet-kit willem$ ftp 192.168.200.3
ftp> ls
drwxrwxrwx 7 501 501 4096 Jan 4 07:41 Home Movies
drwxrwxrwx 5 501 501 4096 Jan 6 23:20 Media
drwxrwxrwx 9 501 501 4096 Jan 2 18:40 Photo
drwxrwxrwx 2 501 501 4096 Jan 2 15:07 Silke
drwxrwxrwx 5 501 501 4096 Jan 7 20:12 Usenet
ftp> put fun_plug
ftp> put starttelnet.sh
ftp> mkdir lnx_bin
ftp> put lnx_bin/busybox3 lnx_bin/busybox3
ftp> put lnx_bin/utelnetd lnx_bin/utelnetd
ftp> ls
drwxrwxrwx 7 501 501 4096 Jan 4 07:41 Home Movies
drwxrwxrwx 5 501 501 4096 Jan 6 23:20 Media
drwxrwxrwx 9 501 501 4096 Jan 2 18:40 Photo
drwxrwxrwx 2 501 501 4096 Jan 2 15:07 Silke
drwxrwxrwx 5 501 501 4096 Jan 7 20:12 Usenet
-rwxrwxrwx 1 willem 503 183 Jan 12 09:39 fun_plug
drwxrwxrwx 2 willem 503 4096 Jan 12 09:41 lnx_bin
-rwxrwxrwx 1 willem 503 351 Jan 12 09:39 starttelnet.sh
ftp> cd lnx_bin
ftp> ls
-rwxrwxrwx 1 willem 503 891228 Jan 12 09:40 busybox3
-rwxrwxrwx 1 willem 503 56425 Jan 12 09:41 utelnetd |
Je moet nu 2 bestanden op Volume_1 hebben "fun_plug", "starttelnet.sh" en een directory "lnx_bin".
In de directory weer 2 bestanden "busybox3" en "utelnetd"
Controleer of alle bestanden execute rechten hebben. Je kan dit zien aan de letter die voor een bestand staan. -rwxrwxrwx = Read, Write, eXecute voor eigenaar, groep, anderen. Meer info kan je biijv
hier vinden.
5. Reboot - ga naar de NAS admin pagina. (Tools -> System -> Restart)
6. Als je alles goed gedaan hebt heb je nu telnet toegang tot de nas.
code:
1
2
3
4
5
6
7
8
| G5:/ willem$ telnet 192.168.200.3
Trying 192.168.200.3...
Connected to 192.168.200.3.
Escape character is '^]'.
stdin, stdout, etderr: 0 1 2
BusyBox v1.2.1 (2006.10.30-10:27+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
# |
USB key aansluiten
Nu je toegang hebt tot telnet kan je de USB key aansluiten. De CH3SNAS heeft geen kernel module hiervoor dus die moeten je zelf laden tijdens het starten van de NAS. Dit kan door het fun_plug script aan te passen.
1. Start een telnet sessie en ga naar de directory /mnt/HD_a2/lnx_bin
code:
1
2
3
| # cd /mnt/HD_a2/lnx_bin
# ls
busybox3 sh utelnetd |
2. Download de kernel usb-storage module
code:
1
2
3
| # wget http://www.domaigne.com/download/dns-323/usb-storage.ko
# ls
busybox3 sh usb-storage.ko utelnetd |
3. Laad de module
4. Sluit de USB key aan op de NAS. Om te kijken of alles gelukt is gebruik je het commando "dmesg". Je moet dan zoiets te zien krijgen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| Initializing USB Mass Storage driver...
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
usb 1-1: new high speed USB device using ehci_platform and address 2
scsi2 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 2
usb-storage: waiting for device to settle before scanning
Vendor: Model: USB DISK 2.0 Rev: PMAP
Type: Direct-Access ANSI SCSI revision: 00
SCSI device sdb: 2015232 512-byte hdwr sectors (1032 MB)
sdb: Write Protect is off
sdb: Mode Sense: 23 00 00 00
sdb: assuming drive cache: write through
SCSI device sdb: 2015232 512-byte hdwr sectors (1032 MB)
sdb: Write Protect is off
sdb: Mode Sense: 23 00 00 00
sdb: assuming drive cache: write through
sdb: sdb1
Attached scsi removable disk sdb at scsi2, channel 0, id 0, lun 0
Attached scsi generic sg1 at scsi2, channel 0, id 0, lun 0, type 0
usb-storage: device scan complete |
!! HD namen !!
Let goed op wat de naam is van je USB key. In mijn geval is dit "sdb" omdat ik maar 1 HD in mijn NAS heb.
Mocht je 2 HD's hebben dan zal de USB key waarschijnlijk "sdc" heten.
1 schijf config
sda = NAS HD1
sdb = USB Key
2 schijf config
sda = NAS HD1
sdb = NAS HD2
sdc = USB Key
sdb1 is de partitie op de USB key, het kan zijn dat je meerdere partities hebt op jouw USB key dan krijg je zoiets als sdb1, sdb2, etc.
5. Formatteren van je USB key.
Ik ga ervan uit dat de meeste USB key's een fat32 systeem hebben, dus je moet de USB key formatteren naar EXT2 formaat met het command mke2fs /dev/sdXY
X = schijf letter
Y = partitie nummer
!!!Let op dat je de juiste naam invult anders bestaat de kans dat je alles wist van een van je HD's!!!!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # mke2fs /dev/sdb1
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
125952 inodes, 251900 blocks
12595 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
exit status 0
success |
De USB key is nu klaar voor gebruik
6. Kernel module laden en USB key mounten met fun_plug script.
Ik gebruik de vi editor.
De editor heeft 2 modes een edit mode en command mode.
Om in edit mode te komen gebruik je i voor insert or a voor append.
[ESC] brengt je terug naar command mode
In command mode kan je het script bewaren.
:qw = quit, write (Sluit af en bewaren)
:wq = write, quit (Sluit af en bewaren) *Sorry voor de verwarring - ik gebruik deze 2 altijd door elkaar*
:q = quit
:q! = quit en bewaar veranderingen niet.
Je krijgt nu het fun_plug script te zien.
code:
1
2
3
4
5
6
7
8
9
| dmesg > /mnt/HD_a2/dmesg.out
/mnt/HD_a2/nc -l -p 10000 -e /bin/sh &
mkdir /mnt/HD_a2/lnx_bin/
cd /mnt/HD_a2/lnx_bin/
/mnt/HD_a2/starttelnet.sh
export PATH=$PATH:/mnt/HD_a2/lnx_bin/ |
Mount script toevoegen
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| dmesg > /mnt/HD_a2/dmesg.out
/mnt/HD_a2/nc -l -p 10000 -e /bin/sh &
mkdir /mnt/HD_a2/lnx_bin/
cd /mnt/HD_a2/lnx_bin/
/mnt/HD_a2/starttelnet.sh
export PATH=$PATH:/mnt/HD_a2/lnx_bin/
insmod /mnt/HD_a2/lnx_bin/usb-storage.ko
mkdir /mnt/usb
#sleep for 15 sec to load the module
sleep 15
mount /dev/sdb1 /mnt/usb |
Bewaren met [ESC] :wq
8. Reboot de NAS
Na de herstart kan je kijken of de USB key geladen is d.m.v het commando "mount"
code:
1
2
3
4
5
6
7
8
| # mount
%root% on / type unknown (rw)
proc on /proc type proc (rw)
/image.cfs on /sys/crfs type cramfs (rw,loop=/dev/loop0)
/dev/sda2 on /mnt/HD_a2 type ext2 (rw,usrquota,grpquota)
/dev/sda4 on /mnt/HD_a4 type ext2 (rw)
none on /proc/bus/usb type usbfs (rw)
/dev/sdb1 on /mnt/usb type ext2 (rw) |
Debian Chroot.
De USB key is nu klaar voor een Debian chroot.
De instructies in de
wiki zijn erg verwarrend en werken niet voor mij.
Het is beter om zelf een image te maken. Gebruik hiervoor een debian/ubuntu machine en volg de instructies in het wiki onderdeel "Create a minimal image"
Ik heb een Mac dus kan dit helaas niet doen maar er is wel een oplossing voor.
1. Download een minimal debian image, in deze how-to gebruik ik Etch 4.0
code:
1
2
| # cd /mnt/usb
# wget http://dev.skcserver.de/dns323/etch.tar |
2. Tar uitpakken
code:
1
| # /mnt/HD_a2/lnx_bin/busybox3 tar -xf etch.tar |
3. Chroot Debian
code:
1
2
| # /mnt/HD_a2/lnx_bin/busybox3 chroot etch /bin/bash
root@CH3SNAS:/# |
Je zit nu in een Debian chroot en kan nu zelf een minimale image aanmaken.
4. Eerst resolv.conf aanpassen.
In de resolv.conf file zet het ip address van je nameserver, router, etc. In mij geval is dat 192.168.200.1
code:
1
2
| search wan
nameserver 192.168.200.1 |
Bewaren met [ESC] :wq
5. sourcelist aanpassen
code:
1
| root@CH3SNAS:/# vi /etc/apt/sources.list.d/etch.list |
Voeg debian servers toe. Een lijst met servers kan je
hier vinden.
Ik gebruik ftp servers in Ierland maar er zijn ook wel servers in Nederland of België te vinden.
code:
1
2
3
| deb ftp://ftp.ie.debian.org/debian stable main contrib non-free
deb ftp://ftp.ie.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free |
Bewaren met [ESC] :wq
6. update apt-get
code:
1
| root@CH3SNAS:/# apt-get update |
Mocht je GPG errors krijgen doe dan het volgende. Let op dat je de juiste key invult en niet die uit het voorbeeld!
[...]
code:
1
2
3
4
| apt-get install debian-archive-keyring
gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F1D53D8C4F368D5D
gpg --armor --export F1D53D8C4F368D5D | apt-key add -
apt-get update |
Herhaal deze stap voor elke GPG key die niet gevonden wordt.
7. install cdebootstrap
code:
1
| root@CH3SNAS:/# apt-get install cdebootstrap |
8. Image maken
code:
1
| root@CH3SNAS:/# cdebootstrap -aarm etch etch ftp://ftp.ie.debian.org/debian |
9. wachten
10. Maak een tar van de etch directory.
code:
1
| root@CH3SNAS:/# tar cf etch.tar etch |
11. Exit chroot
12. Als het goed is ben je nu weer terug in je USB key.
Hierin staat een etch directory en een etch.tar. Deze etch.tar is de versie die gedownload is en kan weg.
code:
1
2
3
4
5
| # pwd
/mnt/usb
# ls
etch etch.tar lost+found
# rm etch.tar |
13. Kopieer de tar die je zelf gemaakt hebt naar de root van de USB key
code:
1
| # cp etch/etch.tar etch.tar |
14. Delete de etch directory
15. Etch.tar uitpakken
code:
1
| # /mnt/HD_a2/lnx_bin/busybox3 tar -xf etch.tar |
16. Chroot de zelfgemaakte Debian image
code:
1
2
| # /mnt/HD_a2/lnx_bin/busybox3 chroot etch /bin/bash
root@CH3SNAS:/# |
17. Repareer kapotte deb packages, mochten die er zijn. (Ik had ze niet)
code:
1
2
3
| dpkg --force-all -i dpkg*deb
dpkg --force-all -i libc6*deb
dpkg -iGREB . |
18. Update resource list - gebruik weer servers die bij jou in de buurt staan.
code:
1
2
3
4
5
| root@CH3SNAS:/# vi /etc/apt/sources.list
deb ftp://ftp.ie.debian.org/debian stable main contrib non-free
deb ftp://ftp.ie.debian.org/debian-non-US stable/non-US main contrib non-free
deb http://security.debian.org stable/updates main contrib non-free |
19. Update of maak een nieuwe /etc/resolv.conf aan. (Ik had geen resolv.conf en moest het zelf maken)
Gebruik je eigen nameserver.
code:
1
2
| search wan
nameserver 192.168.200.1 |
20.Maak een host file aan.
Zet daarin 127.0.0.1 localhost en op een nieuwe regel het ip address van je NAS en de hostname.
bijv.
code:
1
2
| 127.0.0.1 localhost
192.168.200.3 CH3SNAS |
Afsluiten met [ESC] :wq
21. Update apt-get
code:
1
| root@CH3SNAS:/# apt-get update |
22. Upgrade debian
code:
1
| root@CH3SNAS:/# apt-get dist-upgrade |
23. Installeer SSH of Dropbear
Dropbear is een lichtgewicht SSH server/client en is misschien beter voor de NAS dan SSH. Het gebruikt minder geheugen maar support alleen authenticatie via public RSA keys. Het is mij niet gelukt om OpenSSH of DS public keys aan de praat te krijgen.
Dank aan
UTMachine voor deze tip.
SSH install:
code:
1
| root@CH3SNAS:/# apt-get install ssh |
Dropbear install:
code:
1
| root@CH3SNAS:/# apt-get install dropbear |
Dropbear maakt gebruik van /dev/random. Helaas is die niet aanwezig op de NAS en moet je die eerst maken.
Daarna moet je serverkeys maken. - Dit is niet nodig als je SSH gebruikt!
code:
1
2
3
| root@CH3SNAS:/# mknod /dev/random c 1 8
root@CH3SNAS:/# dropbearkey -t rsa -f dropbear_rsa_host_key
root@CH3SNAS:/# dropbearkey -t dss -f dropbear_dss_host_key |
De debian chroot is nu klaar maar er moeten nog een paar dingen gebeuren.
1 Root passwoord
code:
1
2
3
4
| root@CH3SNAS:/# passwd root
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully |
2. User aanmaken
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| root@CH3SNAS:/# adduser willem
Adding user `willem' ...
Adding new group `willem' (1000) ...
Adding new user `willem' (1000) with group `willem' ...
Creating home directory `/home/willem' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for willem
Enter the new value, or press ENTER for the default
Full Name []: Willem Gerritsen
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y |
3. Linuxrc file maken.
De linuxrc file wordt uitgevoerd tijdens de debian chroot. Hier in kan je verschillende programma starten.
Mijn linuxrc file
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| #!/bin/sh
# syslog
/etc/init.d/sysklogd start
/etc/init.d/klogd start
# Makedev
/etc/init.d/makedev start
# PTYs
cd /dev/
MAKEDEV ptyp
# CRON
/etc/init.d/atd start
/etc/init.d/cron start
# INETD
/etc/init.d/inetd start
# Remove no login
/etc/init.d/rmnologin stop
# SSH of Dropbear
# Voor SSH gebruik de sectie SSH. Dropbear gebruik sectie Dropbear
# SSH
#/etc/init.d/ssh start >> /var/log/ssh.log 2>&1
# Dropbear
# Dropbear gebruikt /dev/random, deze moet eerst aangemaakt worden.
# Slaap voor 10 sec, als dropbear direct gestart wordt dan is /dev/random nog niet beschikbaar
mknod /dev/random c 1 8
sleep 10
/etc/init.d/dropbear start >> /var/log/drop.log 2>&1 |
Deze file komt in de root directory (/mnt/usb/etch/linuxrc) te staan van de Debian chroot en moet bepaalde rechten hebben. Dit doe je met het commando
code:
1
| root@CH3SNAS:/# chmod 755 linuxrc |
4. Debian chrooten tijdens start up m.b.v. funplug
De funplug indeling ziet er zo uit.
Eerst USB key mounten.
Dan Telnet starten -> Als het chrooten werkt en ssh werkt dan kan je telnet uitzetten in het funplug script.
Directories mounten
Debian chroot starten
Mijn fun_plug script, het kan zijn dat directories anders zijn, dit moet je aanpassen zodat het overeen komt met jouw setup.
Heb je een 2e HD in de NAS dan is de mount point voor deze schijf /mnt/HD_b2
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| #!/bin/sh
# Mount USB Key
insmod /mnt/HD_a2/lnx_bin/usb-storage.ko
mkdir /mnt/usb
#sleep for 15 sec to load the module
sleep 15
mount /dev/sdb1 /mnt/usb
# Schijven opzet
# Root Disk1
export DISK1=/mnt/HD_a2
# Root USB
export USB=/mnt/usb
export PATH=$PATH:$DISK1/lnx_bin:
cd $DISK1
#Start Telnet - Kan weg als SSH werkt
./starttelnet.sh
# Bind mount disk1
mkdir $USB/etch/$DISK1
mount --bind $DISK1 $USB/etch/$DISK1
# Bind mount rootfs
mkdir $USB/etch/mnt/root
mount --bind / $USB/etch/mnt/root
# Bind mount etch/dev
mkdir $USB/etch/dev
mount --bind /dev $USB/etch/dev
# Bind mount etch/sys
mkdir $USB/etch/sys
mkdir $USB/etch/sys/crfs
mount --bind /sys $USB/etch/sys
mount --bind /sys/crfs $USB/etch/sys/crfs
# Bind mount etch/web
mkdir $USB/etch/web
mount --bind /web $USB/etch/web
# Bind mount etch/proc
mkdir $USB/etch/proc
mount --bind /proc $USB/etch/proc
#
# Mounts
cp -f /proc/mounts $USB/etch/etc/mtab
busybox3 rm -f $USB/etch/etc/fstab
busybox3 touch $USB/etch/etc/fstab
busybox3 chroot $USB/etch ./linuxrc |
Update:
Bovenstaand chroot command (busybox3 chroot $USB/etch ./linuxrc) werkt alleen met de fun_plug in deze how-to. Maak je gebruik van de
Fonz fun_plug dan moet het volgende command gebruiken. Met dank aan
UTMachine
code:
1
2
3
| env --unset=FUNPLUGDIR --unset=ETCDIR --unset=LIBDIR --unset=LD_LIBRARY_PATH \
--unset=LOGDIR --unset=LOGFILE --unset=BINDIR PATH=/usr/bin:/bin:/usr/sbin:/sbin \
$BINDIR/chroot /mnt/HD_usb1/etch /linuxrc |
Vervang HD_usb1 met de locatie van jouw USB schijf!
Geef het fun_plug script ook 755 rechten
Reboot de NAS.
Als alles goed gegaan is moet je nu een ssh verbinding kunnen maken met je NAS.
code:
1
2
3
4
5
6
7
8
9
| G5:/ willem$ ssh 192.168.200.3
willem@192.168.200.3's password:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Jan 12 15:36:10 2008 from 192.168.200.4
willem@CH3SNAS:~$ |
Gefeleciteerd!
Je hebt nu toegang tot een Debian chroot en nu kan je via apt-get verschillende programma's installeren. Zoals Firefly, SABnzbd+, etc.
Bestanden die op de HD staan kan je vinden onder /mnt/HD_a2 en /mnt/HD_b2