Difference between revisions of "SFTP chroot + rsync"

From HoerupWiki
Jump to: navigation, search
(SSH Authorized Keys)
(Opret chroot miljø med bash og rsync)
 
(32 intermediate revisions by 2 users not shown)
Line 1: Line 1:
''af Tommy d. 18. feb.''
+
'' - En del af [[Tommys Backup Projekt]]''
  
 
ChrootDirectory PLUS et traditionelt chroot. - en lyn-guide, nej nok nærmere notater.
 
ChrootDirectory PLUS et traditionelt chroot. - en lyn-guide, nej nok nærmere notater.
  
Lavet fordi jeg skulle bruge en backup server som kunne modtage backups via rsync og man kunne hente filerne ned igen via [[FileZilla]].
+
Lavet fordi jeg skulle bruge en backup server som kunne modtage backups via rsync eller sftp og man kunne hente filerne ned igen via FileZilla (http://filezilla-project.org/).
 +
 
 +
Ekstra : Disk skalering med resize2fs.
  
 
==Server Opsætning==
 
==Server Opsætning==
 
===SSH server===
 
===SSH server===
'''/etc/ssh/sshd_config''':
+
Installer ssh-server og rsync
 +
 
 +
'''/etc/ssh/sshd_config'''
 
  #Subsystem sftp /usr/lib/openssh/sftp-server
 
  #Subsystem sftp /usr/lib/openssh/sftp-server
 
  Subsystem sftp internal-sftp
 
  Subsystem sftp internal-sftp
Line 18: Line 22:
  
 
Herfra skal alle homefolders både ha root som owner og group for at virke.
 
Herfra skal alle homefolders både ha root som owner og group for at virke.
 +
HUSK ! - En Match -regl kører til slutningen af filen eller til ny match, derfor smid den nederst i filen
  
 
===Klargør gruppe===
 
===Klargør gruppe===
Line 24: Line 29:
 
===Opret bruger===
 
===Opret bruger===
 
  adduser user01
 
  adduser user01
  addgroup sftponly
+
  addgroup user01 sftponly
 
  chown root:root /home/user01
 
  chown root:root /home/user01
 +
usermod -d / user01
 +
 +
Sidste kommando retter etc/passwd så brugerens home-dir er /, man bliver nemlig smidt til home-dir EFTER man er chrooted. Og derefter er / ikke system-root, men chrooted-folder, altså /home/user01/
  
 
===Opret chroot miljø med bash og rsync===
 
===Opret chroot miljø med bash og rsync===
 +
Debian 7 64bit, multiarch:
 
  mkdir /home/user01/bin
 
  mkdir /home/user01/bin
 
  cp /usr/bin/rsync /home/user01/bin/
 
  cp /usr/bin/rsync /home/user01/bin/
 
  cp /bin/bash /home/user01/bin/
 
  cp /bin/bash /home/user01/bin/
 
+
  mkdir /home/user01/lib
+
  mkdir -p /home/user01/lib/x86_64-linux-gnu
  cp /lib/libncurses.so.5 /home/user01/lib/
+
  cp /lib/x86_64-linux-gnu/libacl.so.1 /home/user01/lib/x86_64-linux-gnu/libacl.so.1
  cp /lib/libdl.so.2 /home/user01/lib/
+
  cp /lib/x86_64-linux-gnu/libpopt.so.0 /home/user01/lib/x86_64-linux-gnu/libpopt.so.0
  cp /lib/libc.so.6 /home/user01/lib/
+
  cp /lib/x86_64-linux-gnu/libc.so.6 /home/user01/lib/x86_64-linux-gnu/libc.so.6
  cp /lib/libacl.so.1 /home/user01/lib/
+
  cp /lib/x86_64-linux-gnu/libattr.so.1 /home/user01/lib/x86_64-linux-gnu/libattr.so.1
  cp /lib/libpopt.so.0 /home/user01/lib/
+
cp /lib/x86_64-linux-gnu/libtinfo.so.5 /home/user01/lib/x86_64-linux-gnu/libtinfo.so.5
  cp /lib/libattr.so.1 /home/user01/lib/
+
  cp /lib/x86_64-linux-gnu/libdl.so.2 /home/user01/lib/x86_64-linux-gnu/libdl.so.2
 
+
  cp /lib/x86_64-linux-gnu/libc.so.6 /home/user01/lib/x86_64-linux-gnu/libc.so.6
 +
 
  mkdir /home/user01/lib64
 
  mkdir /home/user01/lib64
 
  cp /lib64/ld-linux-x86-64.so.2 /home/user01/lib64/
 
  cp /lib64/ld-linux-x86-64.so.2 /home/user01/lib64/
 +
 +
# Herunder lidt ekstra
 +
cp /bin/rm /home/user01/bin/
 +
cp /bin/ln /home/user01/bin/
 +
cp /bin/ls /home/user01/bin/
 +
cp /usr/bin/du /home/user01/bin/
 +
 +
cp /lib/x86_64-linux-gnu/libselinux.so.1 /home/user01/lib/x86_64-linux-gnu/
 +
cp /lib/x86_64-linux-gnu/librt.so.1 /home/user01/lib/x86_64-linux-gnu/
 +
cp /lib/x86_64-linux-gnu/libpthread.so.0 /home/user01/lib/x86_64-linux-gnu/
 +
  
 
Jeg har brugt ldd til at liste dependencies for bash og rsync, samme procedure kan bruges hvis andre programmer skal med.
 
Jeg har brugt ldd til at liste dependencies for bash og rsync, samme procedure kan bruges hvis andre programmer skal med.
Line 54: Line 75:
 
===Rsync===
 
===Rsync===
 
  rsync --progress /mappe/filer user01@server:/files
 
  rsync --progress /mappe/filer user01@server:/files
 +
 +
eller hvis på en anden ssh-port end standard :
 +
rsync --progress -e "ssh -p 522" /backup/ user01@dev.caddi.com:/files
  
 
==SSH Authorized Keys==
 
==SSH Authorized Keys==
 
Til at kunne lave automatisk backup kan vi ikke bruge interaktive passwords, derfor bruger vi keys. Og da vi ikke har et helt normalt setup, skal der laves et par ændringer.
 
Til at kunne lave automatisk backup kan vi ikke bruge interaktive passwords, derfor bruger vi keys. Og da vi ikke har et helt normalt setup, skal der laves et par ændringer.
  
Da alle brugerne har samme home-dir i top-level /etc/passwd, laver jeg lidt om i strukturen.
+
Da alle brugerne har samme home-dir i top-level /etc/passwd, skal jeg selv angive stien til home-dirs FØR chroot.
  
 
'''/etc/ssh/sshd_config''':
 
'''/etc/ssh/sshd_config''':
Line 64: Line 88:
 
  PubkeyAuthentication yes
 
  PubkeyAuthentication yes
 
  #AuthorizedKeysFile    %h/.ssh/authorized_keys
 
  #AuthorizedKeysFile    %h/.ssh/authorized_keys
  AuthorizedKeysFile      /.ssh/%u_authorized_keys
+
  AuthorizedKeysFile      /home/%u/.ssh/authorized_keys
  
 
Nu kan vi lave en key på den klient eller server vi skal have backup fra :  
 
Nu kan vi lave en key på den klient eller server vi skal have backup fra :  
 
  ssh-keygen -t rsa
 
  ssh-keygen -t rsa
  
og kopiere indholdet af ~/.ssh/id_rsa.pub op på serveren i /.ssh/user01_authorized_keys.
+
Opret mappen på serveren til keys :
 +
mkdir /home/user01/.ssh
 +
chown user01 /home/user01/.ssh
 +
touch /home/user01/.ssh/authorized_keys
 +
 
 +
og kopiere indholdet af ~/.ssh/id_rsa.pub op på serveren i /home/user01/.ssh/authorized_keys.
  
 
Voila, nu kan vi rsynce uden password. - Husk at beskyt private filen godt.
 
Voila, nu kan vi rsynce uden password. - Husk at beskyt private filen godt.
 +
 +
===Rsync eksempel fra QNAP===
 +
rsync --bwlimit 70 -r /share/Public/Billeder user01@server:/files/AmstrupNAS/
 +
 +
Se eksempel på [[Versions backup med rsync]].
 +
 +
==Skalér virtuel server-disk==
 +
Da min plan er at bruge en virtuel server til backup, har jeg brug for at kunne udvide disken efterhånden som backup-data fylder på.
 +
 +
Pt. denne guide : http://www.howtoforge.com/linux_resizing_ext3_partitions

Latest revision as of 10:08, 14 April 2014

- En del af Tommys Backup Projekt

ChrootDirectory PLUS et traditionelt chroot. - en lyn-guide, nej nok nærmere notater.

Lavet fordi jeg skulle bruge en backup server som kunne modtage backups via rsync eller sftp og man kunne hente filerne ned igen via FileZilla (http://filezilla-project.org/).

Ekstra : Disk skalering med resize2fs.

Server Opsætning

SSH server

Installer ssh-server og rsync

/etc/ssh/sshd_config

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Match group sftponly
        ChrootDirectory /home/%u
        X11Forwarding no
        AllowTcpForwarding no
#       ForceCommand internal-sftp

Herfra skal alle homefolders både ha root som owner og group for at virke. HUSK ! - En Match -regl kører til slutningen af filen eller til ny match, derfor smid den nederst i filen

Klargør gruppe

addgroup sftponly

Opret bruger

adduser user01
addgroup user01 sftponly
chown root:root /home/user01
usermod -d / user01

Sidste kommando retter etc/passwd så brugerens home-dir er /, man bliver nemlig smidt til home-dir EFTER man er chrooted. Og derefter er / ikke system-root, men chrooted-folder, altså /home/user01/

Opret chroot miljø med bash og rsync

Debian 7 64bit, multiarch:

mkdir /home/user01/bin
cp /usr/bin/rsync /home/user01/bin/
cp /bin/bash /home/user01/bin/

mkdir -p /home/user01/lib/x86_64-linux-gnu
cp /lib/x86_64-linux-gnu/libacl.so.1 /home/user01/lib/x86_64-linux-gnu/libacl.so.1
cp /lib/x86_64-linux-gnu/libpopt.so.0 /home/user01/lib/x86_64-linux-gnu/libpopt.so.0 
cp /lib/x86_64-linux-gnu/libc.so.6 /home/user01/lib/x86_64-linux-gnu/libc.so.6
cp /lib/x86_64-linux-gnu/libattr.so.1 /home/user01/lib/x86_64-linux-gnu/libattr.so.1
cp /lib/x86_64-linux-gnu/libtinfo.so.5 /home/user01/lib/x86_64-linux-gnu/libtinfo.so.5
cp /lib/x86_64-linux-gnu/libdl.so.2 /home/user01/lib/x86_64-linux-gnu/libdl.so.2
cp /lib/x86_64-linux-gnu/libc.so.6 /home/user01/lib/x86_64-linux-gnu/libc.so.6

mkdir /home/user01/lib64
cp /lib64/ld-linux-x86-64.so.2 /home/user01/lib64/

# Herunder lidt ekstra
cp /bin/rm /home/user01/bin/
cp /bin/ln /home/user01/bin/
cp /bin/ls /home/user01/bin/
cp /usr/bin/du /home/user01/bin/

cp /lib/x86_64-linux-gnu/libselinux.so.1 /home/user01/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/librt.so.1 /home/user01/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libpthread.so.0 /home/user01/lib/x86_64-linux-gnu/


Jeg har brugt ldd til at liste dependencies for bash og rsync, samme procedure kan bruges hvis andre programmer skal med.

Opret mappe brugeren kan gemme filer i

Da SSH bestemmer at en ChrootDirectory SKAL ejes af root, skal brugeren have en undermappe med skriverettigheder

mkdir /home/user01/files
chown user01:user01 /home/user01/files

Samme procedure kan bruges hvis det er en webserver, så lav en html mappe.

Rsync

rsync --progress /mappe/filer user01@server:/files

eller hvis på en anden ssh-port end standard :

rsync --progress -e "ssh -p 522" /backup/ user01@dev.caddi.com:/files

SSH Authorized Keys

Til at kunne lave automatisk backup kan vi ikke bruge interaktive passwords, derfor bruger vi keys. Og da vi ikke har et helt normalt setup, skal der laves et par ændringer.

Da alle brugerne har samme home-dir i top-level /etc/passwd, skal jeg selv angive stien til home-dirs FØR chroot.

/etc/ssh/sshd_config:

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys
AuthorizedKeysFile      /home/%u/.ssh/authorized_keys

Nu kan vi lave en key på den klient eller server vi skal have backup fra :

ssh-keygen -t rsa

Opret mappen på serveren til keys :

mkdir /home/user01/.ssh
chown user01 /home/user01/.ssh
touch /home/user01/.ssh/authorized_keys

og kopiere indholdet af ~/.ssh/id_rsa.pub op på serveren i /home/user01/.ssh/authorized_keys.

Voila, nu kan vi rsynce uden password. - Husk at beskyt private filen godt.

Rsync eksempel fra QNAP

rsync --bwlimit 70 -r /share/Public/Billeder user01@server:/files/AmstrupNAS/

Se eksempel på Versions backup med rsync.

Skalér virtuel server-disk

Da min plan er at bruge en virtuel server til backup, har jeg brug for at kunne udvide disken efterhånden som backup-data fylder på.

Pt. denne guide : http://www.howtoforge.com/linux_resizing_ext3_partitions