ArchiveOverHTTP

Innen: KIFÜ Wiki
A lap korábbi változatát látod, amilyen Bajnokk(AT)niif.hu (vitalap | szerkesztései) 2013. március 20., 08:12-kor történt szerkesztése után volt. (létrehozás)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Az archiválás célja az, hogy olyan adatokat mentsünk le, amelyre valószínűleg sohasem lesz szükség, de ha mégis, akkor nagy biztonsággal helyreállítható legyen.

A leírás azt feltételezi, hogy kevés file-t kell szalagra írni. Amennyiben sok állományról van szó, akkor az alábbi lehetőségek közül választhatunk:

  • tar (zip, rar stb.) segítségével egy file-t csinálunk belőle
  • kihasználjuk a rekurzív archiválás lehetőségét (DAV vagy SFTP használatával)

Kiszolgálás Apache webszerverrel

Az Apache nem hatékony nagy statikus állományok kiszolgálására, mivel ehhez nagyon sok memóriát foglal(hat). Erre megoldás a mod_xsendfile használata, amellyel egy egyszerű script segítségével hatékonyan szolgálhatjuk ki a file-okat, és tetszés szerint autorizálhatunk. Az autorizáció különösen fontos akkor, ha érzékeny adatokat akarunk menteni, hiszen nem szeretnénk, ha egy publikus webszerverről bárki le tudná azokat tölteni.

Webszerver konfiguráció

Tetszőleges működő http(s) webszerver konfig megteszi. Az alábbi két sort szúrjuk be:

  XSendFilePath /path/to/archive/
  XSendFile on

Fontos, hogy az XSendFilePath a webszerver DocumentRoot-ján kívül legyen, ellenkező esetben xsendfile-on kívüli módon is elérhetőek lehetnek az anyagok.

Kiszolgáló PHP script

<?php

  # Place the IP addresses in this array that are authorized to download the 
  # archives
  $trusted_networks = array(
    "193.225.50.212",
    #TODO IPv6!
  );

  # You should not allow directory listing, and you probably want to be explicit
  # about what you serve through this script
  $served_files = array(
    "proba.txt",
    "cgp-metadata.txt",
    "cgp.tar",
    "szfe-orphaned_20130318.tar",
    "maildirs2-orphaned_20130318.tar",
  );

  # The directory where the archives reside
  $dir = "/srv/maildirs/archive";

  $ip = $_SERVER['REMOTE_ADDR'];
  $file = $_GET['file'];

  if (!$file) {
    echo "Missing 'file' parameter";
    exit(1);
  }
  if (!preg_match('/^[a-z0-9A-Z\-_]+\.?[a-z0-9A-Z\-]*$/',$file)) {
    echo "Invalid 'file' parameter";
    exit(1);
  }

  if (in_array ($ip, $trusted_networks)) {
    if (in_array ($file, $served_files)) {
      header("Content-Type: application/octet-stream");
      header("Content-Disposition: attachment; filename=\"$file\"");
      header("X-Sendfile: $dir/$file");
      exit(0);
    } else {
      echo "Sorry, this file can not be served!";
      exit(1);
    }
  } else {
    echo "Your IP ($ip) is not authorized!\n";
    exit(1);
  }

exit(0);

A scriptet nevezzük el mondjuk archiver-get.php-nek. A programhoz való hozzáférést az Apache további eszközeivel is szűkíthetjük (Basic Auth, IP korlátozás stb), de ezek már redundáns védelmet nyújtanak.

Tiszta URL-ek

Ugyan az archiver támogatja a query stringek (?file=foobar.txt) használatát, azonban ez kényelmetlen, mivel át kell nevezni a végeredményt ahhoz, hogy értelmes nevet kapjunk. Ezrt mindenképpen érdemes egy egyszerű mod_rewrite trükköt használni:

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule ^(.*)$ /archiver-get.php?file=$1 [L]
</IfModule> 

Debian megjegyzés

Nagy file-ok kiszolgálására a mod_xsendfile-nak legalábba 0.11-es verzióját kell használnunk. Ez (a szöveg írása idején) nincs a Debian Squeeze-ben, azonban minden további nélkül használhatjuk itt is a wheezy-s bináris deb csomagot.