Dropbox als Server unter Linux einrichten

Ich nutze seit einiger Zeit für weniger wichtige Dateien den Storage Provider Dropbox. Dieser bringt ein kleines Tool um Dateien mit dem Windows oder Linux PC zu Synchronisieren mit. Auch Smartphone Apps sind verfügbar. Allerdings vermisse ich seit einiger Zeit die Möglichkeit, einen Ordner auf einem Linux-Server automatisch im Hintergrund abzugleichen. Das ist zum Beispiel ganz nützlich um diesen Ordner auch per Samba (CIFS/SMB) oder NFS im lokalen Netz freizugeben.

Nun habe ich nach einiger Recherche im Netz eine Möglichkeit gefunden, Dropbox als Service einzurichten. Das ganze ist im Dropbox-Wiki sehr gut Dokumentiert.

Die dort verwendeten init Script verwenden allerdings Multiuser-Umgebungen. Auf einem Server ist es besser einen getrennten Benutzer anzulegen und Dropbox unter diesem zu starten. Der neue user dropbox mit dem Basedir /data/raid/dropbox soll dazu verwendet werden.Nach dem Anlegen des Benutzers muss der dropboxd einmalig unter diesem Benutzer gestartet und der Account aktiviert werden. Meine Anpassungen am Gentoo Script sehen wie folgt aus:

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License, v2 or later
# $Header: /var/cvsroot/gentoo-x86/sys-fs/dropbox/files/dropbox.init-1.0,v 1.4 2007/04/04 13:35:25 cardoe Exp $
NICENESS=5
DROPBOX_USER="dropbox"
DROPBOX_HOME="/data/raid/dropbox"
DROPBOX_BINARY="/opt/dropbox/dropboxd"
DROPBOX_LOG="/var/log/dropbox_log"
DROPBOX_ERR="/var/log/dropbox_err"
depend() {
need localmount net
after bootmisc
}
start() {
ebegin "Starting dropbox..."
touch $DROPBOX_LOG
touch $DROPBOX_ERR
chown $DROPBOX_USER $DROPBOX_LOG $DROPBOX_ERR
start-stop-daemon -1 $DROPBOX_LOG -2 $DROPBOX_ERR -b -S -m --pidfile /var/run/dropbox.pid -o -N $NICENESS -u $DROPBOX_USER -v -e HOME=$DROPBOX_HOME -x $DROPBOX_BINARY
eend $?
}
stop() {
ebegin "Stopping dropbox..."
start-stop-daemon --stop --pidfile /var/run/dropbox.pid
eend $?
}
status() {
if [ -e /var/run/dropbox.pid ] ; then
echo "dropboxd running."
else
echo "dropboxd not running."
fi
eend $?
}

HP ProLiant Microserver als RODC für kleine Standorte

Mit dem NL37 MicroServer bietet HP einen sehr kompakten und dennoch gut Ausgestatteten Server. Das System kann mit bit zu 8 GB ECC-Ram ausgestattet werden, verfügt über 4 SATA II Einschübe und einen DualCore AMD Athlon II NEO Prozessor mit 1.3 Ghz. Die Leistung reicht problemlos für einen Windows Server 208R2 um die Rollen RODC, Dateiserver, Druckserver und BrancheCache für kleine Standorte bis 20 Personen anzubieten.

Zum Gehäuse:
Das sehr gut gelungene massive Gehäuse ist sehr schnell zu öffnen. Die 4 HDD Einschübe befinden sich hinter einer abschließbaren Fronttür, das passende Werkzeug zum Einbau der Festplatten in die Rahmen fehlt leider genau wie die nötigen Schrauben zum befestigen der Festplatten. Standard Sekkopf-Kreuzschlitzschrauben für Festplatten passen glücklicherweise in die vorgesehenen Bohrungen. Um den Speicher zu erweitern muss das Mainboard aus dem Gehäuse herausgenommen werden. Das unter den Festplatteneinschüben liegende Board befindet sich auf einem Schlitten. Zum Herausziehen sind lediglich 2 Schrauben und einige Stecker zu lösen. Nicht gerade der Komfort eines DL380, aber bei diesen Gehäuseabmessungen immer noch relativ komfortabel gelöst. Das System kommt ohne optisches Laufwerk. Über den Festplatten und der Frontklappe befindet sich ein 5 1/4″ Laufwerksschacht mit vorbereiteter S-ATA Verkabelung.Ein Band oder optisches Laufwerk ist hier durch öffnen der oberen Abdeckung schnell eingebaut. Um unerwünschtes Öffnen dieser Abdeckung zu verhindern, kann ein Schloss an der Rückseite angebracht werden. Ausgestattet mit 2x 2TB Enterprise HDD´s wiegt der Server ohne optisches Laufwerk knapp 5 Kg.

Leistung unter Windows Server 2008R2
Direkt nach der Installation können alle Komponenten mit Standardtreibern angesprochen werden. Es empfiehlt sich aber unbedingt den Grafik-/ Netzwerk-karten Treiber zu installieren. Um Datenredundanz zu schaffen sollte auf Windows Bordmittel zurückgegriffen werden. Der interne Controller realisiert das RAID auch nur über die CPU, allerdings ohne Wissen des Betriebssystems. Bei solchen “Soft-RAID” Treibern sollte immer auf die Betriebssystem Funktionen zurückgegriffen werden. Nach Abschluss der Erstsynchronisierung schreibt das System durchschnittlich 80MB/s auf die Datenträger. Das integrierte Gigabit LAN kann damit zwar nicht gesättigt aber immerhin sehr gut Ausgelastet werden.

Serverrollen/Konfiguration
Um einen Server an einem unsicherem Standort aufzustellen, sollte in jedem Fall ein getrenntes Subnet der Größe /24 oder /25 in einer neuen ActiveDirectory Site angelegt werden. Alle Kommunikation von und zu diesem Standort sollten dann IPSec verschlüsselt werden. Um den Standort an den Firmensitz anzubinden, empfiehlt sich ein getrennter L2 VPN-Router. Damit wird eine 2-Faktor Verbindungsverschlüsselung erreicht. Über diese Verbindung dürfen dann ausschließlich IKE und ESP Pakete der IPSec Verbindungen zugelassen werden. Um die Inhalte der Festplatten zu schützen sollte unbedingt EFS aktiviert werden. Somit sind alle nicht Domänenmitglieder aus dem Netzwerk und dem Dateizugriff ausgeschlossen. Der Server selbst wird als RODC konfiguriert. Ein lokaler DNS Server sowie globaler Katalog stellen die Anmeldefunktionen bei fehlender Netzwerkverbindung sicher. Allerdings sollten auf gar keinen Fall Kennwörter Administrativer Konten an den Standort repliziert werden. Eine Anmeldung am Server mit Administrativen Rechten ist so nur möglich wenn die IPSec Verbindung zum Hauptsitz steht. Um Druckfunktionen zur Verfügung zu stellen, empfiehlt sich zusätzlich die Rolle “Druck und Dokumentendienste”. Auch die Rolle “DHCP-Server” ist nützlich. Zum sichern und abgleichen der Daten kann eine DFS-Replikationsgruppe eingerichtet werden. Somit sind immer alle Daten an mindestens 2 Standorten verfügbar.

Fazit:
Der kleine Server bietet neue Möglichkeiten um kleine Firmenstandorte, Baustellen oder ähnliches mit Servern auszustatten. In Verbindung mit einem L2 VPN-Router (z.B. Cisco oder Astaro) lässt sich der komplette Netzwerkverkehr so absichern, dass selbst ein Sniffer an einem Monitor-Port kein Risiko darstellt. Dank RODC und EFS sind auch die Daten und Benutzerkonten relativ sicher. Der Nutzen eines solchen Servers übersteigt auf jeden Fall das Restrisiko. Alternativ müssten alle Anwender ihre Daten lokal verwalten, fällt eine Festplatte aus ist alles weg. Truecrypt usw. bringen auch nicht viel wenn die Daten per SMB Freigabe zwischen den Systemen kopiert werden. Dank des Server kann die Kommunikation mit IPSec und Kerberos abgesichert werden und Mitarbeitern an Remote Standorten eine sichere Zusammenarbeit im Netzwerk ermöglicht werden.

Mehr zum Server auf der HP Produktwebsite.

bizzinformation.de – schätze den Wert einer Website

Auf dem “Web Site Evaluationsdienst”, wie sich die Seite selbst nennt, könnt ihr anhand der Besucherzahlen schätzen, was eine Seite tatsächlich wert ist. Dazu verwendet der Dienst “vermutlich” die Daten von Alexa, die wiederum Daten von Suchmaschinen, Browser-Plugins etc. sammeln.

Das ganze funktioniert ganz einfach. Die Domain ähnlich wie in einer Suchmaschine eingeben und übermitteln. Es werden die Besucher, Kategorie, Einstufung, Backlinks und andere Daten zur Seite zusätzlich zum geschätzten Wert angezeigt. Meinj Blog kahm s auf etwas über 2.000,- EUR, Facebook hingegen auf über 4 Milliarden Euro. Aber probiert es einfach selbst was welche Seite im Moment wert ist. Unter http://bizzinformation.de könnt ihr das tun. Viel Spaß :) .

Dank an planbindustries.de für den Tipp.

Stolperstein AppArmor – Sicherheit auf Kosten von Stabilität und Reaktionszeiten

Es klingt fast schon zu schön. AppArmor aktivieren, ein paar Profile konfigurieren und schon darf ein Prozess nur noch genau das wofür er geschrieben wurde. AppArmor ist ein Security Framework für Linux, dass (basierend auf Regeln) den Zugriff und die Systemaufrufe eines beliebigen Programms auf das System einschränken kann. Erstellt man beispielweise ein Profil für den Apache Webserver, so kann dieser nur noch auf genau die Dateien zugreifen, die für Webanwendungen benötigt werden. Der Zugriff kann sehr fein konfiguriert werden. /usr/* kann nur lesend, /srv/www/htdocs lesend und schreibend, aber nicht ausführend und /var nur lesend und schreibend freigegeben werden.
Nachdem ich nun mehrere Profile konfiguriert hatte und den Server unter Last testete, hagelte es KernelBugs wie Sand am Meer. Auch das Audit-Subsystem (zugrundeliegendes Kernel-Framework auf dem AppArmor aufsetzt) brachte Fehlermeldungen ohne Ende.
Selbst als ich alle Profile entfernt und nur ein Profil, das dem Dienst vollzugriff auf das System erlauben sollte, aktivierte, traten die Fehler weiterhin auf.

Auch musste ich feststellen, dass Prozesse (speziell Apache) langsamer reagierten (HTTP Response von 52ms auf 320ms). Bei starker Auslastung des Servers kann das schonmal zum Problem werden.

Also, letzter Ausweg, AppArmor deaktivieren. Aber wie geht das? Die Deaktivierung der Prozese audit und apparmor verhindern zwar das Laden der Profile, das ganze Framework startet aber trotzdem. Auch das Kernelmodul kann nicht ohne manuelles neukompilieren entfernt werden, da OpenSuSE apparmor statisch in den Kernel kompiliert hat. Was nun? Bootoptions.

Die Parameter “audit=0″ und “apparmor=0″ verhindern die Initialisierung des Frameworks beim Start. Auch die Latenz des Apache-Servers ist nun wieder eigermaßen normal (100ms).

Für alle die gern Kernelbugs auswerten, hier der Bug der bei aktiviertem AppArmor auf meinem System auftrat:

------------[ cut here ]------------
kernel BUG at /usr/src/packages/BUILD/kernel-default-2.6.34.7/linux-2.6.34/kernel/cred.c:518!
invalid opcode: 0000 [#1] SMP
last sysfs file: /sys/devices/system/cpu/cpu1/cache/index2/shared_cpu_map
CPU 1
Modules linked in: xt_tcpudp xt_pkttype dme1737 hwmon_vid ip6t_REJECT nf_conntrack_ipv6
ip6table_raw xt_NOTRACK ipt_REJECT xt_state iptable_raw iptable_filter
ip6table_mangle nf_conntrack_netbios_ns nf_conntrack_ipv4 nf_conntrack
nf_defrag_ipv4 ip_tables ip6table_filter ip6_tables x_tables xfs exportfs
loop dm_mod container i2c_nforce2 sg forcedeth k8temp serio_raw pcspkr
edac_core edac_mce_amd button raid456 async_raid6_recov async_pq raid6_pq
async_xor xor async_memcpy async_tx raid10 raid0 ata_generic pata_amd sata_nv
libata fan sd_mod raid1 arcmsr scsi_mod edd thermal processor thermal_sys
Pid: 2640, comm: httpd2-prefork Not tainted 2.6.34.7-0.7-default #1 D2461-C1/D2461-C1
RIP: 0010:[] [] commit_creds+0x19b/0x1a0
RSP: 0018:ffff88007b891c48 EFLAGS: 00010287
RAX: 0000000000000001 RBX: ffff88007b88d980 RCX: 0000000000000000
RDX: ffff88007d00ca00 RSI: ffffffff812033e0 RDI: ffff88007c067a80
RBP: ffff88007c067a80 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: ffff88007b89c600
R13: ffffffff81a15320 R14: ffffffff81a151a0 R15: 0000000000000001
FS: 00007fd770aab700(0000) GS:ffff880001f00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fd77115d548 CR3: 000000007d308000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
Process httpd2-prefork (pid: 2640, threadinfo ffff88007b890000, task ffff88007b89c600)
Stack:
ffff88007d00cac0 ffff88007d89a800 ffff88007c067a80 ffffffff81200396
<0> ffff88007d89a800 ffff88007d00cc00 ffffffff81a151a0 ffffffff812060b0
<0> ffff880001e16a08 ffff88007b891da8 ffffffff81776fe0 0000000000000001
Call Trace:
[] aa_replace_current_profiles+0xc6/0x100
[] apparmor_sysctl+0x140/0x150
[] sysctl_perm+0x2d/0xd0
[] proc_sys_permission+0x4c/0xc0
[] exec_permission+0x28/0xa0
[] link_path_walk+0x80/0xab0
[] path_walk+0x5a/0xd0
[] do_path_lookup+0x4b/0x90
[] user_path_at+0x5a/0xb0
[] sys_faccessat+0xd5/0x1e0
[] system_call_fastpath+0x16/0x1b
[<00007fd76fd61497>] 0x7fd76fd61497
Code: 53 30 48 89 c1 48 89 d6 f7 d2 48 c1 e9 20 48 c1 ee 20 85 c2 0f 85 c0 fe ff ff
f7 d6 85 ce 0f 84 da fe ff ff e9 b1 fe ff ff 0f 0b <0f> 0b 0f 1f 00 55 48 89
fd be d0 00 00 00 53 48 83 ec 08 48 8b
RIP [] commit_creds+0x19b/0x1a0
RSP
---[ end trace 817a31ef734f9acb ]---