Alle Beiträge von knebler

Raspberry Pi als Owncloud Server

Die eigene Cloud für Zuhause ist immer eine Alternative zu den vielen kommerziellen Anbieter, her kommt der Rasperry Pi ins Spiel. Hardware sollte ein Raspberri Pi Typ 3 sein, dazu benötigen wir folgende Dinge:

  • Raspberry Pi Typ II oder III
  • Image von raspberrypi.org
  • Netzwek, HDMI und USB Kabel
  • SD Karte mit min 64GB
  • Tastatur

Kaufen könnt Ihr einen Raspberry Pi und das Zubehör im Netz oder bei einem Händler, eine Beschreibung wir richte ich den Raspberry ein findet Ihr unter raspberrypi.org. Hinweis: Die Graphische Oberfläche wird nicht benötigt und würde nur Speicher und CPU verschwenden. Nach der ersten Konfiguration mit sudo raspi-config sollte das System auf einen aktuellen Stand gebracht werden mit sudo apt-get update -y und sudo apt-get upgrae -y

Falls notwendig kann auch noch ein Raspberry Pi Firmware-Update durchgeführt werden mit sudo rpi-update Hinweis: Bitte nur durchführen falls es notwendig ist!

Folgende Packete müssen nun installiert werden:

  • sudo apt-get install apache2
  • sudo apt-get install php5 php5-gd php5-sqlite php5-curl sqlite oder mysql
  • sudo apt-get install mc nmap

Die Owncloude muss leider anders installiert werden, dafür sind folgende Schritte notwendig:

  • Unter der URL https://owncloud.org/install/ kann die Software heruntergeladen werden
  • cd /var/www
  • mkdir owncloud
  •  wget https://download.owncloud.org/community/owncloud-9.1.0.zip  Hinweis: bitte den Dateinamen anpassen!
  • Der Apache muss nun noch angepasst werden
    • Die Datei mit dem Befehl aufrufen und anpassen:
      • nano /etc/apache2/sites-enabled/000-default.conf
      • Eintrag: DocumentRoot /var/www/owncloud eintragen

Die IP Adresse des Raspberry Pi kann per DHCP vergeben werden oder auch fest eingestellt werden, jeder aktuelle Router kann aber eine feste IP und auch einen Namen zuweisen, das erleichtert die Einrichtung und Verwendung erheblich.

Mit dem Befehl sudo init 6 wird der Raspberry Pi nun neu gestartet, solltet Ihr eine mysql verwenden muss noch ein Passwort für die Datenbank vergeben werden und eine Datenbank angelegt werden, wie das geht findet Ihr im Netz.

Nun rufen wir die URL unseres Raspberry Pi (http://IP) auf und folgen der Installation von Owncloud.

Hinweis: Nextcloud kann auch verwendet werden, der Ablauf ist der selbe, dar aktuell beiede Varianten ähnlich sind.

Solltet Ihr auch von unterwegs die Cloud aufrufen wollen sind folgende Schritte notwendig:

  • openvpn installieren
  • eine externe IP Adresse besorgen z.B. www.noip.com
  • Router für den Port VPN Port einrichten (Portmapping)
  • Zertifikate erstellen, hierführ gibt es ein gutes Tool OpenVPN-Setup
    Mit cd in das Home wechseln und danach:
  • git clone git://github.com/StarshipEngineer/OpenVPN-Setup
  • cd OpenVPN-Setup
  • sudo chmod +x openvpnsetup.sh
  • sudo ./openvpnsetup.sh

 

Downloads

Nützliche Apps für Android 7

Folgende Apps erleichtern das tägliche Leben mit Androide 7

RainToday – HD Regenradar

  • RainToday ist ein kostenloser Echtzeit-Regenwarner mit HD Radar und basiert auf neusten, technischen Entwicklungen von MeteoGroup, einem der weltweit führenden Wetterdienste. Wann immer Regen in Deutschland und der Schweiz zu erwarten ist: RainToday warnt Sie gezielt und punktgenau!

Blitzer.de PLUS

  • Blitzer.de ist Europas größte Verkehrs-Community mit mehr als 4 Millionen aktiven Nutzern. Mach mit und profitiere von den vielen regionalen Meldungen über Blitzer, Unfälle, Stauenden, Gefahren und Baustellen.

Memrise: Sprachen lernen

  • Sprachen lernen als Abenteuer. Erlebe die Abenteuer von Rudi Rothschild, dem besten Spion des Memrise Missions-Programms, in seinem Streben danach, das Multiversum vor dem Untergang zu bewahren!
ES Datei Explorer
  • ES Datei Explorer (Dateimanager) ist ein kostloser und voll funktionsfähiger Datei (Anwendungen, Dokumente und Multimedia) Manager für lokale Nutzung und Netzwerk-Nutzung! Es Datei Browser ist der leistungsstärksten Android Dateimanager der Welt mit über 300 Million Anwendern weltweit.

Wifi Analyzer

  • Macht aus deinem Android Handy ein WLAN-Analyse-Tool!

Fing – Network Tools

  • Entdecken Sie, welche Geräte mit dem Wi-Fi-Netzwerk verbunden sind, Aufspüren von Eindringlingen, Netzwerk-Sicherheitsrisiken bewerten, Netzwerkprobleme erkennen, mit den beliebtesten Netzwerk-Toolkit der Welt erreichen.

Termius – SSH & Telnet Client

  • Termius ist ein schneller SSH-Client für unterwegs, für Tablet und Handy geeignet.

 

Nützliche Apps für Android 4.0

Sammlung Tablett 2012 I

3D Digital Weather Clock

aCalendar

AlarmDroid

Android Booster

Animated Weather: White Skin

AntTek Cloud Explorer

AntTek Explorer

App Cache Cleaner

AutoRotate OnOff

BatteryLife

Beautiful Notes

Brücken-, Feier- & Ferientage

Cool Tool (Beschreibung: Echtzeit-Systemüberwachung)

Countdown Widget

Cover Art Grabber

Crystal Clock Pack

Currents

dailyme

DB Navigator

Digital & Analog World Clock Widget

DiskUsage

Dropbox

PHP effektiv gegen Hacker-Angriffe absichern

PHP kann Dateien auf den Server schreiben, ausführbaren Code von Webadressen nachladen oder Linux-Systemkommandos mit den Rechten des Webservers ausführen. Meist sind diese Möglichkeiten nützlich und notwendig. Doch viel zu oft lässt sich, dank Fehlern, eine Funktion von außen missbrauchen, um Schädlingsprogramme auf dem Webserver zu installieren.

Deshalb sollte sich jeder Webserver-Administrator dringend mit den Konfigurationsmöglichkeiten von PHP4 beziehungsweise PHP5 vertraut machen, und nur so viele Funktionen zulassen, wie auf dem Server auch tatsächlich benötigt werden. Die dafür zuständige Datei heißt php.ini und liegt, je nach Version von Webserver und PHP, in einem der folgenden Verzeichnisse:

/etc/php4/apache/

/etc/php4/apache2/

/etc/php5/apache/

/etc/php5/apache2/

Nach jeder Änderung empfiehlt sich ein

apachectl restart

oder

apache2ctl restart

Erst mit dem Neustart werden die Änderungen wirksam. Das graceful-Kommando des Skripts apachectl reicht dazu nicht immer aus.

Gehen Sie die folgenden Anweisungen Schritt für Schritt durch und setzen Sie den vorgeschlagenen Wert in Ihrer php.ini. Setzen Sie den Wert auch, wenn er die Voreinstellung (default) ist. Denn die jeweils gültigen Voreinstellungen ändern sich des öfteren von PHP-Version zu PHP-Version. Angegeben sind die Defaults für PHP5, bei PHP4 sind sie sehr versionsabhängig.

Und das sind die Befehle:

register_globals = off ;(php5-default: off)

verhindert, dass beliebige Variable im PHP-Code durch GET- oder POST-Parameter überschrieben werden können. Beim Aufruf der URL http://server/page.php?login=true ist beispielsweise der Wert in der Variablen $_GET[„login“] abgelegt. Mit

register_globals=on

wird zusätzlich alleine über den URL-Parameter die PHP-Variable $login gesetzt. Dieser Parameter sollte darum heutzutage unter keinen Umständen mehr auf on gesetzt werden.

memory_limit = 12M ;(default: 8M)

begrenzt den Speicher (in Megabyte), der bei jedem einzelnen Aufruf eines Skripts verbraucht werden darf. So wird beispielsweise verhindert, dass eine versehentlich programmierte Endlosschleife den kompletten verfügbaren Speicher belegt. Viele PHP-Anwendungen sind recht speicherhungrig, so dass der Wert eventuell höher gewählt werden muss. Das CMS Typo3 benötigt beispielsweise eine Grenze von mindestens 16MB.

max_execution_time = 60 ;(default: 30)

begrenzt die Zeit, die ein Script für die Ausführung bekommt. Auch das verhindert Probleme mit versehentlichen Endlosschleifen. Allerdings darf der Wert nicht zu niedrig sein – schließlich soll auch bei voller Serverlast etwa eine aufwendige Datenbankabfrage ohne Fehlermeldung bearbeitet werden.

max_input_time = 60 ;(default: 60)

begrenzt die Zeit, die ein Script mit dem Einlesen der übergebenen Parameter verbringen darf.

default_socket_timeout = 60 ;(default: 60)

begrenzt die Zeit, die PHP bei der Ãœbertragung von Streams auf die Gegenseite wartet.

allow_url_fopen = off ;(default: on)

Defaultmäßig erlaubt es PHP, bei allen Befehlen, die Dateien öffnen, statt eines lokalen Dateinamen auch eine URL anzugeben. Das betrifft beispielsweise die Befehle require, include oder fopen. Setzen Sie diesen Wert nur auf on, wenn Sie diese Funktionalität unbedingt benötigen. Denn schon ein include($_GET[„filename“]) stellt ein erstklassiges Sicherheitsrisiko dar. Hier sind allerdings auch die PHP-Programmierer gefragt. Denn solche Konstruktionen sind leichtsinnig.

open_basedir = /var/www/:/usr/share/pear/ ;(default:nicht gesetzt)

Dieser Parameter schränkt das Öffnen von Dateien weiter ein. PHP läßt nur noch den Zugriff auf solche Dateien zu, die in oder unterhalb der angegebenen Pfade gespeichert sind. Allerdings sollten Sie hier nicht zu restriktiv sein: Liegt ein PHP-Programmpaket, wie etwa phpMyAdmin, in einem Pfad außerhalb des üblichen www-Verzeichnisses, muss dieser Pfad mit aufgeführt werden, sonst wird das Programmpaket nicht mehr funktionieren.

session.save_path = /var/tmp/www ;(default: nicht gesetzt)

gibt das Verzeichnis an, in dem PHP seine Session-Informationen ablegt.

Aus Sicherheitsgründen sollte dafür nicht das Standard-Tempverzeichnis genutzt werden.

upload_tmp_dir = /var/tmp/www ;(default: nicht gesetzt)

gibt das Verzeichnis an, in dem PHP hochgeladene Dateien ablegt. Auch dafür sollte keinesfalls das Standard-Tempverzeichnis verwendet werden.

upload_max_filesitze = 2M ;(default: 2M)

begrenzt die Größe der Dateien in Megabyte, die via PHP-Funktionen hochgeladen werden können. Der ideale Wert hängt davon ab, für welche Anwendungen PHP eingesetzt wird. Sie können auch einen größeren Wert, etwa 20M wählen, nur unbegrenzt sollte die Dateigröße nicht sein.

enable_dl = off ;(default: on)

Die Standardeinstellung aktiviert den PHP-Befehl dl(), der PHP-Extensions im Programmcode nachlädt. So verlieren Sie aber die Kontrolle, welche Extensions auf Ihrem Webserver verwendet werden. Stellen Sie diesen Parameter also besser auf off und laden Sie Extensions über die php.ini, etwa

extension=mysql.so

PHP-Parameter individuell einstellen

Aufwendiger wird die Einstellung, wenn nicht für den Webserver einheitliche Werte gelten sollen, etwa, weil der Server unter verschiedenen URLs verschiedene PHP-Anwendungen anbietet. Doch auch dann ist es möglich, sichere Einstellungen zu erreichen. Dazu setzt man zunächst in der php.ini alle global geltenden Werte. Alles Weitere passiert dann in den Config-Dateien des Apache-Werbservers. Dafür gibt es zwei Config-Befehle:

php_admin_flag

php_admin_value

Diese beiden Befehle können auch innerhalb eines

Blocks verwendet werden, so dass sie für einen virtuellen Server gelten. Beispiel:

(…)

php_admin_flag allow_url_fopen off

php_admin_value memory_limit 10M

php_admin_value open_basedir /home/ vserver1/:/usr/share/ pear/

Beachten Sie die Schreibweise ohne =-Zeichen.

Wenn auf Apache mehrere virtuelle Server laufen, sollten Sie open_basedir, session.save_path und upload_tmp_dir für jeden Host getrennt setzen.

Achtung, Fußangel

Nicht alle Beschränkungen, die Sie in der php.ini setzen, können in der Apache-Config wieder aufgehoben werden. Ist in der php.ini etwa allow_url_fopen auf off gesetzt, bleibt es auf off, was auch immer Sie in Apache einstellen.

Verwenden Sie in diesem Fall folgenden Trick:

allow_url_fopen = on

in der php.ini.

php_admin_flag allow_url_fopen off

in der globalen Apache-Konfiguration. Und dann wiederum

php_admin_flag allow_url_fopen = on

innerhalb des Virtualhosts, der diese Funktion benötigt. Um zu überprüfen, welche Einstellungen innerhalb eines Hosts tatsächlich gelten, verwenden Sie ein kurzes Skript mit dem Befehl phpinfo().

Noch mehr Sicherheit für PHP

Darüber hinaus gibt es weitere Parameter, um PHP noch stärker abzusichern, etwa

safe_mode =

disable_functions =

Setzt man allerdings diese Parameter auf sichere Werte, schränkt man die Funktionalität von PHP so stark ein, dass viele Anwendungen nicht mehr oder nur noch eingeschränkt funktionieren. Wer diese Parameter ändert, sollte deshalb danach seine Anwendungen ausführlich testen.

Add to Del.icio.us

SQL-Referenz Mini

Datentypen in SQL

Die wichtigsten SQL-Datentypen sind

bool TRUE oder FALSE
int Ganzzahlen
char () String fester Länge
varchar () String variabler Länge mit festgesetztem Maximum
long varchar (unter einigen Datenbanken: Text mit mehr als 2048 Zeichen)
dec (, ) Offensichtlich Festkomma. übersteigt ein Wert die Zahl der möglichen Stellen wird der höchstmögliche Wert gespeichert (bei dec(3,3) und 4321.4321 ist das z.B. 999.999).
float () Fließkommazahl
date Datumsangabe. Vorsicht: Datumsformate unterscheiden sich in den Datenbanken, MySQL möchte z.B. Daten in der Form 4 Zeichen für Jahr, 2 für Monat und 2 für Tag in der Formatierung YYYY-MM-DD. Außerdem werden Daten meist als Strings übergeben (also bei INSERT unbedingt auf Hochkomma achten). Angesichts all dieser Probleme und den Schwierigkeiten, z.B. herauszufinden wie viele Tage zwischen zwei DATEs lagen, beschränke ich meine Programmierung auf Unix-Timestamps: Die haben den Wert int.

SELECT

Einfaches SELECT
select ist der erste Schritt für eine Ausgabe aus einer Datenbank. Die Syntax ist
SELECT FROM [WHERE ]. Es werden immer alle Zeilen einer Datenbank angesprochen, sind alle Spalten gemeint genügt ein *, ansonsten werden Spaltennamen (genau wie Tabellennamen) durch ein Komma getrennt. example.
select * from hauptbuchselektiert alle Zeilen mit allen Spalten aus hauptbuch. Mit Funktionen, die die Programmiersprachen dann zur Verfügung stehen, können selektierte Einträge z.b. in Strings gespeichert werden (siehe: Eine kleine ODBC-Referenz).
select transaktion, datum from hauptbuchgewährt dann nur Zugriff auf die Spalten transaktion und datum (nur wenige Spalten auszuwählen vergrößert oft übersicht und verschnellert).

SELECT mit Bedingungen

select * from hauptbuch where (transaktion>40000)selektiert nur die Zeilen (alle Spalten, da *) einer Tabelle, bei denen Transaktion>40000 ist. Ein weiteres Beispiel ist
select kundennr, letztebestellung from faktura where
(kundennr=192)

SELECT mit Sortierung

Syntax ist
order by [ascending/descending]select * from hauptbuch where (transaktion>40000) order by transaktion descendingselektiert z.b. bei einer Tabelle mit den Werten
wobei descending eine fallende Reihenfolge symbolisiert, ascending oder keine Angabe der Reihenfolge sortiert die Selektion in die andere Richtung.

JOINS

Oft werden die Einträge aus einer Tabelle in einer anderen Tabelle als Schlüsselwerte benutzt. Schlüsselwerte sind Werte, die in jeweils nur einer Zeile der Tabelle vorkommen. Z.B. wäre einen Kundendatenbank, in der jedem Kunden eine eindeutige Kundennummer zugeordnet ist, eine Datenbank mit Schlüsselwerten. Haben wir zwei Tabellen Können wir in SQL auch in einem Schritt nach einem Kundennamen suchen und den Zeitpunkt der letzten Bestellung ausgeben. Das nennt man dann einen JOIN aus beiden Tabellen.
Um gleichnamige Spaltennamen in verschiedenen Tabellen unterscheiden zu können schreibt man den Tabellennamen mit einem Punkt vor den Spaltenname:
select hauptbuch.transaktion, hauptbuch.datum from
hauptbuch
sieht zwar dumm aus, das ändert sich aber bei
select * from kunden, bestellungen where ((kunden.kundennr=bestellungen.kundennr) AND (kundenname=’Fr. Brisbois‘)) liefert Kundennr und Bestellzeitpunkt von Andreas Mühl zurück.
Die letzte anweisung ist für konventionelle Programmierer (zumindest ging es mir so) erst einmal schwer zu verdauen. Es zeit aber auch, das ein where kein if ist: where wird alle Spalten aller Datenbanken angewendet. So funktioniert die Geschichte auch wenn z.B. Anderas Mühl in der Kundendatenbank die erste Zeile innehat, in der Bestelldatenbank aber nur die 5te oder 1000ste.

CREATE

create ist für uns nur im Zusammenhang mit create table interessant. Es erzeugt eine neue Tabelle in einer Datenbank. der Syntax ist
create table [,(… ] )z.B.:
create table kunden (kundennr int, name varchar(50))

INSERT

insert into < Tabellenname > values ([,…])Beachten Sie, dass der Wert sowohl bei Datumsangaben (i.d.r in der Form ‚JAHR-MO-TG‘) als auch bei Varchars (Strings) in Hochkomma (‚) eingeschlossen sein muss.
Eine Insert-Anweisung führt logischerweise zu Fehlern, falls nicht die gleiche Anzahl Werte in die Tabelle eingefügt werden soll, wie Spalten vorhanden sind.
Hin und wieder passiert es, dass ein Programmierer insert into tabelle1 value (2001, ‚Jahr‘) schreibt. Ein fehlendes s mach es dem Programmierer da bei der Fehlersuche schwer weil (nicht das korrekte values) value auch als Schlüsselwort erkannt wird.

DELETE

Zeilen löscht man in SQL mit
DELETE FROM WHERE < Bedingung >Beispiel:
DELETE FROM ANTIQUES WHERE ITEM = ‚Ottoman‘;

DROP

Drop ist das delete für ganze Tabellen. Mit
DROP löschen Sie die ganze Tabelle. Ich verwende es oft in den setup-Dateien, den Dateien, die Tabellen in den Datenbanken aufbauen. Vor dem Erstellen der Tabellen versuche man sie oft zu löschen, da ein Erstellen mit geänderten Spalten nicht möglich ist wenn die Tabelle noch in anderer Form existiert.

ALTER

Mit ALTER TABLE ADD/DROP COLUMN /kann man Tabellen im Nachhinein ändern — praktisch.
Spalten hinzufügen
Spalten hinzufügen kann man z.B. mit
ALTER TABLE ANTIQUES ADD COLUMN (PRICE INT); Spalten löschen
… und Spalten löscht man mit ALTER….DROP:
ALTER TABLE ANTIQUES DROP COLUMN PRICE;

UPDATE

UPDATE SET = WHERE ändert einen Eintrag in einer Datenbank (und ist als solches sehr praktisch in Administrationsseiten wo desöfteren in den Datenbankinhalten etwas geändert wird. Man denke nur an Preisänderungen in Online-Shops.)
UPDATE ANTIQUES SET PRICE = 500.00 WHERE ITEM = ‚Chair‘;