Google Chrome

http://images.t-error.ch/blog/794/chrome.jpg

Googles neuster Wurf macht einen guten ersten Eindruck. Er läuft schnell und bisher ohne grosse Macken. Der RAM-Verbrach liegt schon etwas unter dem vom Firefox, wobei natürlich noch keine Plugins installiert sind.
Aus den Socken hat es ich bisher noch nicht gehauen, aber bisher sieht es sehr interessant aus, mal sehen, wie es weiter geht und wann die Linux Variante des Browsers folgt.

Dateien mit robocopy sichern

Heute wollte ich mit xcopy ein Backup der Daten von einem Computer auf eine externe Festplatte machen. Noch einiger Zeit ist xcopy allerdings mit der Fehlermeldung Nicht genügend Arbeitsspeicher.
xcopy c:\ e:\backup\ /c /f /y /e /h
.....
Nicht genügend Arbeitsspeicher
3519 Datei(en) kopiert


Da alle neuversuche nichts gebracht haben, habe ich eine Alternative gesucht und in robocopy auch gefunden. robocopy ist im Windows Server 2003 dabei und kann gratis heruntergeladen werden.
Nach der Installation musste ich zuerst die Datei robocopy.exe von C:\Programme\Windows Resource Kits\Tools/ nach C:\WINDOWS\system32 kopieren.

Nun konnte ich mit Robocopy die Dateien auf die Festplatte kopieren.
robocopy c:\ e:\backup\ /E /Z /R:2 /W:1 /TEE /LOG:e:\log.txt


Noch kurz zu den Parameteren:
  • Mit /E werden alle Verzeichnisse (auch leere) kopiert.
  • /Z wird der Kopiervorgang im "restartable mode" gestartet. Das heisst, bei einem Abbruch muss man nicht von vorne beginnen.
  • /R:2 die Anzahl der "Retries", wenn eine Datei nicht kopiert werden kann.
  • /W:1 Die Zeit in Sekunden, sie zwischen den Retries gewartet werden soll.
  • /TEE Gibt die Ausgabe auch in die Konsole zurück.
  • /LOG Gibt das Logfile an

Windows Uptime ermitteln

Wer wissen möchte, wie lange ein Windows Computer/Server schon läuft, bzw. wann er gestartet wurde hat zwei möglichkeiten.

Zum einen gibt es den Befehl net statistics server den man in der cmd eingeben kann. Die Ausgabe kann dan folgendermassen aussehen:
Serverstatistik für \\HOSTNAME


Statistik seit 27.06.2008 22:06


Akzeptierte Sitzungen            21
Zeitüberschrittene Sitzungen     276
Sitzungsabbruch wegen Fehler     2045

Kilobytes gesendet               255056937
Kilobytes empfangen              98783500

Mittlere Antwortzeit (ms)        0

Systemfehler                     0
Berechtigungsverstöße            5410
Kennwortverstöße                 81

Dateizugriffe                    3119902
DFÜ-Hardwarezugriffe             0
Gespeicherte Druckaufträge       0

Anzahl Pufferüberläufe

  Große Puffer                   0
  Anfragepuffer                  0

Der Befehl wurde erfolgreich ausgeführt.

Hier sieht man ganz oben, dass der Server am 27.06.2008 um 22:06 gestartet wurde. Nebenbei gibt noch einige andere interessante Daten.


Die andere Möglichkeit ist das Tool uptime.exe welches man bei Microsoft gratis herunterladen kann. In der cmd ausgeführt zeigt es an, wie lange der Server schon läuft. Das kann da so aussehen:
\\SERV01 has been up for: 41 day(s), 12 hour(s), 2 minute(s), 46 second(s)


Beide Möglichkeiten erfüllen ihren Zweck, die erste Variante hat allerdings den Vorteil, dass man nichts herunterladen muss.

Linux mit Samba als Windows Domänenmitglied

Im Geschäft hatten wir eine USB-Festplatte, auf welcher wir sehr viele Bilder für die Katalogproduktion hatten. Das funktionierte recht gut, nur war es recht umständlich, da man die Festplatte immer wieder von einem Computer an den anderen anschliessen mussten. Die ideale Lösung ist also, wenn man die Bilder auf einem Server platziert, damit alle Leute darauf zugriff haben. Eine Bedingung ist, dass alle Leute die Bilder ansehen, aber nur bestimmte Mitarbeiter darauf zugreifen können.
Ich habe das ganze mit einem Linux-Server mit Samba gelöst, welcher an die Windows-Domain angeschlossen wurde. Hier nun eine kleine Anleitung, wie das bei mit funktioniert hat.

Ausgangslage

Domain: MUSTER.LOCAL
DNS-Server: 192.168.1.10

Domaincontroller
OS: Windows 2003 SP 2
Hostname: SERV01
IP: 192.168.1.10

Linux Server
OS: Ubuntu Linux 8.04 Server (2.6.24-16-server)
Hostname: SERV02
IP: 192.168.1.11

Software

Installiert werden muss Samba, Winbind und Heimdal. Bei mir in den folgenden Version (direkt über apt)
  • Samba 3.0.28a
  • Winbind 3.0.28a-1ubuntu4
  • heimdal-clients 0.7.1-1ubuntu3

Installation

Kerberos


Kerberos wird zur Authentifizierung am Windows-Server verwendet. Will sich also ein Benutzer am SERV02 anmelden, so sendet dieser die Anfrage an den SERV01 (PDC) weiter und erhält von dem die Nachricht, ob Benutzername und Passwort korrekt sind. So kann man direkt die Benutzer und Gruppen aus der Active-Directory verwenden, was die Benutzerverwaltung sehr vereinfacht. Kerberos ist im Packet Heimdal enthalten.
Konfigurieren muss man die Datei /etc/krb5.conf. Dazu muss man zuerst eine Realm (einen Bereich) konfigurieren und dort ein KDC (Kerberos Distribution Center) angeben und dann der Domain den Berich zuweisen. Wichtig ist hier, dass auf die Gross- und Kleinschreibung geachtet wird. Meine Konfigurationsdatei sieht so aus:
[libdefaults]
        default_realm = MUSTER.LOCAL
        clockskew = 300

[realms]
        MUSTER.LOCAL = {
                kdc = SERV01.MUSTER.LOCAL
        }

[domain_realm]
        .muster.local = MUSTER.LOCAL

[logging]
#       default = SYSLOG:NOTICE:DAEMON
        default = FILE:/var/log/krb/krb5libs.log
        kdc = FILE:/var/log/krb/kdc.log
        kadmind = FILE:/var/log/krb/kadmind.log

[appdefaults]
        pam = {
                ticket_lifetime = 1d
                renew_lifetime = 1d
                forwardable = true
                proxiable = false
                retain_after_close = false
                minimum_uid = 0
                debug = false
        }

Nun kann man mit dem Befehl kinit den Kerberos Client (Linux) am Server (Windows) authenifizieren. Dies funktioniert mit dem folgenden Befehl:
kinit Administrator@MUSTER.LOCAL

Wichtig ist wieder, dass auf die Gross- und Kleinschreibung geachtet wird und dass die Namensauflösung funktioniert. Ein ping auf serv01 sollte hier im Beispiel 192.168.1.10 zurückgeben.

Samba


Jetzt kann Samba über die Datei /etc/samba/smb.conf konfiguriert werden. Wichtig sind die Rot markierten Zeilen.
[global]
   workgroup = MUSTER
   server string =
   netbios name = serv02
   realm = MUSTER.LOCAL
   idmap uid = 10000 - 15000
   idmap gid = 10000 - 15000
   winbind separator = /
   winbind use default domain = yes
   password server = serv01.muster.local
   security = ADS
   client use spnego = yes
   dns proxy = no
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   encrypt passwords = yes
   passdb backend = tdbsam
   obey pam restrictions = yes
   invalid users = root
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n *password\supdated\ssuccessfully* .
   socket options = TCP_NODELAY

  • workgroup: Die Arbeitsgruppe. Sollte gleich dem Domänennamen sein
  • netbios name: Der Netbios Hostname des Servers
  • realm: Der Bereich. Gleich dem Bereich in der Kerberos Konfiguration
  • idmap uid: Bereich der genutzt wird um die Domänenbenutzer auf die Linux Benutzer zu mappen
  • idmap gid: Bereich der genutzt wird um die Domänengruppen auf die Linux Gruppen zu mappen
  • winbind seperator: Das Trennzeichen zwischen der Domäne und dem Benutzer
  • winbind use default domain: Definiert, ob Winbind auch mit dem Benutzernamen arbeitet, wenn keine Domäne angegeben wurde.
  • password server: Der Server, welcher die Passwörter validiert.
  • security: Definiert, dass Samba als ADS Mitglied arbeiten soll
  • client use spnego: Aktiviert SMB Singing

Nun muss man den Samba Server noch in die Domäne aufnehmen. Das macht man seit Samba 3.* nicht mehr mit smbpasswd sondern mit dem net Befehl:
net join -S serv01 -UAdministrator%password


Wenn alles geklappt hat muss man Linux noch mitteilen, dass Benutzeranfragen an winbind weitergeleitet werden sollen. Dies macht man in der Datei /etc/nsswitch.conf. Dort muss man die Zeilen passwd und group anpassen. Sie sollten schlussendlich so aussehen:
passwd:         files winbind
group:          files winbind


Nach einem Neustart von Samba und Winbind kann man prüfen, ob die Konfigurationsarbeit erfolgreich war. Die folgenden Befehle sollten alle Benutzer, bzw Gruppen der Windows Domäne anzeigen.
wbinfo -u
wbinfo -g

Shares einrichten

Sollte bisher alles funktioniert haben, kann man jetzt die Shares im Samba einrichten. Ich habe einen Share names Bilder gemacht, auf welchen alle Zugriff haben, aber nur eine bestimmte Gruppe schreiben kann.
[bilder]
   comment = Bilder
   path = /home/bilder
   public = yes
   read only = no
   guest ok = no
   browseable = yes
   valid users = @muster/alle
   admin users = @muster/abteilung, muster/user


Hier noch die Unterschiede zwischen Lokalen-/Domänenbenutzen-/Gruppen.
# lokaler user
valid users = user

# domain user
valid users = muster/user

# lokale gruppe
valid users = @group

# domain gruppe
valid users = @muster/group

Quellen


Im Internet gibt es schon einige Anleitungen dazu. Hier möchte ich diejenigen Auflisten, die mich am meisten weitergebracht haben:
  • http://www.pro-linux.de/work/server/samba3-domaene.html
  • http://www.administrator.de/Samba_in_Windows_Dom%C3%A4ne.html

Adminpack unter Windows Vista

Über das Adminpack für Windows XP habe ich ja bereits geschrieben. Eine wirklich praktische Sache, da man nicht immer über Remote-Desktop auf den Server verbinden muss, wenn man etwas in der Active-Directory anpassen will.
Da ich mich im Geschäft nun mit Vista herum schlage, wollte ich auch hier das Adminpack installieren. Also erstmal die neuste Version herunterladen und installieren. Das alles funktionierte ohne Probleme. Nur beim hinzufügen der Snap-Ins fehlten einige wichtige, wie zum Beispiel die Benutzerverwaltung.
Also schnell im Internet suchen und siehe da. Es gibt kein Adminpack für Vista und den Server 2003. Toll, danke! Aber es gibt einen Hack. Einfach die Befehle in eine neue Datei kopieren, diese als mmc.cmd abspeichern und dann als Administrator ausführen. Beim erneuten öffnen der MMC kann man nun alle Snap-Ins auswählen.
http://images.t-error.ch/blog/716/mmc.jpg


Hier die Codes für die mmc.cmd
regsvr32 /s adprop.dll
regsvr32 /s azroles.dll
regsvr32 /s azroleui.dll
regsvr32 /s ccfg95.dll
regsvr32 /s certadm.dll
regsvr32 /s certmmc.dll
regsvr32 /s certpdef.dll
regsvr32 /s certtmpl.dll
regsvr32 /s certxds.dll
regsvr32 /s cladmwiz.dll
regsvr32 /s clcfgsrv.dll
regsvr32 /s clnetrex.dll
regsvr32 /s cluadmex.dll
regsvr32 /s cluadmmc.dll
regsvr32 /s cmproxy.dll
regsvr32 /s cmroute.dll
regsvr32 /s cmutoa.dll
regsvr32 /s cnet16.dll
regsvr32 /s debugex.dll
regsvr32 /s dfscore.dll
regsvr32 /s dfsgui.dll
regsvr32 /s dhcpsnap.dll
regsvr32 /s dnsmgr.dll
regsvr32 /s domadmin.dll
regsvr32 /s dsadmin.dll
regsvr32 /s dsuiwiz.dll
regsvr32 /s imadmui.dll
regsvr32 /s lrwizdll.dll
regsvr32 /s mprsnap.dll
regsvr32 /s msclus.dll
regsvr32 /s mstsmhst.dll
regsvr32 /s mstsmmc.dll
regsvr32 /s nntpadm.dll
regsvr32 /s nntpapi.dll
regsvr32 /s nntpsnap.dll
regsvr32 /s ntdsbsrv.dll
regsvr32 /s ntfrsapi.dll
regsvr32 /s rasuser.dll
regsvr32 /s rigpsnap.dll
regsvr32 /s rsadmin.dll
regsvr32 /s rscommon.dll
regsvr32 /s rsconn.dll
regsvr32 /s rsengps.dll
regsvr32 /s rsjob.dll
regsvr32 /s rsservps.dll
regsvr32 /s rsshell.dll
regsvr32 /s rssubps.dll
regsvr32 /s rtrfiltr.dll
regsvr32 /s schmmgmt.dll
regsvr32 /s tapisnap.dll
regsvr32 /s tsuserex.dll
regsvr32 /s uddi.mmc.dll
regsvr32 /s vsstskex.dll
regsvr32 /s w95inf16.dll
regsvr32 /s w95inf32.dll
regsvr32 /s winsevnt.dll
regsvr32 /s winsmon.dll
regsvr32 /s winsrpc.dll
regsvr32 /s winssnap.dll
regsvr32 /s ws03res.dll

Ordnergrösse unter Windows anzeigen

http://images.t-error.ch/blog/599/ordnergroesse_01.jpgStandardässig zeigt der Windowsexplorer in der Detailansicht nur die Grösse von einzelnen Dateien an. Wenn man die Grösse von einem Ordner haben will, muss man diesen mit der rechten Maustaste anklicken und dann noch Eigenschaften anwählen. Wenn man zum Beispiel wissen will, welcher Ordner der grösste ist, kann das so recht aufwändig werden.
Abhilfe schafft hier das Opensource Programm Foldersize. Das Programm, welches unter Windows 2000 und XP läuft, zeigt in der Detailansicht die Grösse von Ordnern an. Die Installation ist sehr einfach, man muss nur die MSI Datei ausführen und den Anweisungen folgen. Wenn man das Programm installiert hat, muss man der Ansicht noch angeben, dass die Ordnergrösse angegeben wird. Also alle Explorer Fenster schliessen, ein neues öffnen und dann mit der rechten Maustaste auf die Spaltenbeschriftung, dort Grösse deaktivieren und Ordnergrösse aktivieren.

Nun wird in der Detailansicht auch die Grösse der Ordner angezeigt. Das ganze funktioniert auf lokalen- und Netzlaufwerken. Auf Shares klappt es nicht.
http://images.t-error.ch/blog/599/ordnergroesse_02.jpg

Startscripts mit Gruppenrichtlinien ausführen

Über die Gruppenrichtlinien von einem Windows 2003 Server habe ich ja bereits beschrieben. Heute habe ich nun eine kleine Umstellung im Bezug der Startscripts gemacht. Also eigentlich nicht direkt am Startscript, sondern an der Ausführung.
Wie verwenden ein KIX Script, welches die Laufwerke der User verbindet. Das Script war bisher in der Active Directory bei jedem User als Logonscript eingetragen. Das funktioniert zwar tadellos, ist aber etwas unschön, da es wirklich bei jedem Benutzer eingetragen sein muss.
http://images.t-error.ch/blog/556/script_user.jpg


Die Alternative ist das Script über eine Gruppenrichtlinie zu starten. Einmal definiert kann man diese Richtlinie mit der Domäne verknüpfen und schon haben alle User dasselbe Startscript. Bei einer Änderung des Scripts, muss man die Änderung nur einmal vornehmen.

Dazu habe ich eine neue Richtline erstellt und mal der OU IT zugewiesen. Zum testen ist das Ideal, da ich der einzige Benutzer in dieser OU bin. Nun muss man diese Richtline auch noch bearbeiten.
http://images.t-error.ch/blog/556/gpo_edit.jpg


Im ersten Schritt gebe ich das Script an, welches ausgeführt werden soll. Zu finden ist dieser Eintrag hier:
Benutzerkonfiguration -> Windows-Einstellungen -> Skripts (Anmelden/Abmelden) -> Anmelden
Dort kann man nun das Script, welches beim Start ausgeführt werden soll, angeben. Standardmässig wird das Script im folgenden Pfad gesucht:
\\domain\SysVol\domain\Policies\{F4164071-158E-4E5D-8111-1E0754AB2FFE}\User\Scripts\Logon
Allerdings kann man mit durchsuchen auch einen andern Pfad angeben. Das Script muss über das Netzwerk einfach erreichbar sein.
http://images.t-error.ch/blog/556/script.jpg


Der Script ist angegeben. Soweit, so gut. Da bei uns ein schöne Script eingesetzt wird, welches den Benutzer mit dem Namen begrüsst (sehr höflich), soll das Script auch angezeigt werden. Denn Standardmässig ist das nicht der Fall. Also weiter in den tiefen der Richtlinien. Man navigiere hierhin:
Benutzerkonfiguration -> Administrative Vorlagen -> System -> Skripts
Dort die Option "Anmeldeskipts sichtbar ausführen" aktivieren. Done...
http://images.t-error.ch/blog/556/sichtbar.jpg


Zum Schluss kann man das ganze noch etwas tunen. Da in dieser Richtlinie nur Einstellungen bei der Benutzerkonfiguration vorgenommen wurden, muss der Server ja nicht nach Einstellungen in der Computerkonfiguration suchen. Dies lässt sich in den Details der Richtlinie deaktivieren. Einfach bei Objektstatus "Computerkonfigurationseinstellungen deaktivieren" (was für ein Wort) auswählen.
http://images.t-error.ch/blog/556/objektstatus.jpg


Natürlich möchte man das auch testen. Vor dem Abmelden zur Sicherheit noch ein gpupdate /force ausführen, dann Abmelden und wieder Anmelden. Das Startscript sollte nun ausgeführt werden und die Laufwerke verbunden sein.

Access-based Enumeration

Im MCSA Kurs vom letzten Samstag wurden wir auf die Windows Server 2003 Access-based Enumeration aufmerksam gemacht. Ich habe dies nun auf unserem Server installiert und möchte nun kurz etwas darüber schreiben.

Was ist die Access-based Enumeration

Manche kennen es ja sicher schon, denn neu ist es nicht. Access-based Enumeration ist ein Programm, welches man auf einem Windows 2003 Server installieren kann . Damit ist es möglich Ordner, auf die ein Benutzer keinen Zugriff hat zu verstecken. Um zu erklähren wie das geht mache ich hier ein kleines Beispiel:
Angenommen eine Firma hat einen Share namens GROUP und darin mehrere Ordner. Einer davon heisst Buchhaltung und darauf hat natürlich nicht jeder Benutzer Zugriff. Trotzdem sieht jeder Benutzer, der den Share GROUP öffnet diesen Ordner. Access-based Enumeration setzt genau dort an. Ist es auf dem Share GROUP aktiviert sehen nur Benutzer, die auch Zugriff auf diesen Ordner haben den Ordner. So wird es wohl einige "Zugriff verweigert" Meldungen weniger geben. Zudem ist es auch Sicherheitstechnisch interessant, denn "Was ich nicht weiss, macht mich nicht heiss". Ein Benutzer versucht kaum einen Ordner zu öffnen, den er nicht sieht.

Installation

Die Installation ist wirklich sehr simpel. Als erstes muss man die Installatrionsdatei herunterladen. Nun kann man die MSI Datei auf dem Server ausführen und den Anweisungen folgen.
http://images.t-error.ch/blog/542/install.jpg


Konfiguration

Die Access-based Enumeration kann man nur auf einem Netzwerk-Share ein- oder ausschalten. Das Konfigurationsfenster öffnet man mit einem Rechtsklick auf einen Share und dann Eigenschaften, Access-based Enumeration. Dort kann man es nun ein- bzw. Ausschalten. Das war es auch schon mit der Konfiguration. Mit einer zweiten Checkbox kann man die Einstellung noch für alle Shares auf dem Server übernehmen.
http://images.t-error.ch/blog/542/config.jpg


Demo

Bei mir hat alles wunderbar geklappt. Die Benutzer sehen nun nur noch die Ordner, die auf denen sie auch Leseberechtigungen haben. In meiner Meinung ein sehr praktisches Tool.

Vorher:
http://images.t-error.ch/blog/542/enumeration_01.jpg


Nachher:
http://images.t-error.ch/blog/542/enumeration_02.jpg

Benutzerauthentifizierung mit PHP an einem LDAP Server

Vor längerer Zeit habe ich hier schonmal geschrieben, dass ich an einer PHP Applikation im Geschäft Arbeite. Lieder bin ich da in der letzten Zeit kaum dazugekommen, aber jetzt sieht es doch wieder etwas besser aus.

Diese Applikation hat auch einen geschützten Bereich, wo man sich anmelden muss. Nun wäre es möglich die Benutzerdaten in einer Datenbank zu speichern. Das hätte aber den Nachteil, dass die Benutzer an mehreren Orten verwalten müsste. Nämlich in der mySQL Datenbank und in der Active Directory von unserem Windows 2003 PDC. In der AD müssen die Benutzer ja zwangsläufig gespeichert werden, warum also nicht diese Benutzer zur Authentifizierung in der PHP Applikation verwenden.

Mit LDAP funktioniert das recht einfach, denn wenn man sich mit einem Benutzer über LDAP am PDC anmelden kann, hat man einen gültigen Account. So sieht es in der Theorie aus.

Die Praxis ist da recht ähnlich. Zuerst muss man die LDAP Befehle installieren. Unter Ubuntu funktioniert das so:
sudo apt-get install php5-ldap

Ich habe dann ein kleines Script gebastelt, welches eine Verbindung zum Server herstellt und sich dann versucht einzuloggen. Das sieht so aus:
<?
$conn
=ldap_connect("server")or die("could not connect to the server");

if(@
ldap_bind($conn,"domain\username","password"))
{
    echo 
"login ok";
}
else
{
    echo 
"login falsch";
}

ldap_close($conn);
?>


Wichtig ist, dass man den Benutzernamen im Format domain\username angibt.

Adminpak: MMC für Windows XP

Einen Windows 2003 Server verwaltet man ja am einfachsten über die MMC (Mickey Mouse Club Microsoft Management Console), welche auf dem Server installiert ist. Nun möchte man aber nicht immer an den Server gehen und dort arbeiten, oder Remote auf dem Server arbeiten. Am besten installiert man einfach die MMC auf dem eigenen Computer. Das ganze ist recht simpel, denn man muss nur das Microsoft Administrartion Tools Pack installieren. Entweder aus dem Internet oder von der Windows 2003 im i386 Ordner. Einfach die adminpak.msi Datei installieren.

Schon kann man die gewünschten Snap-Ins hinzufügen und bequem vom eigenen Arbeitsplatz aus den Server verwaltet. So werden auch die ds-Befehle (dsadd, dsmove, dsremove usw.) installiert.
http://images.t-error.ch/blog/515/mmc.jpg