Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

tech struktur2 140x135 Mongoose Verbindung zur MongoDB Datenbank mit auth ParameterIn einem aktuellen Webprojekt verwende ich MongoDB als Datenbank und die Node Erweiterung mongoose als Aufsatz. mongoose ist für alle Entwickler, die bisher pur auf der MongoDB arbeiten, definitiv einen Blick wert.
Anfangs wurde lokal auf dem PC programmiert, mittlerweile beginnen wir den Umstieg auf einen Webhoster. Dabei ergab sich ein Problem, dass ich kurz erläutern möchte.

Die Mongoose Verbindung zur Datenbank erfolgt anhand eines Connection Strings, der bei einer Standardinstallation aller Komponenten sehr einfach aussehen kann:

var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/proorg-test");

Dieser String verwendet localhost als Server, den Standardport von MongoDB 27017, die Datenbank “proorg-test” und keine Authentifizierung. Das reicht für den Anfang und funktioniert gut.

Nach dem Umstieg auf einen (shared) Webserver trifft man jedoch meistens eine andere MongoDB Installation an. Oftmals wird diese mit dem Parameter –auth eine Authentifizierung erfordern, einen anderen Port nutzen und vielleicht auch einen anderen Server verwenden.
Neben den zusätzlichen Angaben für Server, Port und User muss man Mongoose jetzt auch befehlen, sich explizit an der “Admin Tabelle” zu authentifizieren. Dies ist meisten die admin Tabelle, in der auch ein Admin Nutzer, dessen Daten im Connection String stehen, enthalten sein sollte.

var mongoose = require("mongoose");
mongoose.connect("mongodb://mongodb_admin:r0OtP4s$w0rd@localhost:20718/proganizer", {auth:{authdb:"admin"}});

Dieser String enthält jetzt den wichtigen Teil {auth:{authdb:”admin”}}, damit Mongoose sich mit dem mongodb_admin an der admin Tabelle authentifiziert.

Mehr dazu auch in den MongoDB Security Tutorials.

logo trans 2012 140x78 Mongoose Verbindung zur MongoDB Datenbank mit auth ParameterAn dieser Stelle auch big shoutouts an uberspace.de, der sympathische deutsche Webhoster mit “Preis-selber-wählen” Prinzip und einem riesigen Arsenal an vorinstallierten, vorkonfigurierten und bestens dokumentierten Server- und Entwickler-Tools. Ein kleiner Einblick: “SSH. Perl. PHP. Python. Ruby. node.js. Erlang. Lua. Compiler. FastCGI. MySQL. CouchDB. MongoDB. Cronjobs. HTTPS. IMAP. SMTP. Webmail. qmail. vmailmgr. maildrop. Spam­Assassin. ezmlm-idx. DSPAM. ~/service. runwhen. Eigene Logs. Backups. 10 GB Plattenplatz. Und das ist nur der Anfang.”

Mögliche Fehlermeldungen:
Dieser Fehler würde auftreten, wenn trotz –auth Parameter bei MongoDB der Standard Connection String benutzt würde:
assertion 16550 not authorized for query on proganizer.users ns:proganizer.users query:{ username: “SchurigH” }
Wenn man nur Benutzername und Passwort eingibt, ohne den auth Parameter von Mongoose einzustellen, also

mongoose.connect("mongodb://schurigh_mongoadmin:r0OtP4s$w0rd@localhost:20718/proganizer");

, dann kommt:
auth: couldn’t find user schurigh_mongoadmin@proganizer, proganizer.system.users
Und selbst wenn man jetzt in proganizer.system.users einen neuen Admin User erstellt – das ginge mit db.addUser({user:”proganizer_admin”, pwd: “*****”, roles: [ "readWrite", "dbAdmin" ]}); – würde das nicht funktionieren. Ohne {auth:{authdb:”admin”}} geht es nicht.


Registry Werte aus der Registry auslesen ist ein alter Hut, no problem. Auch ganze Pfade aus der Registry lesen stellt grundsätzlich kein Problem dar. Schwierig wird es jedoch, wenn der auszulesende Pfad Leerzeichen enthält. Und seit Windows Vista enthalten ja fast alle Pfade ein Leerzeichen: C:\Program Files\…

Dieser Post dient der Zusammenfassung der wichtigsten Batch Registry Abfragen.

Einfache Werte und Pfade ohne Leerzeichen

@echo on & Color 9f & setlocal
REM einfache Werte
set ff=0
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set ff=%%c
echo %ff%

REM einfache Pfade
set spath=0
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Ghisler\Total Commander" /v "IniFileName"^|findstr "IniFileName"') do set spath=%%c
echo %spath%

Also eine festgelegte Anzahl an Tokens, Leerzeichen als Delimiter, der dritte Token ist der Registry Wert. Token 1 und 2 sind der Name des Registry Werts und der Wert-Typ.

Werte oder Pfade mit Leerzeichen

REM Werte mit Leerzeichen
set value=0
for /f "usebackq skip=2 tokens=1,2*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /v "Startmenu"`) do set value=%%c
echo %value%

REM Pfade mit mehreren Leerzeichen
set path1=0
set path2=0
REM Möglichkeit 1: mit Option usebackq, /ve (liest den (Standard) Wert aus)
for /f "usebackq skip=2 tokens=1,2*" %%a in (`reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve`) do set path1=%%c
echo %path1%
REM Möglichkeit 2: ohne Option usebackq
for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve') do set path2=%%b
echo %path2%

Für Werte oder Pfade mit Leerzeichen müssen 3 Dinge beachtet werden:
1. Die Delimiter entfallen.
2. Tokens empfangen mit * mehrere durch Leerzeichen getrennte Werte und packen sie in den letzten Token zusammen; den wir dann abfragen.
3. Bei der Methode 1 mit usebackq müsst ihr unbedingt auf die Anführungszeichen achten! Der komplette Inhalt in den Klammern wird mit einem “backquote”, also `, eingeschlossen. Das ` ist kein ” und kein ‘ und kein ´ usw, achtet darauf! Alle anderen Angaben kommen wie gewohnt in doppelte Anführungszeichen. Bei der Methode ohne usebackq kommt der Klammerinhalt in normale einfache Anführungszeichen ‘.

Das Ergebnis aller obrigen Code-Schnipsel:
registry werte mit batch auslesen mit leerzeichen usebackq Batch   Registry Werte mit und ohne Leerzeichen auslesen


Firefox 26.0 AD Script Deployment (Update)

Meine letzten Posts zum Firefox Script Deployment sind schon etwas älter: 17.0.2, 9.0, 8.0.1.
Sie beschreiben die zugrundeliegende Technik, mit der Firefox verteilt werden kann. Ich möchte das hier für die aktuellste Version 26.0 zusammenfassen.

Firefox 26.0

Das Installationsscript:

@echo off & Color 9f & setlocal
set wd=\\lea\Deployment\Software\Firefox
set log=%wd%\firefox.log
set tools=\\lea\Deployment\Sonstiges\tools
set instversion=0.0
set retry=0
set versionEL=9
set instEL=999
REM ######## EDIT THIS ####
set newversion=26.0
REM #######################

REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto check
::goto end

REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end

:check
REM prüfe ob eine 32bit Version von Firefox schon installiert ist
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c
REM falls keine 32bit Version von Firefox gefunden wurde, prüfe 64bit
if "%instversion%"=="0.0" for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c

REM Wenn Version nicht gleich: vergleiche Versionen mit dem Versionchecker
%tools%\VersionCompare.exe %instversion% %newversion%
set versionEL=%errorlevel%
if "%versionEL%"=="-1" goto install
if "%versionEL%"=="0" echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %log% & goto end
if "%versionEL%"=="1" echo %date% %time:~0,8% - %computername% hat bereits %instversion% (neuer) installiert >> %log% & goto end

:install
echo %date% %time% - %computername% (%instversion%) installiert %newversion%... >> %log%
taskkill /F /IM firefox.exe
ping localhost -n 2
"%wd%\Firefox%newversion%.exe" -ms
set instEL=%errorlevel%
if %instEL%==1618 goto retry REM msiexec process in use, installation already in progress (eg. windows updates running)
if %instEL%==1602 goto retry REM user canceled installation (eg. taskkill)
if %instEL%==1603 goto retry REM fatal error, some use it for "already installed" (eg. java)
::if %instEL%==1638 goto uninstall REM another product is already installed, denies an update

REM Install 32-bit customisations
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Firefox\defaults\preferences"

REM Install 64-bit customisations
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Firefox\defaults\preferences"

echo %date% %time% - %computername% Installation abgeschlossen, Errorlevel %instEL% >> %log%
goto end

:retry
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% hatte den Fehler %instEL%, retry in 5min... >> %log%
set retry=1
REM 5 Minuten warten
ping localhost -n 300 > nul
goto install

:retryfailed
echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, %instEL%, RETRY FAILED! >> %log%
goto end

:uninstall
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% deinstalliert Version %instversion% aufgrund EL 1638 Fehler... >> %log%
taskkill /F /IM firefox.exe
start /w "%programfiles%\Mozilla Firefox\uninstall\helper.exe" -ms
start /w "%programfiles(x86)%\Mozilla Firefox\uninstall\helper.exe" -ms
echo %date% %time:~0,8% - %computername% - %instversion% fertig deinstalliert, retry... >> %log%
set retry=1
goto install

REM Removes Firefox Desktop Icon - Windows XP
::if exist "%allusersprofile%\Desktop\Mozilla Firefox.lnk" del "%allusersprofile%\Desktop\Mozilla Firefox.lnk" /S

REM Removes Firefox Desktop Icon - Windows 7
::if exist "C:\Users\Public\Desktop\Mozilla Firefox.lnk" del "C:\Users\Public\Desktop\Mozilla Firefox.lnk"

:end
endlocal

In Zeile 10 immer die aktuelle Version eintragen und den Installer entsprechend diesem Schema umbenennen: Firefox[Version].exe (z.B. Firefox26.0.exe)

local-settings.js:

pref("general.config.obscure_value", 0);
pref("general.config.filename", "mozilla.cfg");

mozilla.cfg:

//Firefox Default Settings

// Standard Browser Check
// pref("browser.shell.checkDefaultBrowser", true);

// Firefox Update Check
pref("app.update.enabled", true);

// stops the 'know your rights' button from displaying on first run
pref("browser.rights.3.shown", true);

// stops the request to send performance data from displaying
pref("toolkit.telemetry.enabled", false);

// Disable JS windows popping up without direct action from the user
// (as lots of porn and spam sites do)
pref("dom.disable_open_during_load", true);

// Syntax highlighting in View Source.
pref("view_source.syntax_highlight", true);

// Ein paar Anpassungen von http://www.amsys.co.uk/2013/blog/configuring-firefox-17-for-deployment/#.UPAXNuT8Jn4
// This will stop the ‘Thanks for installing Firefox’ from showing when first launching Firefox.
pref("app.update.showInstalledUI", false);
// This will stop another ‘Congratulations on installing Firefox’ screen when launching Firefox.
pref("browser.startup.homepage_override.mstone", "ignore");

Ich habe mal wieder alle Eigenschaften überprüft und alle veralteten Settings entfernt. Diese hier sollten alle noch stimmen.

override.ini:

[XRE]
EnableProfileMigrator=false

Datei install.ini hatte ich in den letzten Posts immer noch mit drin. Ich glaube jedoch, dass die Datei gar nicht mehr benutzt wird und habe sie mittlerweile aus meiner Verteilung entfernt.

Die Verteilung läuft bereits seit Langem ohne Probleme.
script based firefox 26 deployment log 460x164 Firefox 26.0 AD Script Deployment (Update)


Flash ist eine weitere Standardsoftware auf den meisten Windows PCs, die regelmäßig aktualisiert werden muss. Also wieder ein Fall für eine Verteilung im Netzwerk. Nach den letzten Deployments [Skype, Java, Reader (Update), Firefox/Thunderbird (Update)] ist die Verteilung von Flash fast ein Kinderspiel.

Anmerkungen

Wie üblich wird zuerst die Version aus der Registry gelesen, überprüft und schlussendlich erfolgt die Installation .exe Dateien:

start /w flash-%version%_IE.exe -install
start /w flash-%version%_OTHER.exe -install

Achtung: Flash muss in 2 verschiedenen Ausführungen installiert werden. Auf der Downloadseite ist die Rede vom Internet Explorer und “Plug-In basierten Browsern”; also praktisch allen anderen Browsern. Daher 2 aufeinanderfolgende Installationen.
In 99% der Fälle bereitet die Installation keine Probleme. Für die restlichen 1% habe ich auch in diese Verteilung Fehlererkennung und ein Retry eingebaut. Die Fehler 1618, 1602 und 1603 resultieren in einem erneuten Installationsversuch 5 Minuten später.

Konfiguration

Nach der Installation wird noch eine Konfigdatei kopiert, die Flash mit einigen wenigen Einstellungen versieht.
mms.cfg:

AutoUpdateDisable=1
SilentAutoUpdateEnable=0
SilentAutoUpdateVerboseLogging=0

flash deployment working dir mms config file scriptbasiertes Flash Deployment im AD – flexibel, angepasste Einstellungen, Logging, Retry
Die Datei könnt ihr natürlich so anpassen, wie ihr die Einstellungen wollt.

Verteilung

Hier das Installer Script für die aktuellste Flash Version:
flash-installer.bat:

@echo off & Color 9f & setlocal

set wd=\\lea\Deployment\Software\Flash
set log=%wd%\flash-log.txt
REM --- Version hier ändern ---
set version=12.0.0.38
REM ---------------------------
set tools=\\lea\Deployment\Sonstiges\tools
set flashieEL=999
set flashplEL=999
set combinedEL=999
set versionEL=999
set instversion=000
set retry=0

REM Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto check
::goto end

REM Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end

:check
REM check installed version
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayerPlugin" /v "Version"^|findstr "Version"') do set instversion=%%c
if "%instversion%"=="000" goto install
%tools%\VersionCompare.exe %instversion% %version%
set versionEL=%errorlevel%
if "%versionEL%"=="-1" goto install
if "%versionEL%"=="0" echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %log% & goto end
if "%versionEL%"=="1" echo %date% %time:~0,8% - %computername% hat bereits %instversion% (neu) installiert >> %log% & goto end

:install
echo %date% %time:~0,8% - %computername% (%instversion%) startet die Installation... >> %log%
start /w %wd%\flash-%version%_IE.exe -install
set flashieEL=%errorlevel%
start /w %wd%\flash-%version%_OTHER.exe -install
set flashplEL=%errorlevel%

if %flashieEL%==1618 goto retry REM msiexec process in use, installation already in progress
if %flashieEL%==1602 goto retry REM user canceled installation
if %flashieEL%==1603 goto retry REM fatal error, some use it for "already installed" (eg. java)
if %flashplEL%==1618 goto retry REM msiexec process in use, installation already in progress
if %flashplEL%==1602 goto retry REM user canceled installation
if %flashplEL%==1603 goto retry REM fatal error, some use it for "already installed" (eg. java)
if %flashieEL%==1041 echo %date% %time:~0,8% - %computername% strange 1041 open browser fail, end >> %log% & goto end
if %flashplEL%==1041 echo %date% %time:~0,8% - %computername% strange 1041 open browser fail, end >> %log% & goto end

set combinedEL=%flashieEL%%flashplEL%
echo %date% %time:~0,8% - %computername% hat die Installation abgeschlossen, errorlevel: %combinedEL% >> %log%
goto finish

:retry
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% hat nicht Errorlevel 00 erreicht, retry in 5min... >> %log%
set retry=1
ping localhost -n 300 > nul
goto install

:retryfailed
echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, RETRY FAILED! EL: %flashieEL% %flashplEL% >> %log%
goto end

:finish
REM copy flash config file for silent background updates
if "%processor_architecture%"=="x86" xcopy "%wd%\mms.cfg" "%systemroot%\System32\Macromed\Flash" /y & goto end
xcopy "%wd%\mms.cfg" "%systemroot%\SysWOW64\Macromed\Flash" /y
xcopy "%wd%\mms.cfg" "%systemroot%\System32\Macromed\Flash" /y
goto end

:end
endlocal

Anpassungen

In dem Script tragt ihr in Zeile 8 immer die gewünschte Version ein und benennt die Installationsdateien nach folgendem Schema um:
flash-[Version]_IE.exe (z.B. flash-12.0.0.38_IE.exe)
flash-[Version]_OTHER.exe (z.B. flash-12.0.0.38_OTHER.exe)
Die Verteilung besteht wie üblich aus den üblichen Verteilungsdateien, eurer angepassten Konfigurationsdatei mms.cfg und den umbenannten Installationsdateien.

Fertig!
script based flash deployment ad gpo files log 460x336 scriptbasiertes Flash Deployment im AD – flexibel, angepasste Einstellungen, Logging, Retry

Weiterführende Links:
Flash Downloads for Deployment
Ivan Dretvic’s Guide zu Flash 11 Deployment via GPO / 11.2 with auto-update
Adobe Flash Player Administration Guide


Datenschutz und Verschlüsselung sind große Themen zurzeit, seit der NSA Story wichtiger als je zuvor. In Zeiten von Whatsapp und Facebook wird trotzdem fröhlich weiter offen kommuniziert. Oftmals werden auch private, geheime oder sicherheitskritische Informationen in diesen Netzwerken verschickt, beispielsweise Bankdaten, Zugänge oder Passwörter.

Was nun aber tun, wenn man eine geheime Information schnell und einmalig an eine andere Person schicken muss?

OneTimeSecret.com! Diese Seite bietet einen unschätzbaren Service an, super einfach zu benutzen.
Informationen eingeben (bis zu 25.000 Zeichen sind möglich), ggf. ein Zugangsschlüssel (“Passphrase”)eingeben, Link generieren lassen.
onetimesecret.com generate secret 460x297 Private/Geheime Informationen einmalig im Internet teilen mit OneTimeSecret.com
Ist der Link erst einmal generiert kann die Information nicht mehr verändert werden. Mit Passphrases verschlüsselte Informationen werden nicht einmal mehr angezeigt.
onetimesecret.com generated secret page 460x250 Private/Geheime Informationen einmalig im Internet teilen mit OneTimeSecret.com
Tipp: speichert euch den Link dieser Seite. später könnt ihr auf dieser Seite erfahren, wann das Geheimnis abgerufen wurde.

Die Information kann nur ein einziges Mal über den generierten Link abgerufen werden. Danach wird sie direkt unwiderruflich gelöscht. Für Geheimnisse, die mit einer Passphrase verschlüsselt wurden, muss der Empfänger des Links natürlich auch die Passphrase erhalten.
onetimesecret.com view secret reply Private/Geheime Informationen einmalig im Internet teilen mit OneTimeSecret.com

Wie gesagt kann der Ersteller des Geheimnisses mit dem gespeicherten Link nach dem Erstellen seines Links jederzeit abfragen, ob seine Information abgerufen wurde.
onetimesecret.com generated secret recieved Private/Geheime Informationen einmalig im Internet teilen mit OneTimeSecret.com

Ich finde die Seite echt super praktisch und ebenso einfach zu benutzen. Ich werde sie bestimmt noch oft gebrauchen. Meine Empfehlung: niemals sensible Informationen in den heutigen Netzwerken oder Kommunikationswegen verteilen. Ein wenig paranoid könnte man eigentlich schon behaupten: Alles ist einsehbar icon wink Private/Geheime Informationen einmalig im Internet teilen mit OneTimeSecret.com




Admin

Sie möchten hier werben oder Sponsor auf längere Zeit werden? Ich garantiere Ihnen unschlagbare Preise bei meinen Besucherzahlen. Egal ob Banner, Textlinks oder andere Werbeformen. Informieren Sie sich bei mir unter werbung@hannes-schurig.de