Módosítások

ArchiveOverHTTP

3 645 bájt hozzáadva, 2013. március 20., 09:12
létrehozás
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:
* <code>tar</code> (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 <code>[https://tn123.org/mod_xsendfile/ mod_xsendfile]</code> 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 <code>XSendFilePath</code> 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 ===
<source lang="php">
<?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);
</source>

A scriptet nevezzük el mondjuk <code>archiver-get.php</code>-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 (<code>?file=foobar.txt</code>) 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ű <code>mod_rewrite</code> 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 <code>mod_xsendfile</code>-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.

Navigációs menü