dba:passwort_verschluesselt_hinterlegen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
dba:passwort_verschluesselt_hinterlegen [2018/05/31 14:35] – [Password Dialog in der Konsole starten] gpipperr | dba:passwort_verschluesselt_hinterlegen [2018/09/05 09:53] – gpipperr | ||
---|---|---|---|
Zeile 2: | Zeile 2: | ||
+ | **Veröffentlicht im Red Stack Magazin der DOAG, September 2018** | ||
**Das Problem: | **Das Problem: | ||
Zeile 94: | Zeile 95: | ||
Sehr komfortabel ist die Oracle Wallet als Secure External Passwort Store Lösung, mehr dazu unter | Sehr komfortabel ist die Oracle Wallet als Secure External Passwort Store Lösung, mehr dazu unter | ||
- | => [[dba:passwort_schuetzen# | + | => [[dba:oracle_secure_external_passwort_store|Secure External Passwort Store]] |
Zeile 202: | Zeile 203: | ||
</ | </ | ||
+ | |||
+ | {{ : | ||
siehe auch: | siehe auch: | ||
Zeile 213: | Zeile 216: | ||
==== Passwörter unter Linux sicher verwahren==== | ==== Passwörter unter Linux sicher verwahren==== | ||
- | Unter Linux wird das ganze deutlich | + | Unter Linux wird das ganze etwas schwieriger. Gerade |
+ | SSH und damit „openssl“ steht hier aber überwiegend zur Verfügung, bzw. es spricht sehr wenig dagegen das kostenfrei installieren zu lassen. | ||
- | SSH und damit openssl | + | Damit haben wir mit „openssl“ auf Linux ein Werkzeug |
- | D.h. wir haben mit openssl schon mal ein Werkzeug zur Verfügung, dass die kompliziertesten Verfahren beherrscht. | ||
- | Jetzt müssen wir nur noch einen Schlüssel finden, der länger ist als das Passwort. | + | Jetzt müssen wir nur noch einen Schlüssel finden, der möglichst |
Der Schlüssel muss erfüllen: | Der Schlüssel muss erfüllen: | ||
- | * Muss auf jeden Server dieser Welt eindeutig sein | + | * Muss auf jeden Server dieser Welt eindeutig sein. |
- | * Sollte länger | + | * Länger |
- | * Sollten so verborgen sein, dass es sich nicht so mit einem Blick erkenne lässt was wir uns da ausgesucht haben. | + | * Sollte |
- | * Sollte sich mit Linux Board mitteln auslesen lassen (wie gesagt, alle neue Software ist dem Hoster ein Graus) | + | * Einfaches erzeugen/ |
Solche Schlüssel können sein: | Solche Schlüssel können sein: | ||
* WWN oder UUID einer Devices, dass sich nicht so schnell ändert | * WWN oder UUID einer Devices, dass sich nicht so schnell ändert | ||
- | * MAC Adresse | + | * Hardware ID wie die MAC Adresse |
- | * Prozessor | + | * Eine eigene Routine in c die eine eindeutige |
- | Meist verwende ich einfach die UUI von /dev/sda1 als Schlüssel oder die Seriennummer des OS unter HP UX. | + | Meist verwende ich einfach die UUID von /dev/sda1 als Schlüssel oder die Seriennummer des OS unter HP UX. |
- | Hier ist der Phantasie überlassen durch Obfuscation das ganze etwas intransparenter zu erstellen. | + | |
+ | Hier ist es der Phantasie | ||
+ | |||
+ | |||
+ | ===Wie funktioniert das Ganze im Detail? | ||
+ | |||
+ | Das Passwort wird zu Beginn in einer Datei in Klarschrift hinterlegt und dann verschlüsselt. Das kann im Skript gleich beim nächsten Aufruf oder mit einem kleinen Hilfsskript vorab erfolgen. | ||
+ | |||
+ | |||
+ | |||
+ | „openssl“ dient im folgenden dazu die Konfigurationsdatei mit dem Passwort Store | ||
+ | zu verschlüsseln und stellt den kompliziertesten Teil des Ganzen dar. Über folgenden Aufruf „openssl des3 -salt -in ${PWDFILE} -out ${PWDFILE}.des3 -pass pass:" | ||
- | Über Openssl wird der Password Store verschlüsselt: | ||
<code bash> | <code bash> | ||
openssl des3 -salt -in ${PWDFILE} -out ${PWDFILE}.des3 -pass pass:" | openssl des3 -salt -in ${PWDFILE} -out ${PWDFILE}.des3 -pass pass:" | ||
Zeile 250: | Zeile 263: | ||
<code bash> | <code bash> | ||
- | # where to store the password | + | # password.conf.des3 |
- | + | PWDFILE=.password.conf | |
- | PWDFILE=${SCRIPTS_DIR}/ | + | |
export PWDFILE | export PWDFILE | ||
- | + | ||
- | # get SYSTEMIDENTIFIER for the encryption of the password | + | |
+ | # etwas Eindeutiges aus der Umgebung der Maschine auslesen | ||
+ | # Linux | ||
SYSTEMIDENTIFIER=`ls -l / | SYSTEMIDENTIFIER=`ls -l / | ||
export SYSTEMIDENTIFIER | export SYSTEMIDENTIFIER | ||
- | + | ||
- | ########################################################################## | + | # |
- | # Password | + | # Password |
encryptPWDFile () { | encryptPWDFile () { | ||
- | | + | / |
- | | + | # Remove orignal |
- | #debug printf "%s encrypt | + | rm ${PWDFILE} |
- | # remove the clear password file | + | |
- | | + | |
- | else | + | |
- | printError " | + | |
- | fi | + | |
} | } | ||
- | | + | |
+ | # Password wieder auslesen | ||
dencryptPWDFile() { | dencryptPWDFile() { | ||
- | if [ -f "/usr/bin/openssl" | + | |
- | | + | |
- | #debug printf "%s decrypt file :: \n%s.des3 to \n%s \n" " | + | |
- | | + | |
- | printError " | + | |
- | | + | |
} | } | ||
- | + | ||
- | + | ||
- | ## Read encrypted password conf it exits in to memory ######################### | + | # Password |
- | + | # Falls verschlüsselte Datei vorliegt | |
- | # Check if the des3 file exits | + | |
if [ -f " | if [ -f " | ||
dencryptPWDFile | dencryptPWDFile | ||
- | # Source the pwd to a enviroment variable | + | # in die Umgebung einlesen |
. ${PWDFILE} | . ${PWDFILE} | ||
- | # remove the clear type file | + | # Klarschrift Datei wieder entfernen |
rm ${PWDFILE} | rm ${PWDFILE} | ||
else | else | ||
- | | + | # Falls unverschlüsselt vorliegt, Datei verschlüsslen |
+ | if [ -f " | ||
. ${PWDFILE} | . ${PWDFILE} | ||
- | encryptPWDFile | + | encryptPWDFile |
- | rm ${PWDFILE} | + | |
else | else | ||
- | | + | echo |
- | | + | echo " |
- | printLine | + | echo "no preconfiguration password.conf found - edit the file => |
- | | + | exit 1 |
- | | + | |
fi | fi | ||
fi | fi | ||
+ | |||
+ | # Password auf eine interne Variable kopieren und überschreiben | ||
+ | # siehe Kasten zu den environ Problem | ||
+ | INTERNAL_PWD=${DB_PWD} | ||
+ | export DB_PWD=“DU_SOLLST_DAS_NICHT_LESEN“ | ||
+ | |||
+ | echo "Info -- read encrypted password | ||
</ | </ | ||
siehe auch https:// | siehe auch https:// | ||
+ | |||
+ | Um die Sicherheit noch weiter zu erhöhen und um Spuren in der Umgebung so weit wie möglich zu verschleiern, | ||
+ | |||
+ | |||
Zeile 329: | Zeile 340: | ||
Ist das nicht genug kann die Zielumgebung über Techniken wie einen Logon Trigger natürlich zusätzlich gehärtet werden. | Ist das nicht genug kann die Zielumgebung über Techniken wie einen Logon Trigger natürlich zusätzlich gehärtet werden. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Fazit ==== | ||
+ | |||
+ | |||
+ | Auch mit diesem Konzept lässt sich in unserer Welt keine endgültige Sicherheit herstellen. Es ist aber ein wichtiger Schritt sensitiver und vor allem proaktiv mit dem Passwortproblem umzugehen. | ||
+ | |||
+ | Und das Ganze ohne besonderem Aufwand für den Betrieb mit dem Vorteil die Passwortänderungen zu zentralisieren. | ||
+ | |||
+ | Den vollständigen Source Code finden Sie auf Github unter | ||
+ | https:// | ||
+ | |||
+ | Besonders möchte ich mich bei Martina Pippèrr und Sebastian Geddes bedanken, die geduldig geholfen haben diesen Text zu überabeiteten. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | ==== Über das Auslesen von Umgebung-Variablen in Linux ==== | ||
+ | |||
+ | Über /proc die Laufzeit Umgebung eines Linux Prozesses auslesen | ||
+ | |||
+ | Mit entsprechenden Rechten (denken sie dabei an ihren Kollegen oder Ihren Dienstleister) kann über das /proc Dateisystem und die „environ“ Datei die gesetzte Umgebung eines Scripts ausgelesen werden. D.h. sensitive Daten wie Passwörter sollten nur so kurz wie möglich in diesem Bereich sichtbar sein! | ||
+ | |||
+ | Über diesen Weg lässt sich auch sehr einfach überprüfen, | ||
+ | |||
+ | Anwendungsbeispiel: | ||
+ | * Prozess ID ermitteln mit „ps uafx | grep sqlplus” | ||
+ | * In das Proc File System wechseln „cd / | ||
+ | * Über die Datei „environ“ kann nun die Umgebung des Prozesses ausgelesen werden „strings environ | grep NLS_LANG“ | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
---- | ---- |
dba/passwort_verschluesselt_hinterlegen.txt · Zuletzt geändert: 2022/07/28 16:30 von gpipperr