knasan

Linux and more

Archiv für den Monat “Oktober, 2011”

SSH Absichern

Es sollte schon jeden ArchLinux Benutzer aufgefallen sein das tcp_wrapper in Arch nicht mehr verwendet wird. Man ist also gezwungen seine Dienste anders zu schützen.

https://bbs.archlinux.de/viewtopic.php?id=19513&p=1

Um Ports zu erkennen wird netstat im obigen Postig erwähnt. In Arch habe ich nur noch netstat-nat gefunden und die Syntax scheint sich geändert zu haben, deshalb habe ich mir netactview angesehen und dies reichte mir.

pacman -S netactview

Als erstes habe ich mir ssh genauer angesehen. Wenn SSH in seine Default Einstellung verwendet wird, ist es wenig geschützt was man natürlich nicht möchte.

Sehen wir uns also erst einmal ssh in netacview an (im KDE menü → Internet → Net Activity Viewer). Wie man sehen kann (Abbildung 1) wurde ssh mit seinem Standard Port 22 gestartet und ist an keiner Netzwerkkarte bzw. IP-Adresse gebunden. Obwohl dies eher einer Pseudo Sicherheit ist, habe ich mir angewöhnt dies zu tun. Dies funktioniert natürlich nur dann, wenn sichergestellt ist das der Rechner immer die selbe IP bekommt.


Abbildung 1: SSH in netcatview mit seiner Default Einstellung

Natürlich kann man viele Dinge mit netcatview bzw. netstat nicht sehen. Es sagt nichts aus ob sich jeder Verbinden darf oder nur eine Person oder Personengruppen. Ob man einen Schlüssel benötigt oder nicht usw.

  • ListenAddress 192.168.0.1
    ssh nur auf eine bestimmte Schnittstelle binden, falls mehrere Netzwerkkarten Installiert sind und nicht auf allen verfügbar sein soll.
  • PermitRootLogin no
    Versuche so wenige Logins als Root wie möglich zu erlauben. Wenn nun jemand Root werden will, benötigt er zwei Logins. So kann das Root-Passwort nicht so leicht ausgetestet werden.
  • Port 2222oder ListenAddress 192.168.0.1:2222
    Ändern von Listen-Port, so dass ein Eindringling nicht wirklich sicher sein kann, ob ein sshd-Daemon läuft (man sollte aber beachten, dass dies lediglich „Sicherheit durch Verschleierung“ ist).
  • PermitEmptyPasswords no
    Es versteht sich von selbst, das jedes Konto mit einem Passwort zu schützen ist.
  • AllowUsers nutzer1 nutzer2 nutzer1@fqdn
    Erlaube nur bestimmten Nutzern sich via ssh auf der Maschine einzuloggen. nutzer1
    @rechnername
    kann dazu verwendet werden, um einen bestimmten Benutzer zu zwingen, nur von einem bestimmten Rechner aus zuzugreifen, hab ich selbst jedoch noch nicht getestet.
  • AllowGroups wheel admin
    Erlaube nur bestimmten Gruppenmitgliedern sich via ssh auf der Maschine einzuloggen. AllowGroups und AllowUsers haben äquivalente Verfahrensweisen, um den Zugang zu der Maschine zu verwehren.
  • PasswordAuthentication yes
    Es ist allein Ihre Wahl, was Sie hier eintragen. Es ist sicherer, Zugriff nur Nutzern zu erlauben, die ssh-Schlüssel in der
    ~/.ssh/authorized_keys-Datei haben. Wenn Sie dies wollen, setzen Sie es auf „no“.
  • Schalte jedwede Art der Authentifizierung ab, die nicht wirklich benötigt werden, zum Beispiel
    RhostsRSAAuthentication, HostbasedAuthentication, KerberosAuthentication oder RhostsAuthentication. Man sollte sie abschalten, auch wenn sie es standardmäßig bereits sind (siehe dazu man 5 sshd_config).
  • Protocol 2
    Deaktiviere Protokollversion 1, da diese einige Designschwächen hat, die es einfacher machen, Passwörter zu knacken.

Mit diesem Wissen kann man seine SSH-Konfigurationsdatei /etc/ssh/sshd_config anpassen und danach ssh neu starten. Wenn man nun Abbild 2 betrachtet fallen einem die kleinen Veränderungen auf. Und wenn man so wie so von jedem Rechner aus sich verbinden möchte sollte man Root Login verbieten und nur einen Benutzer erlauben. Dann braucht man bis dato noch lange keine Firewall.


Das das ändern des Ports Sinnvoll ist versteht sich fast von selbst. Nach meinen Erfahrungen zu folge wird man weniger bis gar nicht mehr von SkriptKiddies belästigt. Dazu sei gesagt, das der Port 2222 in vielen Anleitungen verwendet wird und daher nicht gewählt werden sollte.

Nun noch ein kleiner Tipp für alle die jetzt nicht immer ssh -p 2222 nutzer1@fqdn eingeben möchte. Es gibt für jeden Benutzer eine Benutzer-Konfiguration. Hierfür legt man einfach in seinem Heimatverzeichnis die Datei .ssh/config an und trägt Host USER PORT im folgenden Schema ein.

Host myhost
user nutzer1
HostName fqdn
Port 2222

Somit verbindet sich ssh immer mit diesen Einstellungen. Besonders elegant ist dies natürlich wenn man auf der anderen Maschine nicht den selben Anmeldenamen hat als wie auf der Maschine auf der man sich Anmelden möchte. Das erspart einem etwas Tipparbeit und man muss sich auch nicht Ports und co Merken.

Sandy

Restrukturierung von Sysnapshot ist fertig

Die Restrukturierung von sysnapshot hat mir einiges gebracht. Es steckt jetzt mehr Ruby drin als vorher und wurde zugleich um einige Funktionen erweitert. Die Funktion cleaner hat die Aufgabe die Festplatte von alten oder unerwünschten Backups zu bereinigen.  Hierfür gibt es in der Konfigurationsdatei zwei Einträge:

„maxsnapshot“ das die Maximale Anzahl an Snapshots angibt. Ist diese Anzahl überschritten, löscht das Script jeweils das älteste Backup was er finden kann.

„minspaceleft“ gibt an, wie viel freier Speicher die Festplatte aufweisen muss damit ein neues Backup geschrieben werden kann. Ist also 60 GB angegeben (Defaultwert) Prüft die Funktion „cleaner“ ob die Festplatte mindestens 60 GB frei hat, wenn die Festplatte weniger freien Speicher zur Verfügung steht, wird so lange alte Backups gelöscht bis der gewünschte freie Speicher vorhanden ist.

Für beide gilt folgender Selbstschutz.
Vor jedem Löschvorgang wird geprüft ob es sich um das Backup handelt auf dem der latest Link zeigt, denn das darf auf keinen Fall gelöscht werden. Sonst wären eventuell Wichtige Dokumente nicht mehr vorhanden und diesen Spergau gilt es zu vermeiden.

Möchte man keine dieser Funktionen nutzen, kann man diese in der Konfiguration einfach leer lassen oder mit einer 0 deaktivieren. Man kann diese einzeln oder parallel betreiben, je nach Vorstellung und was einem wichtig erscheint.

Anders als in der Vorgänger Version, ist es auch nicht mehr zwingend nötig Verzeichnisse mit einem / beenden zu müssen.

Der Code ist zwar schwach Kommentiert, aber an einigen Stellen habe ich einen Kommentar eingefügt. Besonders dann, wenn ich nach einer Kurzen Pause nicht mehr genau wusste was dieser Code eigentlich tun sollte. Alles andere erschien mir logisch, verständlich bzw. so formuliert das man diesen wie ein Buch lesen kann. Wenn man eine Programmiersprache Lernt, ist einem noch nicht klar was man alles Kommentieren muss damit es andere verstehen, dies ist eine Hürde die man für sich selbst entwickeln muss. Ich konzentrierte mich auf die einzelne Funktionen und auf den Code deshalb habe ich nur kommentiert was ich für mich wissen musste was der Code macht. Ich glaube das dies ein guter Kompromiss und solange niemand sagt was er nicht an diesen Code verstanden hat bleibe ich bei diesem Konzept. Es wird sich noch Zeigen ob sich dieses Konzept bewährt oder nicht.

Obwohl der neue Code noch nicht lange Online ist, denke ich über Funktionen nach die man gebrauchen könnte.
Zum Beispiel über Delivery zu deutsch Auslieferung, es kann manchmal nützlich sein eine Auslieferung zu haben der in einem Geschützen Bereich ist. Genauso wichtig wäre eine Recovery Funktion, die es einem ermöglicht, ein Backup zurück zuspielen und das am besten mit einer Live-CD.

Wer noch kein Backup-Konzept hat, ist gerne eingeladen sysnapshot zu testen.

Falls jemand noch eine Idee hat, was für ein Backup-Tool so alles wichtig wäre, kann dies gerne als Kommentar hinterlassen.
Und wenn jemand Lust verspüren sollte mit an diesem Projekt arbeiten zu wollen, dann lasst es mich wissen.

Sandy

Restrukturierung von Sysnapshot

Obwohl sysnapshot mein erstes Ruby-Projekt ist, empfand ich diesen Code schon nach einigen Tagen nicht mehr so toll wie am Tag der Veröffentlichung. Schnell hab ich nur noch BugFixes gemacht und an diesem Code nicht mehr viel geändert, geschweige neue Funktionen Implementiert.

Abhilfe schaffte hier nur eine Restrukturierung von sysnapshot die ich heute begonnen habe, genau genommen habe ich sysnapshot von Grund auf neu geschrieben. Neben der Funktion wie viele Backups Maximal auf der Festplatte sein dürfen (älteste Backup wir gelöscht) kam nun eine Funktion wie viel freier Speicher die Festplatte haben muss, damit ein Backup geschrieben wird.

Die Funktion cleaner löscht solange alte Backups bis die Festplatte wieder den gewählten Freien Speicher hat.

Ich denke auch über eine Funktion nach, die überprüft ob mehr als ein Backup möglich ist bzw. ob überhaupt ein Backup geschrieben werden kann.

Der derzeitige veröffentlichte Code hat nur eine Methode und besteht aus mehreren IF ELSE END Konstrukte, was nicht gerade schön ist. Im neuen Code kann ich zwar nicht komplett darauf verzichten, aber dort wo es mir möglich war setze ich nun HASHES.

Einige Tests habe ich heute mit ARRAY und HASHES gemacht um evtl. von den Linux Befehlen weg zu kommen, somit wäre es möglich sysnapshot nicht nur unter Linux zum laufen zu bekommen, Aber die Performance leitet darunter sehr, deswegen wird sich erst mal daran nichts ändern.

Und hier ein paar Codeschnippel

  # -- create cfg hash ---------------------------------------------------------------------
  cfg = {}

  # for simple notation
  destination = "#{config['mountpoint']}/#{config['destination'].gsub('/', '')}/#{hostname}"

  key = :destination
  cfg.key?(key) ? cfg[key] << key.to_s : cfg[key] = [destination]

  key = :source
  cfg.key?(key) ? cfg[key] << key.to_s : cfg[key] = [config['source']]

  .....

  # -- check_device ------------------------------------------------------------------------
  check_device(cfg)

.....

 def cleaner(cfg, ifdevice, tobefree)
  begin
    avail_space = `/bin/df -B 1048576 | /bin/grep #{ifdevice} | /usr/bin/awk '{print $4}'`.chomp.to_i
    avail = avail_space / 1024
    Dir.chdir(cfg[:destination].to_s)
    puts "Cleaning ..."
    while avail < tobefree do
      path = Dir["????-??-??_*"].sort.reverse.first
      puts "delete backup: #{path}"
      system("/bin/rm -rf #{path}")
      avail_space = `/bin/df -B 1048576 | /bin/grep #{ifdevice} | /usr/bin/awk '{print $4}'`.chomp.to_i
      avail = avail_space / 1024
      puts "Device #{ifdevice} : available hard disk space #{avail} GB"
    end
  rescue
    puts "Error: Cleaning Fail"
    exit
  end

Privacy-by-Default Petition

Privacy-by-Default

das ist eine Sache die ich vollkommen unterstütze. Ich habe („Nicht Öffentlich“) unterschrieben.

Bemerkenswert finde ich, dass diese Option „Privacy-by-Default“ war/ist.
So wie in der Petition gefordert.

Wer sich mit dem Thema Datenschutz beschäftigt und auch den darin liegenden Sinn erkannt hat, muss nicht aufgefordert werden zu Unterschreiben, die tun es einfach.

Quelle: http://openpetition.de/petition/online/datenschutzfreundliche-voreinstellungen

Sandy

Beitragsnavigation

%d Bloggern gefällt das: